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
相关推荐
普马萨特8 小时前
实体与位置关系的数据从哪里来:获取、治理与仍待解决的问题
网络·数据库
sunshine8858 小时前
智能费控3.0:从合规审核到预算实时控制的进化之路
网络
范什么特西9 小时前
回答网络-01
网络
Rain的Java大神之路10 小时前
PC版网站被狂刷怎么处理
java·数据库·redis·后端·mysql·web安全·运维开发
闻哥10 小时前
小表驱动大表——SQL查询优化的核心原则(深度剖析+流程图)
数据库·sql·流程图
Zenova EdgeOS11 小时前
工业网关心跳机制:从 Keepalive 到健康判定的工程实战
大数据·网络·数据库·边缘计算·工业网关
郝学胜-神的一滴11 小时前
Effective Python 条款4:字符串格式化大乱斗
开发语言·网络·python·程序人生·软件工程
派小汤12 小时前
Harmony2.2.0通过RdbStore实现通用类操作本地SQLite数据库
数据库·sql·sqlite·鸿蒙·鸿蒙系统
云絮.12 小时前
网络编程套接字
网络
AI备忘录13 小时前
(十六)GRE/IPSec 隧道配置命令五厂商对照:华为 华三 锐捷 迈普 思科
运维·服务器·网络·网络协议·网络安全·华为