文章作者:mika[est]信息来源:邪恶八进制信息安全团队
最近俺又迷恋上脚本了,嘿嘿~~~刚学完php然后又看了些php安全方面的文章,于是乎从google中找了几个站练习一下。结果发现php猜表名和列名真的很费劲啊,nbsi这类的扫描工具有没有那种用字典或者暴力猜解表名和列名的功能,难不成还得自己一个一个猜啊?我很懒的:-)突然想到自己不是刚刚学完php吗?为什么不学以致用呢?php不光是一个web脚本语言,它还是一个非常棒的命令行解释语言,用它写脚本好方便的哦。为了以后能够碰到这类问题省点劲俺就写了一个php脚本用来猜表和列名的。脚本写的很简单,内容如下: 俺先解释一下吧:程序里用到的模块是curl,它用来获取网页内容是非常方便的。我的这个php是for windows的,所以里面集成了很多的模块。但是curl默认是不启用的,你需要开启它哦。方法很简单,去网上下载php最新版本的绿色版(不需要安装的,方便携带),然后将压缩包内的php.ini-recommended复制到系统目录(win2k是winnt目录,xp等的是windows目录)并将其改名为php.ini,然后用记事本打开,找到如下一行:extension_dir =把它的值设置成你自己的,比如把压缩包接压到了c:php里,那么你需要把它设置成:extension_dir = “c:phpext”
然后再继续找到下面这段: ; windows extensions ; note that odbc support is built in, so no dll is needed for it. ; note that many dll files are located in the extensions/ (php 4) ext/ (php 5) ; extension folders as well as the separate pecl dll download (php 5). ; be sure to appropriately set the extension_dir directive.
;extension=php_mbstring.dll ;extension=php_bz2.dll ;extension=php_curl.dll ;extension=php_dba.dll ;extension=php_dbase.dll ;extension=php_exif.dll ;extension=php_fdf.dll ;extension=php_filepro.dll ;extension=php_gd2.dll ;extension=php_gettext.dll ;extension=php_ifx.dll看到php_curl.dll了吗?把它前面的分号去掉就可以了。然后保存一下,还没完呢,再去php的目录里找到这两个文件:libeay32.dllssleay32.dll
把他们复制到system32目录里就ok了。很简单吧?然后在环境变量里设置一下你的php的路径,这样在任何目录里就可以直接调用php.exe进行解析了。安装其它模块的步骤也类似,俺就不多说了:-)
言归正传,你通过上面几步就可以使用curl模块了。程序用法很简单,比如有注入的url是这样的:http://www.aaa.com/bbb.asp?ccc=56,你的字典文件在当前目录mydict.txt。那么本程序的使用方法就是:php explode.php http://www.aaa.com/bbb.asp?ccc=56 mydict.txt
需要注意的就是,由于这个程序本来就是俺自己用的,所以程序没有考虑很多东西。程序是根据页面返回的内容进行判断的,所以呢,你要首先自己手工获取一下,比如你可以这样:http://www.aaa.com/bbb.asp?ccc=56 and (select count(*) from mika520)>0(access和mssql上)或者http://www.aaa.com/bbb.asp?ccc=56 and 1=1 union select 1,2,3,4,5,6 from mika520%23 (mysql上)
其中的mika520是一个不存在的表,这样返回的页面后你可以察看源代码,随便找一个正确页面中不存在的语句作为关键字(nbsi等的注入工具默认是用正确页面里的东西作为判断的,俺和它反着来:-),然后把程序代码中第4行的$keyword的值换成你的关键字就可以了。比如下面这个站吧:http://www.elkhart.k12.in.us/content.php?id=157
由于是php的所以你得用第二种方式来猜,即需要使用联合查询,所以先判断注入点存在不存在,然后使用order by判断字段数,我在这里判断的是5个字段,判断好后就可以使用我的这个程序来猜了,结果如下: f:scriptsphpmine>php forcetb1.php http://www.elkhart.k12.in.us/content.php?id =157 5 mydict.txt universal database tables explode exploit v0.1
written by mika[est]
[+]searching what you want… …[*] found:structure………………………………………………….看到了吗?找到了一个表,呵呵。再来看看字段: f:scriptsphpmine>php forcetb1.php http://www.elkhart.k12.in.us/content.php?id =157 -t structure 5 temp.txt universal database tables explode exploit v0.1
written by mika[est]
[+]searching what you want… [*] found:pision……[*] found:id.[*] found:level………[*] found:title…. ..[*] found:content..[*] found:parent_id………很简单吧?命令中的那个5就是你用order by猜出的字段数,换成实际中的就可以了。如果是access或者mssql的数据库,只要去掉那个字段数(即例子中的5)的参数就可以了。我就不多做演示了。
如果大家用得过程中出现问题可以自己去改代码,很简单的:-)
另外我这个程序默认是使用http代理的,所以你需要修改这一行:curl_setopt($curl,curlopt_proxy,”127.0.0.1:8080″);
换成你的代理就好了,如果不需要代理那就直接注释掉好了。
其实猜嘛,关键还是看你的字典是不是够强大,你可以把你常见的字典组合一下就好了。比如nbsi和狂注幽灵等的字典拿过来,然后组成一个文件就是了。但是这两个字典有可能有很多重复的,为了节省不必要的猜解,需要去处重复的。我这里用php写了非常简单的程序可以帮助你去除重复行,如下: