web105
开启容器
代码审计

考察php变量覆盖
这边运用foreach函数
处理
$_GET数据1
2
3
4
5
6foreach($_GET as $key => $value){
if($key==='error'){
die("what are you doing?!");
}
$$key=$$value;
}- 遍历
$_GET数组中的每个键值对。 - 如果键(
$key)是error,则程序会输出"what are you doing?!"并终止执行。 - 否则,将键和值都作为变量名,并将值赋给这个新变量。例如,如果
$_GET中有?name=John,那么代码会创建一个变量$name,并将其值设置为$John的值(注意这里是$$value,即变量的变量)。
- 遍历
处理
$_POST数据1
2
3
4
5
6foreach($_POST as $key => $value){
if($value==='flag'){
die("what are you doing?!");
}
$$key=$$value;
}- 遍历
$_POST数组中的每个键值对。 - 如果值(
$value)是flag,则程序会输出"what are you doing?!"并终止执行。 - 否则,将键和值都作为变量名,并将值赋给这个新变量。例如,如果
$_POST中有age=25,那么代码会创建一个变量$age,并将其值设置为$25的值。
- 遍历
之中$$key=$$value;是会导致变量覆盖的关键
本地调试达到die函数可以输出变量

那我们直接
在$error中覆盖flag即可
这边先get后post
不能直接posterror=flag,因为在POST中如果value为flag则会爆错,但是get没有所以,我们get传入?suces=flag
之后post
`error=suces

web106
开启容器
代码审计

也是SHA1绕过
1 | aaK1STfY |

web107
开启容器
代码审计

这里有一个parse_str函数
本地调试,将一组字符串分割出一个数组


直接将flag为v3的md5即可,这里注意要试下大写和小写的md5
web108
开启容器
代码审计

- 使用
ereg()函数(正则表达式匹配)检查$_GET['c']的值是否只包含英文字母(大小写均可)。 - ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配
?c=a%00778
strrev($_GET['c']):将$_GET['c']的值反转。例如,如果$_GET['c']的值是"123",反转后会变成"321"。
传入aaa%00778

web109
开启容器
代码审计

这里用异常处理类
1 | payload: |

其实除了异常类,只要是用php内置类让v1不进行报错,v2执行命令即可
PHP提供了许多内置类,这些类涵盖了各种功能,从错误处理到数据库操作,从文件系统操作到网络通信等。以下是一些常见的PHP内置类:
1. 错误处理和异常
Exception:PHP的基异常类,用于处理运行时错误。Error:PHP 7引入的基错误类,用于处理致命错误。PDOException:与数据库相关的异常类,用于PDO扩展。
2. 数据库操作
PDO:PHP数据对象(PHP Data Objects),用于访问数据库的通用接口。MySQLi:MySQL改进扩展,用于与MySQL数据库交互。MongoDB:用于与MongoDB数据库交互的类。
3. 文件系统操作
SplFileObject:用于读取和写入文件的对象接口。DirectoryIterator:用于遍历目录的迭代器。FilesystemIterator:用于遍历文件系统的迭代器。
4. 字符串操作
SplString:用于字符串操作的类(较少使用)。SimpleXMLElement:用于处理XML数据的类。
5. 网络通信
SoapClient:用于与SOAP Web服务通信的类。HttpRequest:用于发送HTTP请求的类(需要安装pecl/http扩展)。
6. 数据结构
SplStack:栈数据结构。SplQueue:队列数据结构。SplHeap:堆数据结构。SplFixedArray:固定大小的数组。
7. 日期和时间
DateTime:用于处理日期和时间的类。DateInterval:用于表示时间间隔的类。DatePeriod:用于表示日期周期的类。
8. 反射
ReflectionClass:用于反射类的信息。ReflectionMethod:用于反射方法的信息。ReflectionProperty:用于反射属性的信息。
9. 会话管理
SessionHandler:用于自定义会话存储的类。SessionUploadProgress:用于处理文件上传进度的类。
10. 其他
stdClass:一个空的类,通常用于存储数据。Closure:用于表示匿名函数的类。Generator:用于表示生成器的类。
以上都可以
web110
开启容器
代码审计

考察内置类
可以使用FilesystemIterator文件系统迭代器来进行利用,通过新建FilesystemIterator,使用getcwd()来显示当前目录下的文件结构
1 | ?v1=FilesystemIterator&v2=getcwd |

直接访问即可

web111
开启容器
代码审计

var_dump()函数用于输出变量的相关信息
可以看到这里还是对v1和v2进行了正则的过滤,然后如果$v1有ctfshow,会进入getFlag函数
然后会执行$ctfshow = $$v2
这里用全局变量GLOBALS
$GLOBALS— 引用全局作用域中可用的全部变量 一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
1 | ?v1=ctfshowweb&v2=GLOBALS |

web112
开启容器
代码审计

1 | php://filter/resource=flag.php |
