张坤的个人博客

  • 首页
  • 分类
  • 标签
  • 日志

  • 搜索
Jenkins RabbitMQ Zookeeper IDEA Logstash Kibana ELK NIO Netty Spring Cloud Golang DataX Elasticsearch React Native Mysql H2 Socket Spring Boot Kafka Mybatis Sqlmap Vue Postgresql Docker Vert.x Flutter Flink Redis

Sqlmap学习笔记(三)

发表于 2020-05-29 | 分类于 Sqlmap | 0 | 阅读次数 23

Sqlmap性能优化设置

  1. Sqlmap设置持久HTTP连接,sqlmap默认是一次连接成功后马上关闭。

    HTTP报文中相当于Connection: Close(一次连接马上关闭)

    要扫描站点的URL比较多时,这样比较耗费性能,所以需要将HTTP连接持久化来提高扫描性能。

    HTTP报文相当于Connection: Keep-Alive

    如果在Sqlmap中设置的话,只需要加上--keep-alive参数

    sqlmap -u "目标URL" --keep-alive
    
  2. Sqlmap设置不接收Http Body(响应体)部分

    Body部分内容太大会增加HTTP响应延迟,如果只关心响应头部分内容,则可以设置空连接

    设置参数--null-connection

    sqlmap -u "目标URL" --null-connection
    
  3. Sqlmap设置多线程

    Sqlmap默认是单线程访问的,扫描的顺序串行执行,必须要等到上一次请求成功后才会执行后面的扫描,这样以来,扫描的效率就会低很多。因为网络连接是耗时操作,等待服务端响应的这段时间,Sqlmap就什么都做不了,本地的CPU、内存资源得不到有利的利用。而多个线程并行处理请求则可以有效的利用本地系统资源。

    但是设置线程太多也不好,因为线程越多,服务端的压力越大,可能会导致响应速度大幅度降低甚至出现丢包现象,导致请求无响应。所以Sqlmap最大只能设置10个线程。

    通过设置--thread参数设置线程数量

    sqlmap -u "目标URL" --thread=10
    
  4. Sqlmap设置预测输出

    用于检索并统计字符出现的次数

    参数:***--predict-output***

    与--thread相互冲突,它们不能同时被设置,比如同时指定--predict-output和--thread

    sqlmap -u "http://test.dvwa.com/login.php" --predict-output --thread=3
    

    将会报以下错误

    [23:10:15] [CRITICAL] switch '--predict-output' is incompatible with option '--threads' and switch '-o'
    
  5. 通过-o可以开启所有性能优化的参数

  6. 通过--dbms可以指定要扫描的数据库类型,默认判断是否是其它数据库

    sqlmap -u "目标站点" --dbms=mysql
    

Sqlmap指定位置注入

  1. 指定参数进行扫描,而不是扫描所有参数,这样可以避免浪费时间到非注入点参数上,从而提高扫描效率。比如扫描以下URL,已知Submit是静态参数,id是动态的,那么在扫描的时候只需要指定id就行了,指定多个参数时用双引号包起来,并以逗号分隔。也可以指定HTTP请求头中的参数,如User-Agent

    sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" -p id
    
  2. 设置--skip跳过指定参数扫描,和-p作用相反,它用来跳过需要扫描的参数。如果不想扫描HTTP头的Referfer和HOST参数

    sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" --skip "Referfer,HOST"
    
  3. 设置**--param-exclude**不对包含具体内容参数的请求进行探测,如不对包含token和session参数的请求进行探测

    sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" --param-exclude="token,session"
    
  4. 设置--skip-static扫描时忽略非动态参数

  5. 指定URI位置进行注入

    当注入点在URI上时,除非手动将注入点指向URI上,否则Sqlmap不会对URI路径执行任何自动测试,必须要在扫描时在URI上加星号(*)来指定这些注入点

    sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli*/?id=1&Submit=Submit#"
    

自动确认扫描

有时候,在扫描的时候,sqlmap会等待确认(Y/N),需要手动确认才能继续扫描

通过设置--batch来忽略等待确认,自动回应Y来进行扫描

sqlmap -u "目标URL" --batch

指定操作系统扫描

使用--os参数设置要探测操作系统的版本

sqlmap -u "目标URL" --os windows

或者

sqlmap -u "目标URL" --os linux

关闭自动转换

sqlmap默认情况下所有参数会被转成字符串类型,并在NULL值情况下使用空格字符串代替,这样做是为了防止意外错误发生。如果想关闭自动转换的话,使用--no-cast

sqlmap -u "目标URL" --no-cast

关闭字符转义

设置--no-escape可以关闭字符转义,在特殊情况下,关闭字符转义可以增加注入的成功率

Sqlmap自定义注入负载位置

--prefix:注入点参数的固定前缀

--suffix:注入点参数的固定后缀

例如:在对目标URL注入时会自动在payload前后两边加上‘(’和‘)’

sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" -p id --prefix="(" --suffix=")"

执行测试的风险等级

--risk:1~3,默认为1,风险值和大量使用了基于时间的SQL注入测试,值3也增加了基于OR的SQL注入测试。

sqlmap -u "目标URL" --risk 3

页面比较参数

--string:包含指定的字符串,则返回True

--not-string:与--string互斥,包含指定的字符串时,返回False

--regexp:通过正则返回匹配的字符串,如果包含则返回True

--code:如果是返回的是预期的状态码,则返回True

内容比较参数

--text-only:页面内容包含指定字符串,如是则返回True

--titles:页面title标签中包含指定文本,如果包含则返回True,否则反之

# Jenkins # RabbitMQ # Zookeeper # IDEA # Logstash # Kibana # ELK # NIO # Netty # Spring Cloud # Golang # DataX # Elasticsearch # React Native # Mysql # H2 # Socket # Spring Boot # Kafka # Mybatis # Sqlmap # Vue # Postgresql # Docker # Vert.x # Flutter # Flink # Redis
Mybatis源码日记(一)
Sqlmap学习笔记(二)
  • 文章目录
  • 站点概览
会Coding的猴子

会Coding的猴子

57 日志
19 分类
28 标签
RSS
Github
Creative Commons
© 2021 会Coding的猴子
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4

湘ICP备18011740号