i春秋一个代码审计实验 sql注入
0x01 了解本次漏洞形成的原理
代码审计:
/uploads/include/common.fun.php中$ip的值从HTTP_CLIENT_IP或HTTP_X_FORWARDED_FOR等变量中获得,具体代码如下:
通过函数getip()获取到的$ip变量的值,直接插入到了SQL语句中,这里是存在SQL注入的。
0x02 掌握此漏洞的利用方法
可以看到上面源码,一共有9个参数,而insert语句可以一次插入多条数据,只要们在构造$ip的内容时,闭合掉前面的部分,使之变成完整的语句即可。
X-Forwarded-For
payload:
00', '1'),('','1','0','1','6',(select concat('<u-',admin_name,'-u><p-',pwd,'-p>') from blue_admin), '1901181973','99
实验环境下的payload:
在POST数据包头部添加X-Forwarded-For字段,这里直接使用实验环境下的1.php脚本文件。
然后运行:
其原理是:利用insert 语句插入多条数据,然后再通过select读取插入的数据。
CLIENT-IP
payload 也是一样,使用实验环境下的1.php脚本文件,直接修改可控变量为client-ip:
运行脚本后,在页面源码可以看到账号密码:
0x03学会如何去修复此漏洞
1.对getip函数返回值过滤。
2.使用传参数的方式查询,不直接构造sql语句。
3.使用在线防护产品。
本文来自博客园,作者:admax11,转载请注明原文链接:https://www.cnblogs.com/ctfisnull/p/15054770.html