ctfshow Web入门[PHP特性] web138-150 Writeup
PHP 特性最后几题, 过几天写个总结
这次主要是各种函数的利用, 位运算绕过正则, 条件竞争等等
web138
过滤了 :
, 但是 strripos()
可以用数组绕过
本地测试报错
|
|
call_user_func()
文档 https://www.php.net/manual/zh/function.call-user-func
call_user_func()
可以以数组的形式调用静态方法
post 构造 payload 如下
|
|
web139
用之前的 ls | tee 1
下载失败, 估计是限制了权限
hint 提示是用 bash 的 if + sleep 配合 awk + cut 盲打 (类似时间盲注)
先放着…
web140
f1 f2 只能含有小写字母和数字
注意 intval($code) == 'ctfshow'
这句里面是 ==
, 也就是说只要 $code
的值是不是以1开头的字符串, 那么整个表达式就会返回 true (强制类型转换, 左边和右边都变成0)
结合 eval 里面的构造, 想到了无参数读文件的 payload
|
|
localeconv()
返回结果是个数组, 数组的第一位是 .
current()
返回当前数组指针指向的值, 也就是 .
hint 的 payload
|
|
测试发现下面的 payload 也行
|
|
思路就是找到一个函数, 使它的返回值为空, 空值 intval 之后也会变成0
web141
v3 这个正则过滤了字母和数字
hint 提示是取反
参考文章 https://blog.csdn.net/miuzzx/article/details/109143413
然后绕过 return 的方法要利用以下的 trick
在 PHP 中, 函数与数字进行运算的时候, 函数能够被正常执行
构造 payload
|
|
get 传参
|
|
好像取反后的字符串不加引号也可以
web142
????
直接乘以0
|
|
0x36d 转成十进制是 877
传一个 0x0 也行
web143
把 &
|
~
都过滤了, 不过思路已经很明显了… 我们需要找一个其它的位运算符
利用异或 ^
利用之前命令执行那题的或运算的脚本, 稍微改一改
|
|
payload
+
-
被过滤了, 可以用乘法 *
|
|
web144
相当于没有过滤, 注意位置
|
|
web145
四则运算都被过滤了, 但根据上面的思路, 找到一个能使函数正常执行的运算符即可
https://www.php.net/manual/zh/language.operators.php
这里用 |
, 其实 ||
也是可以的
|
|
hint 用的是三目运算符 a ? b : c
的形式
web146
三目运算符被 ban 了
上题的 payload 还能用
web147
限制不能只为字母数字和下划线
hint 提示为创建匿名函数…
参考文章 https://paper.seebug.org/755/
使用根命名空间调用的方式, 在函数名前面加上 \
从而绕过正则过滤
|
|
创建的匿名函数里面实际上也是字符串, 可以闭合大括号来执行任意代码 (否则不好直接回显)
注意要注释掉本来的 }
web148
异或, payload 如下
|
|
web149
条件竞争?
跑了好久好不容易成功一次结果发现 payload 填错了… 第二次跑一直没成功
后来换个思路, 直接覆盖写 index.php
正常执行命令
web150
这个缩进属实有点… 当时还以为 __autoload()
是写在类里面的…
先通过变量覆盖构造 ..CTFSHOW..=CTFSHOW
, 因为 PHP 会自动将不合法的字符 .
[空格]
[
等替换为下划线
然后构造 isVIP=true
, 最后通过包含 nginx 日志得到 flag
web150_plus
日志包含被过滤了, 还能用 session 包含…
不过感觉不太对劲, 这么长一个类是用来干嘛的???
看了 hint 发现是利用 __autoload()
于是查了一下 class_exists()
这个函数
默认会调用 __autoload()
函数
执行 phpinfo
|
|
??? 直接出来了
hint 给了个 exp
https://github.com/vulhub/vulhub/blob/master/php/inclusion/exp.py
https://github.com/vulhub/vulhub/blob/master/php/inclusion/README.zh-cn.md
因为 phpinfo 中的 $_FILES
可以直接查看上传的临时文件名, 然后通过条件竞争, 包含该文件来创建 webshell