Web安全攻防 学习笔记

一、Sqlmap 性能优化



1.1、Sqlmap 设置持久 HTTP 连接

sqlmap 中可以设置连接为持久连接,也就是长连接,连接一次就不需要多次发送连接请求。HTTP 报文中设置connection:keep-alive



注意: --keep-alive 不能与 --proxy 一起使用,会发送冲突。

$ python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --keep-alive --banner -v 5

SQL线程 command 状态为Daemon sqlmap多线程_sql


SQL线程 command 状态为Daemon sqlmap多线程_python_02



1.2、Sqlmap 设置不接收 HTTP Body

sqlmap 中设置空连接,表示不接受 HTTP 当中的 Body,使用参数 --null-connection。 可以直接获得 HTTP 响应的大小而不用获得 HTTP 响应体,可以节省网络宽带的消耗,常用在盲注过程中

1.3、Sqlmap 设置多线程

sqlmap 中设置同时发送多少个 HTTP 请求的多线程( 0 ~ 10 )。参数 --thread=线程数

$ python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --threads=5 --banner -v 5


1.4、Sqlmap 一键优化

添加 -o 参数相当于同时添加下列三个优化参数

  • --keep-alive
  • --null-connection
  • --threads=3
$ python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" -o --banner -v 5

长连接比较好观察

SQL线程 command 状态为Daemon sqlmap多线程_python_03




二、Sqlmap 自定义检测参数



2.1、Sqlmap 设置探测等级

参数:--level

此参数用于指定检测级别,有 1~5 共 5 级。默认为1,表示做最少的检测,相应的,5 级表示 做最多的检测。


2.2、Sqlmap 设置风险等级

参数:--risk

此参数用于指定风险等级,有 1~3 共 3 级。

  1. 默认风险等级为 1,此等级在大多数情况下对测试目标无害。
  2. 风险等级 2 添加了基于时间的注入测试
  3. 等级 3 添加了 OR 测试,若注入点为 update 会对数据库进行改变,因此存在很大风险。


三、Sqlmap 指定位置注入



3.1、Sqlmap 设置指定注入参数

        默认情况下 Sqlmap 会测试所有 GET 参数和 POST 参数,当 level >= 2 时会测试 cookie 参数, 当 level >= 3 时会测试 User-AgentReferer

实际上还可以手动指定一个以逗号分隔的、 要测试的参数列表,该列表中的参数不受 level 限制。这就是 “-p” 的作用。

$ python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" -p "id,user-agent" --banner



如果不想测试某一参数则可以使用 --skip

$ python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --level 5 -skip="user-agent,referer" --banner


3.2、Sqlmap 设置 URI 注入位置

        URI,通一资源标志符( Uniform Resource Identifier, URI ),表示的是 web 上每一种可用的资源,如 HTML 文档、图像、视频片段、程序等都由一个 URI 进行定位的。

        当注入点位于URI本身内部时,会出现一些特殊情况。除非手动指向 URI 路径,否则 sqlmap 不会对 URI 路径执行任何自动测试。必须在命令行中添加星号 * 来指定这些注入点。

python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1*&uname=admin*"  --banner