利用文件:/member/member.php
$m_ip=fl_html(fl_value(get_ip()));
$_SESSION['m_ip']=$m_ip;
Get_ip获取了ip地址
function get_ip(){
if(!empty($_SERVER['HTTP_CLIENT_IP']))
{
return $_SERVER['HTTP_CLIENT_IP'];
}
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
return $_SERVER['REMOTE_ADDR'];
}
}
没有任何安全防护节奏看下一个函数fl_value
function fl_value($str){
if(empty($str)){return;}
return preg_replace('/select|insert | update | and | in | on | left | joins | delete |%|=|/*|*|../|./| union | from | where | group | into |load_file
|outfile/i','',$str);
}
过滤了危险操作函数但是这个过滤本身是有问题的所以不存在威胁,接着看fl_html
function fl_html($str){
return htmlspecialchars($str);
}
这里有用了一个安全函数但是因为这个函数要使用参数后才能够更加完美的针对我们注入否则就只能转义html标签所以这里我们的注入是完美进入的,看看调用位置
if($action=='ajajx_out'){
$sql="update ".DB_PRE."member set member_time='{$_SESSION['m_time']}',member_ip='{$_SESSION['m_ip']}' where id={$_SESSION['member_id']}";
当我们退出的时候会执行这条update语句并且带入了我们危险ip内容
本地复现:
然后执行out操作来触发漏洞点