You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/// <summary>/// 1 获取jquery的JSESSSIONID存储至Cookie/// 2 获取登陆页面的It字段验证码/// </summary>/// <returns>It字段验证码</returns>privateasyncTask<String>GetItCode(){stringretValue=null;HttpResponseMessageresponse=awaithttpClient.GetAsync("/jqerp/");if(response.IsSuccessStatusCode){varhtml=awaitresponse.Content.ReadAsStringAsync();varconfig=AngleSharp.Configuration.Default;//Create a new context for evaluating webpages with the given configvarcontext=BrowsingContext.New(config);//Parse the document from the content of a response to a virtual requestvardocument=awaitcontext.OpenAsync(req =>req.Content(html));retValue=document.GetElementsByName("lt")[0].GetAttribute("value");}returnretValue;}
前言
接这篇日志 ERP网页抓包笔记——Web反向工程(一),一定要把逆向工程进行到底。
上一篇基本把ERP的登陆以及安全机制的原理整理,http登陆验证弄得差不多了。从可行性上讲已经完全没有问题了。接下来就需要最终用代码再验证下前面的成果。就像打仗,最后要占领才算是最终胜利。所以还是要借用我们毛主席这句诗词
将革命进行到底
项目构建
项目的名字就叫ERPViewer,意思就是ERP系统就是是透明了(只要我输入用户密码),我想看啥就看啥。只是一个辅助软件,并不是破坏其安全的。
项目是用VS2019建的(很久没写C#了)
MainWindows.xaml
不是重点,略
设置HttpClient
HttpClient是老熟人了,代async 的api,使用方便
这次我们用了HttpClientHandler帮忙做HttpClient的构造参数
HttpClientHandler是代理类,可以配置一系列相关参数,这次我们主要为了用它控制Cookie。
默认HttpClientHandler是开启重定向和Cookie,所以我们前面分析有几个来回的交互,类库帮我们处理了,省事好多。
由于自动跳转以及Cookie是内部实现,所以我们在调用
get /jqerp/
后,HttpClient都帮我完成了可以通过HttpClientHandler的CookieContainer看的一清二楚
在自动跳转后,最后获取的body是一个登陆页面,
由于登陆的验证码“藏”在里面,所以body还有用
怎么拿出来那?
应该有这种分析html标签的库的
我用的第三方库AngleSharp
直接nuget一装就行了。
找出value也很简单,通过name来找,api是GetElementsByName,高仿js语法一看就懂,违和感很强。
代码实现
前面“验证码”也拿到了,当然比市面上的图形验证码要简单一点
登陆的操作模拟postman,content-type是application/x-www-form-urlencoded
针对这种body,C#为我们提供了FormUrlEncodedContent类来操作
我怕服务端认出我们是“假货”,所以我把浏览器上发送的body都填的一模一样(心虚)
好在有惊无险的过了。
接下来就是要拿取CUNAME了。
虽然和用户名是一致的。
按照“原著”,CUNAME是客户端通过js设置的。
但是为了起到“锻炼”的作用,必须要靠抓取。
简单一点就用正则匹配再用json解析获取
获取到CUNAME后设置到Cookie里面去
代码如下
前面主要任务都完成好了,这步工作反而变得非常简单了
输入值
Cookie
JSESSIONID:已经获取
CUNAME:已经设置好
actType:loadTaskListJSON 输入固定值
代码看上去是最简单的一步。
好了分步骤都分解完毕,串起来吧
小结
反向工程不必正向工程,缺乏必要的“情报”,是属于迷雾探索型。基本靠结果反过来推过程
需要把整个过程的信息采集全!
不能从登陆开始,要从访问网络开始。好在现在的“工具”真的很强大,一个浏览器里面的开发者工具基本全部搞定了。Fiddler 也很好用可以抓客户端http的包,就是不太稳定。wireshark也不错。不过不太趁手一般我最后再用
需要耐性,抽丝剥茧。但是一点突破,全局突破的感觉很爽
步骤:情报收集分析 -> postman推演验证 -> 代码实现
代码地址-ERPViewer
The text was updated successfully, but these errors were encountered: