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 |