http参数污染利用php小特性绕过贷齐乐waf

目录

分析源码

php的特性

php另外一个特性

实现注入

联合查询注入

爆库

爆表名

爆列名

爆出flag


分析源码

GET/POST/REQUEST/COOKIE都会经过这个替换str_ace(array('&', '"', '<', '>','(',')'), array('&', '"', '<', '>','(',')'), $string)

GET/POST/REQUEST三个变量,都会经过这个正则:select\|insert\|update\|delete\|'\|/\*\|\*\|\.\./\|\./\|union\|into\|load\_file\|outfile

一旦遇到select,包括单引号,包括注释符,就立即exit整个流程

这个过程等于手工处理了一遍REQUEST\_URI,将REQUEST\_URI中的字符串分割成数组覆盖到REQUEST里。

按道理来说并没有什么大错误,但试想:这个过程是在我们的第一道WAF之后进行的,假设我们有一个方法让第一道WAF认为请求中没有恶意字符,再通过这里的覆盖,将恶意字符引入$_REQUEST中,就可以造成WAF的绕过了。

所以怎么样才能让第一个waf认为我们的请求没有恶意字符呢?

php的特性

php中他会取最后一个值

假设我有一个办法,在第一次WAF检测参数的时候,检测的是2,但后面覆盖request的时候,拿到的是1,那么不就可以造成WAF的绕过了么?

虽然没有报错,但这里我们两个传参都是用的i_d,最终我们进入到查询语句中的时候他还是只会取第二个值

所以这里并没有意义

php另外一个特性

php另一个特性,自身在解析请求的时候,如果参数名字中包含" "、"."、"["这几个字符,会将他们转换成下划线。

那如果我发送的是这样一个请求: php?i_d=11111&i.d=22222 ,php先将i.d转换成i_d,即为php?i_d=11111&i_d=22222 ,再获取到的$\_REQUEST i_d就是22222。

可在\\_SERVER\\\['REQUEST\\_URI'\\\]中,i_d和i.d却是两个完全不同的参数名,那么切割覆盖后,获取的\_REQUEST\'i_d\\却是11111。

实现注入

联合查询注入

发现我们其实是可以绕过的

爆库

用limit观察

爆表名
爆列名
爆出flag
相关推荐
freejackman9 小时前
【实战二】字段级血缘追踪:拆解 AST 迷局,精准穿透函数链与子查询
大数据·数据库·sql
承渊政道12 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
爱和冰阔落16 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
不庸.17 小时前
theHarvester 入门教程:从装好到看懂输出
安全·web安全·网络安全·开源·安全性测试
严肃小白兔17 小时前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化
Linux-lucky1 天前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
博客zhu虎康1 天前
实现局域网P2P通信:内网发送消息
网络·网络协议·p2p
吴声子夜歌1 天前
Kubernetes权威指南——网络原理(一)
网络·容器·kubernetes
陈希1231 天前
Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位
linux·服务器·网络
骑着蜗牛撵大象3271 天前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划