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.使用在线防护产品。

posted @ 2021-07-24 11:29  admax11  阅读(75)  评论(0编辑  收藏  举报