Loading

ctf_show-web入门-命令执行(118-124)

web-118

测试了一下发现数字和字母过滤了,第一反应是无符号rce,发现走不通。

后面发现大写字母没过滤,这里可以参考月饼杯web3的方法

https://www.cnblogs.com/aninock/p/15360157.html

我们想办法输出 flag.php即可,输出语句可以用nl

可以看到PATH有n和l,但是之前是用数字来取想要的字符的,但是这里过滤了数字

我们先看一下~取尾部

 

我们可以看到~取1会取末尾的两个字符,同理:~0会取到最后一个字符,但是过滤了数字,我们可以尝试用字母代替数字看看效果如何:

 

可以发现字母会当作0来处理,这样我们取到了n,还差个l

这里用:即可$PWD最后一位即可,这里路径是/var/www/html最后一位正好是l

至于flag.php 用????.???代替即可

最终payload

${PATH:~A}${PWD:~A} ????.???

 

 

 

 

web119

测试,过滤了PATH

这里发现构造nl比较难,可以用shell的base64,这会用base64格式输出

base64路径在/bin/base64,用?匹配的时候要匹配全路径,不能只匹配base64

 我们可以尝试用/???/?????4来匹配

指令中的4可以用${#RANDOM} 来得到

 

而/可以从$PWD中提取,第一个符号就是,那么就要想办法获得1,

1可以用SHLVL来获得


payload(由于用了随机函数,可能要多试几次)

${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.???

 

 

 

 

web120

给了源码,限制了长度,同时给明了黑名单。

其他同119

 

 

web121

过滤了大部分系统变量

和119的payload相比,主要书过滤了SHLVL,其他都没过滤。而SHLVL是构造数字1的。因此我们要想办法构造数字1

这里可以用$?来代替,然后#?取他的长度即可

$?
最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

 

 

 那么改一下payload即可

${PWD::${#?}}???${PWD::${#?}}?????${#RANDOM} ????.???

 

 

web122

 

 

 首先是过滤了#,导致我们没法取内置变量长度了(同时也过滤了pwd,,但是放开了home)

我们可以用$?来,我们想让它返回1,这里设定上一条语句为<1

payload

<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???

这里要多刷新会儿

 

 

web124、

CISCN 2019 初赛原题 lovemath

 

posted @ 2021-12-07 13:49  Aninock  阅读(75)  评论(0编辑  收藏  举报