PHP-代码审计项目-淡然点图标系统-SQL_XFF注入
本文最后更新于 2024年6月19日 下午
审计环境
- phpstudy 2018
- php-5.4.45 + Apache
- phpstrom 2018
- Seay代审系统工具
- CMS源码:淡然点图标系统
审计过程
- 先对主页进行刷新,触发sql语句执行,从而在mysql监控工具中截获到sql语句
- 观察sql语句中是否有可能可控的变量,经分析,”127.0.0.1“处可能是可控变量
- 跟进这条sql语句,验证该处的”127.0.0.1”是否可控,复制这条语句,在phpstrom打开该源码项目,全局搜索(ctrl + shfit + f)引号部分
1 |
|
- 成功定位到了具体文件 php/function.php,进一步跟进代码
- 可以看到是在ywdd函数中执行了sql语句,传入了$ip参数,为了看$ip怎么来的,是否可控?需要继续跟进ywdd函数怎么实现的
- 全局搜索或者转到ywdd()函数实现,可以看到 ywdd(getIP()) 说明$IP是来自getIP()函数的返回值,但getIP()怎么返回的?返回的具体是什么?还是不知道,继续跟进getIP()的函数声明
可以看到,只要XFF头设置了,就把$realip变量赋值为XFF头,并作为getIP()的返回值!也就是说ywdd()中的$sql语句中的$ip是接受的XFF头,而我们知道XFF头是我们可以伪造的,是可控的,并且此处没有对XFF头进行任何过滤!于是SQL_XFF注入漏洞产生。对XFF构造sql语句,即可完成注入
简单的数据流
漏洞复现
1 |
|
- 抓包
- 修改XFF头,加单引号,成功报错
- 手工注入
1 |
|