最近在代码审计,审到一个注入,提交,说重复了,好尴尬啊。
源码下载: http://www.mycodes.net/47/7976.htm
在/i.php,获取ip的时候,全局的ip获取是做了正则。不知道问什么这里重新进行了一次ip的获取。
$bip没有过滤就已经查询和入库了,所以造成注入,这里要对$uid进行了赋值,结果如下:
源码下载: http://www.mycodes.net/47/7976.htm
在/i.php,获取ip的时候,全局的ip获取是做了正则。不知道问什么这里重新进行了一次ip的获取。
<?php
session_start();
require_once("include/common.php");
require_once(sea_INC."/main.class.php");
$i=file_get_contents("data/admin/i.txt");
if($i==0){showmsg('系统已经关闭积分推广系统', 'index.php');exit;}
$u=addslashes($_GET['uid']);
if(empty($u) OR !is_numeric($u)){showmsg('无法获取目标用户ID', 'index.php');exit;}
function get_client_ip() {
if(getenv('HTTP_CLIENT_IP')){
$client_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$client_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$client_ip = getenv('REMOTE_ADDR');
} else {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
return $client_ip;
}
$bip = get_client_ip();
$row = $dsql->GetOne("Select * from sea_ie where ip='$bip'");
//print_r($row);
if(!is_array($row))
{
$dsql->ExecuteNoneQuery("insert into sea_ie values('','$bip',NOW())");
$sql="Update sea_member set points = points+$i where id=$u";
$dsql->ExecuteNoneQuery("$sql");
showmsg('感谢您的支持,现在将自动跳转到首页', 'index.php');exit;
}
$i 的值通过查看/data/admin/i.txt。$i=2;所以积分推广系统没有关闭,继续执行下面的代码:
可以看到
$bip = get_client_ip();
$row = $dsql->GetOne("Select * from sea_ie where ip='$bip'");
//print_r($row);
if(!is_array($row))
{
$dsql->ExecuteNoneQuery("insert into sea_ie values('','$bip',NOW())");
$sql="Update sea_member set points = points+$i where id=$u";
$dsql->ExecuteNoneQuery("$sql");
showmsg('感谢您的支持,现在将自动跳转到首页', 'index.php');exit;
}
$bip没有过滤就已经查询和入库了,所以造成注入,这里要对$uid进行了赋值,结果如下: