flask?jwt?

考察的是session伪造

(不写了,就是简单的session伪造)

flask?jwt?(hard,session伪造)

考察的也是session伪造 只不过这里把key藏起来了,我们得去找到

这里的考点是通过报错来获取到secret_key

注册完后进行登录

image-20230604173436773

提示你有这个/wor目录

image-20230604173501780

告诉你了登录时间(那么我们就去找一下登录时间是从哪获取的)

image-20230604173742024

然后我们尝试去删除一点点cookie的值使其报错

image-20230604173954408

报错之后查看到的信息不全面,那么我们就去拿bp进行发包查看

image-20230604174055787

然后就拿到secret_key了 那么我们就接着去重新构造一个cookie就行了

image-20230604174519826

这里有个问题就是要把时间戳给删掉,,不然会构造失败

image-20230604174615095

MyWeb

题目描述:试试我的JSON解析工具。

json的解释

image-20230604181116728

实际存储的json是这样的 输出的时候

image-20230604181140589

然后进行测试一下看传入的json是咋样的

image-20230604181347889

image-20230604181423212

然后看本地存储的样子

image-20230604181500207

这样我们就理解了这个json存储的过了,那么我们就可以进行构造来绕过了

解题

题目代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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__);
}

这里审计一手代码,就是一个save和read的过程,我们要想eval的东西是我们想执行的,那就必须破坏它的结构,那就复制下来在本地测试测试,怎么才能闭合原有结构,让危险代码逃逸

addslashes 这个函数是用来进行sql转义的用的

image-20230604175647010

跟据在上面讲的内容之后,我们知道了json存储的格式是咋样的

image-20230604181625002

我们最后要执行的是eval('$data = ' . $data . ';');

payload

1
/?mode=save&value=]//%0a;<your_php_code>;//

首先是这个]这个是为了闭合前面的[然后导致后面的内容可以逃逸出来

(这里虽然说json格式会报错,但是file_get_contents是会输出这个json文件里的全部内容的)

然后]//%0a;这个是会注释第一行的内容,然后换到第二行

然后<your_php_code>;//这个是会执行我们设置的代码然后注释掉后面的代码

image-20230604185620831

这就是传进去的样子

接着传值获取环境变量

image-20230604185826603

第二行就会执行代码了

像下面的格式也是可以进行代码执行的(可以执行phpinfo())

image-20230604190446540

总结

  • 就是利用换行绕过和注释来进行绕过 并且就是这里的话学到了一点就是(就是有eval的时候并不用得一直盯着他来执行,可以换种思路来)

​ (————————————就像这道题一样————————————)

  • 原本就是php代码 把eval结构破坏之后进行换到第二行然后就可以执行自己想执行的代码了

就是以后遇到可以本地执行的代码可以拷贝下来到本地尝试进行解题

ez_factors

题目描述:原生 Linux 因数爆破工具。flag在根目录

(这题又是使用%0a来进行绕过从而进行命令执行的)

  • 这个%0a确实好多题的时候的解

image-20230604201247967

点进去的发现这里会对这个数字进行分解,所以就猜想这里进行了命令执行

但是在数字后拼接命令的时候发现并不能同时执行(那么我们就考虑一下使用别的执行来让其两个命令同时)

这里的话 ; | & %0a都能让其执行

但是经过多次尝试,发现这里只能返回数字,那么我们就可以考虑让输出结果以八进制进行输出

od这个命令就符合我们的预期

1
/factors/9;od%20-b%20%2fflag

这里进行必须进行url编码,不然会执行失败

image-20230604201858291

image-20230604201815683

输出全是八进制的数字(因为都是三个数字在一起)

image-20230604202021231

总结

题目挺新颖的,只允许输出数字,并且是在url处进行命令执行,然后在用8进制将结果输出

信息收集

image-20230604205358343

这个一看就是考察apache的漏洞 然后当时是去查了这个版本,然后找到了一个CVE,但是不懂咋用,看了赛后解,才发现我忘记收集这个apache的配置文件了

apache请求走私 CVE-2023-25690

然后去读取配置文件

image-20230604205736740

image-20230604205748044

在配置文件里发现了关键信息

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

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

image-20230604210535493

就是根据这个payload和在上面查看的apache配置文件一起得出的结果

image-20230604210812996

可惜了 当时没想到这个配置文件

TimeTrcer

image-20230604202607093

上面是这题的考点