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