参数:-p,--skip
sqlmap默认测试GET和POST参数;
当level>=2时,会测试HTTP Cookie头的值;当level>=3时,会测试User-Agent和HTTP Referer头的值。
使用-p参数可以设置要测试的参数。例如: -p "id,user-anget"
当使用的level值很大但是有个别参数不想测试的时候可以使用--skip参数。
例如:--skip="user-angent,referer"
有些web服务器使用了URL重写(伪静态),导致无法直接使用sqlmap测试参数,可以在想测试的参数后面加*,例如:
sqlmap -u "http://targeturl/param1/value1*/param2/value2/"
--dbms 指定数据库
如果认为目标网站存在注入点,但是sqlmap没检测出来,可以设置--dbms参数
--os 指定操作系统(windows、linux)
--invalid-bignum 指定无效的大数字
默认情况下id=13,sqlmap会变成id=-13来报错,当你想指定一个报错的大数值时,可以使用这个参数。
--invalid-logical 指定无效的逻辑
也可以指定把默认的id=-13的报错改成id=13 AND 18=19报错。
--no-cast
默认情况下,sqlmap榨取数据时,会将所有结果转换为字符串,并用空格替换NULL;
有些老版本mysql数据库可能不支持用空格替换NULL的处理机制,所以需要用到此参数。
--no-escape
出于混淆和避免出错的目的,默认情况下,当payload中用单引号界定字符串时,sqlmap使用char()编码的方法替换字符串。例如:
SELECT 'foo' —— SELECT CHAR(102)+CHAR(111)+CHAR(111)
使用--no-escape参数将关闭此功能。
--prefix,--suffix
在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。
例如,如果代码中是这样调用数据库的:
$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";
这时你就需要--prefix和--suffix参数了
sqlmap -u "http://1.1.1.1/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "’)" --suffix "AND (’abc’=’abc"
这时执行的sql语句为:
$query = "SELECT * FROM users WHERE id=(’1’) AND (’abc’=’abc’) LIMIT 0, 1";
注意:前提是已经得知了目标服务器查询时使用的sql语句,在基于错误的检测时,可能会把服务端的sql语句爆出来。
--tamper
使用--tamper参数对数据做修改来绕过WAF等设备的过滤。
tamper的位置:/usr/share/sqlmap/tamper/
例如:可以一次指定多个tamper,sqlmap会依次尝试,使用-v 3显示详细信息
root@kali:~# sqlmap -u "http://192.168.80.33/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=4pq76dua60ghqc807869jrb9v2" --tamper="between.py,randomcase.py,space2comment.py" -v 3