• sqlmap基础入门超详细教程


    前言:

    总算进入了自己喜欢的行业. 要时刻记得当初自己说过的话, 不忘初心. Come on!

    资料:

    感谢超哥分享的干货..  sqlmap干货点击直达

    学习环境:

    本次学习使用的是kali集成的sqlmap,包括后续的burp suite 不牵扯安装.此步略过.

    sqlmap简介:

    • sqlmap是一款开源免费的漏洞检查、利用工具.
    • 可以检测页面中get,post参数,cookie,http头等.
    • 可以实现数据榨取
    • 可以实现文件系统的访问
    • 可以实现操作命令的执行
    • 还可以对xss漏洞进行检测

    基本上可以说 安全从业人员必备的一款神器之软件.也是迈入安全圈的必要条件.

    支持检测类型

    sqlmap 支持5种漏洞检测类型:

    • 基于布尔的盲注检测  (如果一个url的地址为xxxx.php?id=1,那么我们可以尝试下的加上 and 1=1(和没加and1=1结果保持一致) 和 and 1=2(和不加and1=2结果不一致),则我们基本可以确定是存在布尔注入的. )
    • 基于时间的盲注检测(和基于布尔的检测有些类似.通过mysql的 sleep(int)) 来观察浏览器的响应是否等待了你设定的那个值 如果等待了,则表示执行了sleep,则基本确定是存在sql注入的
    • 基于错误的检测 (组合查询语句,看是否报错(在服务器没有抑制报错信息的前提下),如果报错 则证明我们组合的查询语句特定的字符被应用了,如果不报错,则我们输入的特殊字符很可能被服务器给过滤掉(也可能是抑制了错误输出.))
    • 基于union联合查询的检测(适用于如果某个web项目对查询结果只展示一条而我们需要多条的时候 则使用union联合查询搭配concat还进行获取更多的信息)
    • 基于堆叠查询的检测(首先看服务器支不支持多语句查询,一般服务器sql语句都是写死的,某些特定的地方用占位符来接受用户输入的变量,这样即使我们加and 也只能执行select(也不一定select,主要看应用场景,总之就是服务端写了什么,你就能执行什么)查询语句,如果能插入分号;则我们后面可以自己组合update,insert,delete等语句来进行进一步操作)

    支持的数据库管理系统

      已知的有mysql,sql server,oracle,sqlite.............. 基本上全部支持了,如果某些小众的不支持,放心,我们一般也接触不到,目前还是以mysql为主流(个人见解,欢迎纠正)

    其他特征

           这些好像都要版本>= 0.8之后才可以使用,  我本次使用的是1.0

      -d  如果你知道了对方数据库账号,密码,端口等一些信息,则可以通过sqlmap直接连接 不需要再装客户端管理软件 例 :Navicat

      可以与burp suite ,google搜索引擎,结合使用. 

      get,post,cookie,referer,user-agent 都可以指定和随机产生. (cookie过期后自动更新cookie)

      并发,延迟等修改.(比如设置间隔请求时间(避免被服务器发现),并发大一点,以达到追求速度的效果,)

      支持Basic,Digest,NTLM,CA等身份认证(但个人感觉还是web应用层的身份证多一点)

      包含密码破解模块..

      等.....

    参数介绍

      因为参数太多,我这里分项学习做笔记

      options类:

        sqlmap --version       查看sqlmap版本信息.

        -h            查看功能参数(常用的)

        -hh             查看所有的参数 (如果有中文包 就最好了)

        -v            显示更详细的信息 一共7级, 从0-6.默认为1, 数值越大,信息显示越详细.

            Target(指定目标):

        -d            直接连接数据库侦听端口,类似于把自己当一个客户端来连接.

        -u               指定url扫描,但url必须存在查询参数. 例: xxx.php?id=1 

        -l            指定logfile文件进行扫描,可以结合burp 把访问的记录保存成一个log文件, sqlmap可以直接加载burp保存到log文件进行扫描

        -x            以xml的形式提交一个站点地图给sqlmap(表示不理解..)

        -m            如果有多个url地址,可以把多个url保存成一个文本文件 -m可以加载文本文件逐个扫描

        -r            把http的请求头,body保存成一个文件 统一提交给sqlmap,sqlmap会读取内容进行拼接请求体

        -g            利用谷歌搜索引擎搭配正则来过滤你想要的

        -c            加载配置文件,配置文件可以指定扫描目标,扫描方式,扫描内容等等.加载了配置文件sqlmap就会根据文件内容进行特定的扫描

    实践

    get扫描

        扫描目标是我本机对象Mutillidae,

        username | password  随便键入值,

    得到url :http://192.168.21.134/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details

    我们知道 在这段url中,有用的信息只有username & password 所以我们就可以对这两个变量进行注入测试

    sqlmap :

      -u 指定一个带参数的url地址进行扫描.

      -p 只对特定的参数进行扫描(我们知道,page等是用不到的,在这串url中,只有password和username是有价值的信息,所以我们只对username进行扫描)

    由于我kali python环境的问题, sqlmap的 字体和常规不一致..(常规绿色,),我也没有着手解决, 很快,sqlmap就扫描到了结果,疑似发现注入,并且发现了我们后端使用的是mysql数据库,问我们是否跳过数据库类型的检测,(总之就是这意思,原理我渣渣的英文读写能力...),既然已经知道数据库了,我们就没必要进行其他类型的检测了,常规跳过就好,:..

     之后又提示我们检测的级别(level)和风险值(risk), 级别,风险越高,对web造成的伤害性也就越高,常规为默认.(试想下,你帮客户做渗透,结果渗透没做好,把人家web给扫描出问题了....,如果黑客出于攻击行为来使用的话,肯定越高越好..个人理解..) 这里我们选择默认..

    接下来sqlmap就会运用之前说的5种扫描方式来对我们指定的url种的特定参数 ,进行一系列的全自动注入,

    遗憾的是通过sqlmap一系列的扫描和我不断的 尝试,好像并没有注入,但是sqlmap强烈建议我们提供扫描等级和风险等级...

     

    那我们就提升下扫描等级和风险等级:

    扫了一圈结果还是没发现注入(我晚上在好好研究下.)...

    post扫描

    sqlmap 支持2种post 扫描. 1, 请求文件. 2,busp suite log文件.

    请求文件:

      首先需要设置浏览器代理.

     打开抓包工具,这里以burp suite为例

    把我们抓到的数据包 全部复制下来 保存为一个txt文件

     接下来.. sqlmap启动, sqlmap -r request.txt -f 

    还有一种方式 就是通过加载burp suite的日志文件进行扫描注入..

    sqlmap -l xxx.txt  -f --dbs ... 

    burp suite的日志文件生成方式为:

    Request类参数

        --data         提交的时候要携带的参数. (get,post通用,最简单的post请求方式). 

        --users          获取数据库用户

        --dbs          获取所以数据库

        --param-del       变量分隔符,默认为&,

        --cookie        设置cookie头

        --user-agent      指定user-agent(防止对方服务器侦测到)

        --random-agent     随机agent

        --host          指定host头

        --level        安全级别 (1-5, >=3,检测anent,>=5,检测host头)

        --referer          指定referer头(level >=3才检测)

        --headers       指定额外的headers请求头(多个必须使用换\n,首字母必须大写)

        --method        指定请求方式, 默认为get,get请求不成功尝试post

        --auth-type      身份认证类型  (Basic,Digest,NTLM) ,

        --auth-cred      身份认证账号密码  "username:password"  , 完整demo: http://xxx.php?id=1 --auth-type  Basic  --auth-cred "u:p"  (个人认为不常用)

        --auth-cert / --auth-file  基于客户端证书进行校验,(个人感觉非常非常非常之不常用,略过...嘿嘿,放肆一把,就不学这个了)      

        --proxy       指定代理 

        --proxy-cred       指定代理的账号密码(代理需要账号密码的前提下)

        --ignore-proxy    忽略系统代理(我们设置的代理都是通过浏览器进行设置的,通常用于扫描本地系统)

        --delay       每次请求的延迟时间,单位秒,默认无延迟.

        --timeout      请求超时时间,默认30秒.

        --retries        连接超时重试次数 ,默认3次

        --randomize      长度,类型与原始值保持一致的情况下,指定每次请求随机取值的参数名 例: xxx.php?id=100, --randomize=''id" 则id的值在100-999随机出现

        --scope        过滤日志内容,通过正则筛选扫描对象. 例: sqlmap -l burp.log --scope="(www)?\.aaa\.(com|net|org)" 则只会扫描以www开头.aaa.com或者net或者org

        --safe-url    \ --safe-freq  扫描的时候回产生大量的url,服务器可能会销毁session.每发送--safe-freq 次注入请求后 就发送一次正常请求.

        --safr-url          需要扫描的url.

        --safe-freq       出现错误(或者说带sql注入请求)的次数

        --skip-urlencode  get请求会对url进行编码. 某些web服务器不遵循标准编码 此参数就是不对get请求的url进行编码

        --eval         每次请求前指定执行特定的python代码.

        

         

           

    sqlmap之cookie应用

    对本机dvwa进行sql漏洞扫描. 首先这个网站是需要登录的.

    登录过之后,在浏览器内获取cookie信息.

     复制cookie信息到sqlmap ,多个cookie之间用分号间隔分开

    很快就直接把数据库给爆了出来,证明此url存在sql注入漏洞且sqlmap带入cookie成功.

    optimization(优化参数)

          -0            后续3个参数的集合(除--threads)

          --predict-output      根据检测方法,比对返回值和统计表(/sqlmap/common-outputs.txt)内容,不断缩小检测范围,提高检测效率.(比对信息包括但不限于版本名,用户名,密码,表名,列名..等,与--threads参数不兼容)

          --keep-alive        使用http(s)长连接,新能好, 与--proxy参数不兼容.长连接避免重复简历连接的网络开销,但大量长连接会严重占用服务器资源

          --null-connection      只获取相应页面的大小值,而非页面具体内容.通常用于盲注判断真/假,降低网络带宽消耗. 与--text-only(基于页面内容的比较判断)不兼容

          --threads           最大并发线程,默认为1个线程,建议不要超过10个线程,否则可能影响站点可用性.与--predict-output参数不兼容

    Injection(注射参数)

          -p             扫描指定的参数,例 xxx.php?id=2&name=root  -p id  只会扫描id变量的值 (可以指定多个变量名,多个变量名逗号隔开)

                        (在使用-p的时候会使--level失效,例如--level=3的时候才会扫描user-agent,但是我们使用手动指定了扫描参数user-agent 虽然没有指定--level=3,但此时也会扫描)

          --skip            排除指定的参数,例如--level=3 会扫描user-agent 但是我们不希望扫描useragent 可以使用--skip跳过此参数的扫描

          --dbms            指定后端数据库,在已知web应用的数据库前提下,略去sqlmap扫描判断后端数据库过程,提高效率.例: --dbms="mysql"(<5.0>指定版本)

          --os            指定目标操作系统

          --invalid-bignum/ --invalid-logical  默认使用负值使参数失效,bignum使用最大参数值使参数失效,logical使用布尔判断值使取值失效

          --no-cast          榨取数据时,sqlmap将所有结果转换为字符串,默认用空格替换null, 老版本可能不支持空格替换,使用--no-cast关闭替换

          --no-escape          不逃逸,也就是说当payload中用丹壹号界定字符串时,sqlmap使用char()编码逃逸的方法替换字符串,也就是说不然sqlmap对payload中 的单引号进行编码

          --prefix/ --suffix       前缀/后缀    

          --tamper          混淆脚本,用于绕过应用层过滤,IPS,WAF. 编写好的脚本存放于(sqlmap/tamper/...)使用的时候直接写出脚本名称即可,sqlmap会 自动去对应文件夹加载对应的文件      

    Detection(检测)

          --level         检测级别,默认1级. 可设定1-5.级别不同,检测的细度不同./sqlmap/xml/payloads(检测级别不同,发送的payloads不同,)

          --risk           风险级别 1-4 默认1, 如果指数过高,可能会对数据造成伤害(如:更新,删除等)

    Techniques(检测sql漏洞存在的技术类型)

          就是之前提到的sqlmap的五种检测类型, 默认是全部使用, 也可以手动指定.

          --time-sec        基于时间的注入检测相应延迟时间(默认5秒)

          --union-cols        默认联合查询1--10列,随着--level增加 最多检查50列.可以手动指定.

          --union-char       联合查询默认使用null,可能会出现失败,此时可以手动指定数值.  例: union select null  union select 1111

               --dns-domain        如果攻击了dns服务器,使用此功能可以提高数据榨取速度

    Fingerprint(指纹信息)

          -f(--fingerprint)            数据库管理系统的指纹信息(数据库类型,操作系统,架构,补丁等)

          -b (--banner)              banner信息

    Enumeration(枚举)

          --current-user            查询当前数据库管理系统账号

          --current-db             查询当前数据库昵称

          --hostname             查询当前主机名

          --users               查询数据库系统中所有的账号

          --peivileges-U xxx          -u 查询指定账号的权限 如果不跟指定用户名 则查询的是所有的用户, -CU 查询当前用户

          -D                   指定数据库

          --table               查询所有表

          -T                   指定表

          --columns              查询指定表的所有列

              -C                   指定某一列查询

          --exclude-sysdbs          忽略系统库

          --count               统计记录

          --batch              批处理,也就是系统默认选项(按照默认的选项 全自动执行)

    dump数据

          --dump              保存数据到本地(配合一系列的指令)

          -C                指定columns  如果不指定,默认整表

          -T                指定表名,

          -D                指定数据库

          -start                数据起始位置 (按表的id进行取值)

          -stop                数据结束位置

          --dump-all            下载整表

          --sql-query            指定sql语句

    Brute Force(暴力破解)

          在mysql <5.0的时候 ,是没有information_schema库的,这时候我们就不能根据数据源表进行一系列的操作

          还有一种情况是mysql>=5.0的时候,但无权限读取information_schema库,这时候可能就需要用到暴力破解

          在微软access数据库中,默认是无权读取MSysObjects库的

          --common-tables                  暴力破解表名(根据字典)

          --common-columns(Access系统表无列信息)      暴力破解表字段

    Udf Injection(UDF注射)

          --udf-inject ,, --shared-lib

          --file-read              读取目标系统指定文件(值为具体文件的路径)

          --file-write              写入的文件  

          --file-dest               写入保存的路径

          --os-cmd                执行系统命令

          --os-shell                得到系统shell

          --sql-shell               得到sqlshell

    Winwods RegisTory(windows注册表相关)

          --reg-read              读取注册表键值

          --reg-add               向注册表添加键值

          --reg-del                 删除注册表键值

          --reg-key --reg-value --reg-data --reg-type  辅助参数, 上面三个操作的时候可以缩小范围.

    Genral(常规参数)

          -s          sqllite会话文件保存位置

          -t           记录流量文件保存位置

          --charset       强制字符编码

          --crawl        从起始位置爬站深度

          --csv-del       dump下来的数据默认存于","分割的csv文件中,--csv-del用来指定其他分隔符

          --dbms-cred       指定数据库账号

          --flush-session      清空session    

          --force-ssl        针对https的网站..

          --fresh-queries           忽略本地session  从新发送请求

          --output-dir      指定一个输出目录

          --parse-errors       分析和显示数据库中内建报错信息

          --save         将命令保存成配置文件

          --check-waf           检测waf.ips.ids

          --hpp          绕过WAF,IPS,IDS 尤其对ASP,/IIS.ASP.NET/IIS

           --identify-waf       更彻底的检查waf

    Miscellaneous(杂项)

          --mobile        模拟只能手机设备(实现方式只是替换对应的user-agent)

          --purge-output      清除output文件夹

          --smart          当有大量检测目标时, 只选择基于错误的检测结果

          --wizard        向导模式. 

  • 相关阅读:
    Hadoop Yarn 框架原理及运作机制及与MapReduce比较
    模型驱动与属性驱动区别
    spark伪分布式的安装
    大数据集群的常见问题
    linux常用命令
    大数据集群ssh登录其他机器失败 RSA host key for zb03 has changed and you have requested strict checking. Host key verification failed.
    Python 地点转化为经纬度
    Hbase原理、基本概念、基本架构
    struts2的java.lang.NoSuchMethodException错误
    抽象工厂
  • 原文地址:https://www.cnblogs.com/php09/p/10404560.html
Copyright © 2020-2023  润新知