web入门108
strrev函数反转字符串,0x36d为877
有intval,所以intval(877a)=877
反转后为a778
因为c中要只包含字母,所以我们用 %00截断
payload:a&00778
web入门109
v1是一个类
但是如果直接echo一个类是会显示错位的,那么就要找到一个类,echo它会有返回值
群主视频里面有提到
这样输出是错误的
但是这样就可以正常输出
但是题目并没有给我们定义类,所以我们需要去使用php的内置类
比如Exception 类
然后
是检测是否有字母
关于v2():只要变量后面直接跟着(),那么对变量进行函数调用
其他的方法:
v1=Error&v2=system("ls")
v1=mysqli&v2=system("ls")
v1=Reflectionclass&v2=system('ls')
v1=class{ public function __construct(){ system('ls'); } };&v2=abc (构造类)
题目是做完了,但是有几个注意的点
只要变量后面直接跟着(),那么对变量进行函数调用
可以看到,输出phpinfo的同时也执行了phpinfo的命令
但是如果将v2闭合,也就是去掉后面的()
就会这样:
输出了phpinfo,但是没有执行命令
也就是用echo 输出phpinfo这个字符串
(system用于执行外部程序并显示输出)
web入门110
在109的基础上禁了一堆
使用109的各种方法都不行,无法绕过
FilesystemIterator
(详细链接)是 PHP 中的一个类,用于遍历文件系统目录中的文件和子目录,但是需要给他一个路径
考虑查看目录函数的替代:scandir()、golb()、dirname()、basename()、realpath()、getcwd()
其中 scandir()、golb() 、dirname()、basename()、realpath() 需要给定参数
而 getcwd() 不需要参数
getcwd()
是 PHP 中的一个内置函数,用于获取当前工作目录的路径
故v2=getcwd()
web入门111
?v1=ctfshow&v2=GLOBALS
- 我们最终要得到 $flag 的值,就需要 var_dump($$v1) 中的 $v1 为 flag,即 $v2 要为 flag,这样 $$v2 就为 $flag,&$$v2 就为 $flag 对应的值
- URL 传参时 $v2 不能直接传为 flag,否则 $flag 会因“函数内部无法调用外部变量”的限制而导致其返回 null
-
- 要想跨过词法作用域的限制,我们可以用 GLOBALS 常量数组(它是一个包含了所有全局作用域中变量的数组),其中包含了 $flag 键值对
web入门112
发现没有禁止filter
is_file()
是 PHP 中用于检查给定文件名是否为一个常规文件的内置函数。它返回一个布尔值:如果文件存在且是一个常规文件(不是目录、符号链接等),则返回 true
;否则返回 false
那我们就有多种方式
php://filter/resource=flag.php
一些常见的过滤器:
convert.quoted-printable-encode:将数据编码为 Quoted-Printable 编码格式
convert.iconv.*:使用 iconv 库进行字符编码转换
zlib.deflate:使用 zlib 库对数据进行 deflate 压缩
convert.iconv.UCS-2LE.UCS-2BE:小端转大端
bzip2.compress:使用 bzip2 算法压缩数据
string.rot13:rot13编码
string.tolower:将所有字符转换为小写
convert.base64-decode:base64编码
--------------------------------------
还有这种:
web入门113
这里是把filter禁了
那就用compress.zlib
参考文件:
web入门114
没有禁止filter,那就
还有?file=php://filter/zlib.deflate|zlib.inflate/resource=flag.php
即先压缩,再解压