wmSafe致力于互联网资源
道可道,非恒道,名可名,非恒名

【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题

本文最后更新于2022-11-11,已经有526 天没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

前言

上一篇我们有介绍到typecho的对于xss的过滤疏忽,该疏忽适配typecho的任意版本,包括最新的1.2,所以这里介绍如何提高typecho的安全,防止xss攻击,加强后台校验逻辑,防止其他手段突破拿到cookie入侵后台。

1. 放入xss.js文件至后台

xss.js是一个可以过滤xss代码的js代码
本文打包下载地址:
https://wwm.lanzout.com/izN6Y0foi3vc
密码:879i
【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题
将下载下来的js文件放到后台js文件夹里
默认typecho后台路径是:网站根目录/admin/js/

2. 后台评论js集合引用js文件

【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题
在你的后台目录里找到common-js.php文件
并在里面加入以下代码引用xss.js文件


<script src="<?php $options->adminStaticUrl('js', 'xss.js'); ?>"></script>

3. 在后台评论处修改过滤xss

在你的后台目录里找到manage-comments.php文件
并找到大约在:324行左右
【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题
将原先的“$('textarea[name=text]', edit).val(comment.text).focus();”
改成“$('textarea[name=text]', edit).val(filterXSS(comment.text)).focus();”
其中就是将comment.text用filterXSS方法包裹,其实filterXSS就是xss.js里面过滤xss代码的关键函数方法,可以直接调用

3.1 评论输出进一步加强xss防御

其实typecho后台评论显示中官方是有过滤xss的,用的php自带的htmlspecialchars函数,但是默认并不会过滤单引号的转义(可以被绕过),这里我们可以用php自带的strip_tags方法进一步去除html的标签过滤xss代码
大约在manage-comments.php文件的144行左右
【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题

<?php 
//原先的官方输出的方法
//$comments->content(); 
//下面的htmlspecialchars函数也可以过滤
//并且配置了第二个参数ENT_QUOTES可以过滤单引号
//但是会把所有html js代码全部实体化没有换行效果
//该方法过滤xss是无敌的,加了第二个默认参数后
//xss不可能在绕过直接显示攻击到目标
//echo htmlspecialchars($comments->content,ENT_QUOTES,'UTF-8');
//这里的strip_tags可以支持白名单,我们可以将换行和p标签粗体过白让其可以正常输出
echo strip_tags($comments->content,"<br> <p> <b>");
?>

此致后台防御xss代码完成

4. 后台登陆加入session

找到路径:网站根目录/var/Widget/Login.php
在里面开启session并且拿到当前登陆的ip放到session里面去,关键修改方法和代码如下
【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题
php获取用户ip方法:

function get_user_ip()
{
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $cip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $cip = $_SERVER['HTTP_CLIENT_IP'];
        } else {
            $cip = $_SERVER['REMOTE_ADDR'];
        }
        if ($cip == '::1') { // 使用localhost时
            $cip = '127.0.0.1';
        }
        if (! preg_match('/^[0-9\.]+$/', $cip)) { // 非标准的IP
            $cip = '0.0.0.0';
        }
        return htmlspecialchars($cip);
}

开始session后的关键代码:

session_start();
$_SESSION['LoginIP']=$this->get_user_ip();

5. 在后台加入判断过滤非法登陆

打开文件:网站根目录/后台目录/header.php
官方默认路径:网站根目录/admin/header.php
【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题
获取当前访问用户ip的代码上面有,下面是关键判断代码:

session_start();
$dqIp = get_user_ip();
if(isset($_SESSION['LoginIP'])){
    if(strcmp($_SESSION['LoginIP'], $dqIp) != 0){
        header('HTTP/1.1 301 Moved Permanently');//发出301头部
        $urlTmp = "https://blog.wm404.com/";
        header("Location: $urlTmp");
        exit;
    }   
}

其实原理很简单,就是在访问后台的时候再次进行一次ip校验,如果登陆的ip和正在访问的ip不一致,那么可以判断出不是同一个人登陆的,所以直接拦截跳转首页,不允许进入后台,这里可以发挥大家的想象,可以是自己生成的指定token,什么都行,关键是如何判断是不是同一个的操作,会php代码的可以自己研究,不懂的略过。其中https://blog.wm404.com/改成你自己的博客主页,或者要跳转的url地址。

6. 操作函数也要加上ip判断

打开文件:/var/Widget/Action.php
【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题

session_start();
$dqIp = get_user_ip();
if(isset($_SESSION['LoginIP'])){
    if(strcmp($_SESSION['LoginIP'], $dqIp) != 0){
        header('HTTP/1.1 301 Moved Permanently');//发出301头部
        $urlTmp = "https://blog.wm404.com/";
        header("Location: $urlTmp");
        exit;
    }   
}

最后

至此,后台防御xss和非法登陆人校验完成,在很大程度上,防止了typecho后台被入侵,这里建议没有修改后台默认路径的小伙伴们请及时修改typecho后台默认路径。

补充内容1

typecho开启httpOnly防止xss
在网站根目录下的config.inc.php加入一行代码
ini_set('session.cookie_httponly', 1);
【渗透测试】typecho防止xss攻击,并且加强后台限制,适配任意typecho版本/主题

有问题的联系QQ1845440070
攻防无绝对,技术无黑白
感谢您阅读本文
本原创文章未经允许不得转载 | 若要转载请注明出处,否则将承担相应的法律责任!
本文链接: https://blog.wm404.com/2022/11/11/b1acecfb.html
赞赏排名 赞赏支持

评论

  • captcha
暂无评论,要不来一发?

您的关注就是我们最大的支持

联系我们 关于我们