web入门121-130
web121
分析代码

发现过滤了更多,用SHLVL也被禁用了,可以使用${##}或${#?}来代替
${PWD::${##}}???${PWD::${##}}?????${#RANDOM}${IFS}????.???

解码得到flag

web122
分析代码

PWD被禁了,发现HOME没有被禁,可以使用HOME
$? 表示上一条命令执行结束后的传回值。通常0表示执行成功,非0表示执行有误
有部分指令执行失败时会返回1,也有一些命令返回其他值,表示不同类型的错误
比如Command not found就会返回127
为了能让 $? 能够返回1,则需要让前一条命令是错误的,这个错误命令的返回值就是1
这里的话可以用 <A
<A 提示的错误是no such file or dictionary,它对应的error code 是2
但是$? 的结果是1
构造payloadcode=<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???

解码的得到flag

web123
分析代码

要求CTF_SHOW和CTF_SHOW.COM存在,fl0g不存在
在php中变量名只有数字字母下划线,如果含有+、[、空格则会转化为_,所以说按理说是构造不出CTF_SHOW.COM,因为他里面有".",但是php还有一个特性就是如果传入[,它在转化为_后,后面的字符就不在转换,所以构造payload
CTF_SHOW=&CTF[SHOW.COM=1&fun= echo $flag

web124
分析代码

暂存
web125
分析代码

使用 highlight_file 高亮显示 flag.php
?1=flag.php
post:CTF_SHOW=&CTF[SHOW.COM=&fun=highlight_file($_GET[1])

web126
分析代码

借鉴大佬的payload,具体原理看https://jishuzhan.net/article/1777295240298762241
GET:?$fl0g=flag_give_me;
POST:CTF_SHOW=1&CTF[SHOW.COM=1&fun=eval($a[0])

web127
分析代码

需要ctf_show=ilove36d,但是_被禁用了,只能使用空格代替,其他转成_的符号都被禁用了
?ctf show=ilove36d

web128
分析代码

可以得知f1不能使用数字字母,
gettext():_()是gettext()的拓展函数 在开启相关设定后,_("666")等价于gettext("666"),且就返回其中的参数(因为过滤了字母所以我们就用下划线,让其输出)
get_defined_vars:返回由所有已定义变量所组成的数组,因为包含了flag.php,所以flag.php里面肯定有$flag储存了flag。
call_user_func 函数:用于调用指定的回调函数,并可以传递参数给该回调函数,第一个参数是被调用的回调函数,其余参数是回调函数的参数。
这里还进行了嵌套:
(1)内层 call_user_func($f1, $f2)
首先调用 $f1 函数,并传递参数 $f2,结果是 $f1($f2) 的返回值。
(2)外层 call_user_func(...)
外层 call_user_func 接收内层调用的返回值作为它的第一个参数,要正确执行,内层返回值应该是一个函数名或可调用的回调,外层 call_user_func 将再次调用这个返回的回调函数,不传递任何额外的参数。
最后,var_dump 将打印出外层 call_user_func 的返回值。
新知识:gettext 函数
php 扩展目录下如果有 php_gettext.dll,就可以用 _() 来代替 gettext() 函数,_() 就是 gettext() 的别名,常常被用来简化代码。
gettext 函数用于在 PHP 应用程序中实现国际化(i18n)和本地化(l10n),说白了就是根据当前语言环境输出翻译后的字符串。
构造payload?f1=_&f2=get_defined_vars

web129
分析代码

f的输入要有ctfshow,并且不能在开头,使用伪协议绕过
?f=php://filter/ctfshow/resource=flag.php

web130
分析代码

使用数组绕过f[]=1


浙公网安备 33010602011771号