PHP代码审计之入门实战

来源:岁月联盟 编辑:猪蛋儿 时间:2020-02-10

系统介绍

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]  下一页