PHP代码审计之入门实战
系统介绍
CMS名称:新秀企业网站系统PHP版
官网:www.sinsiu.com
版本:这里国光用的1.0 正式版 (官网最新的版本有毒,网站安装的时候居然默认使用远程数据库???迷之操作 那站长的后台密码岂不是直接泄露了?疑似远程数据库地址:server.sinsiu.net )
下载地址:蓝奏云
Windows下使用PHPStudy可以直接安装,搭建起来还是很简单的。
防护策略
虽然这是一个不知名的小系统,但是安全加固还是考虑到的,很多本应该有漏洞的地方均被加固修复了,导致国光我一开始一直碰壁,=,= 废话不多说,下面直接列举本次审计碰到的一些坑。
伪造IP注入过滤
思路
首先在后台发现有记录用户IP的功能:
哦豁,会不会有传说中的伪造IP地址注入攻击呢???使用数据库监测工具,发现在注册用户发表评论的时候。用户的IP地址也的确被带入SQL语句中查询了:
select * from php_safe where saf_ip = '10.211.55.2' and saf_action = 'message'
VSCode走起,根据关键词来查找相关功能代码:
include/function.php
//获取客户端IP
function get_ip()
{
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown'))
{
$ip = getenv('HTTP_CLIENT_IP');
}elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')){
$ip = getenv('HTTP_X_FORWARDED_FOR');
}elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'),'unknown')){
$ip = getenv('REMOTE_ADDR');
}elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')){
$ip = $_SERVER['REMOTE_ADDR'];
}else{
$ip = '0.0.0.0';
}
if(!is_numeric(str_replace('.','',$ip)))
{
$ip = '0.0.0.0';
}
return $ip;
}
结果
获取IP的关键防护代码:
if(!is_numeric(str_replace('.','',$ip)))
{
$ip = '0.0.0.0';
}
获取到的IP值,去除掉.后如果不是数字类型的话就重置为0.0.0.0 ,扑街,这条思路行不通,赶紧换个思路去
[1] [2] [3] [4] [5] [6] [7] 下一页