sqlmap基本使用
- GET型
- 基础参数
- 获取数据库信息
- POST型
- 基础参数
- 使用技巧
GET型
基础参数
GET类型的sql注入,需要用到的sqlmap参数为 -u
基本格式:
sqlmap + -u + url + 其他参数
每一个参数都需要用空格分开
简单GET型常用参数
参数 | 介绍 |
-o | 开启所有优化开关 |
-batch | 出现的选项全部默认选是 |
-dbms | 表示该网站使用了什么类型的数据库,后需要接数据库类型。例:-dbms mysql |
-level | 执行测试的等级(1-5,默认等级为1)检测数据库,级别越高检测越全面,等级至少为2才能检测cookie类型的sql注入。例:-level 1 |
-risk | 执行测试的风险(0-3,默认为1)例:-risk 1 |
-v | 详细级别(0-6,默认1)想了解下注入的内容可以开启这个参数,他可以让我们看到详细的注入内容和过程。例:-v 6 |
–threads | 可以自定义线程加速,(0-10,默认1)例:-threads 10或 -thread=10 |
-techniques | 指定sql注入手段有五个选择,B:bool类型;E:Error类型;U:联合查询;S:stacked queries (要对目标系统进行文件操作,操作系统,注册表操作,必须指定S);T:时间检测。可以多个一起使用例:-techniques BEUST |
获取数据库信息
查询有哪些数据库
sqlmap -u “url?id=1” 需要添加的参数 –dbs查询test数据库中有哪些表
sqlmap -u “url?id=1” 需要添加的参数 -D (想要查询的数据库) –tables查询某个数据库中某个表有哪些字段
sqlmap -u “url?id=1” 需要添加的参数 -D (想要查询的数据库) -T (想要查询的数据表) –columns查询某个数据库中某个表中的具体数据
sqlmap -u “url?id=1” 需要添加的参数 -D (想要查询的数据库) -T (想要查询的数据表) -C (想要查询的字段名) -dbump
一般情况下除了参数-techniques和-dbms其他参数都可以随意添加下去或者说都需要添加下去。-techniques需要清楚对方可以使用-techniques包含了的五个注入手段之中的某一个或某些的时候可以使用,或者是想要试试运气。-dbms需要清楚对方使用的数据库为哪一种数据库(sqlmap支持的数据库:MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB),如果想要试试运气也可以。
POST型
基础参数
POST类型的sql注入,需要用到的sqlmap参数为 -r
这种类型的sqlmap使用则需要配合burp使用burpsuite等工具抓取post包将数据保存为一个txt文档。
基本格式:
sqlmap + -r + 存放数据包的txt文档文件名 + 其他参数
前面提到的参数到这里也还是可以使用的,只是增加几个不一样的参数
参数 | 介绍 |
-cookie | 当出现cookie注入是可以使用该参数,例:-cookie=“cookie的内容” |
-tamper | 当对方进行了编码时可以使用该函数,将我们的值进行编码后的SQL注入。这个参数可以使用sqlmap自带的编码脚本,也可以使用自己的编码脚本。 |
使用技巧
当我们明白是哪个地方存在SQL注入时,我们可以用burpsuite抓取数据包之后将他的值改为 .* 这样sqlmap会对他进行优先注入提高成功率。
例:sqli-labs第18题
因为sqli使用的数据库内容相同,使用之前得到的账户密码进行登录,登录成功后得到提示 发现User-Agent可能存在注入,我们可以先对他优先注入。
使用burpsuite抓取数据包后将User-Agent部分的内容替换成.*
之后进行注入。
sqlmap -r less018.txt -o --batch --dbms mysql --level 5 --risk 3 --thread=10 --dbms mysql -v 6 -D security -T users -columns
很快速的得到对方数据库中的数据。
例:sqli-labs第19题
19题是Referer存在sql注入,我们可以使用和18题一样的注入方式,但是不能将他全部内容进行替换,而是将*加到url之后。
sqlmap -r less19.txt -o --batch --dbms mysql --level 5 --risk 3 --thread=10 --dbms mysql -v 6 -D security -T users -columns
将* 放在url之后是为了将sql注入语句放在url之后进行注入。如果将Referer的内容换成*,对方服务器将无法识别。