10-12-周日_09-45-51

This commit is contained in:
2025-10-12 09:45:51 +08:00
parent 786b75d493
commit 1e973012c8
8 changed files with 65 additions and 51 deletions

View File

@@ -373,7 +373,7 @@ if(isset($_GET{'str'})) {
先来理解一下源码:
这里先判断存不存在str传参存在的话先拿去`is_valid`函数过滤一下,这里`is_valid`函数的作用是检查一下str字符串里面有没有存在不可打印的字符。ord函数是打印第一个字符的ASCII码必须在32到125之间
这里先判断存不存在str传参存在的话先拿去`is_valid`函数过滤一下,这里`is_valid`函数的作用是检查一下str字符串里面有没有存在不可打印的字符。ord函数是打印第一个字符的ASCII码必须在32到125之间php7.1以上版本反序列化对public和protected不敏感可以绕过
然后进入反序列化,这里反序列化后生成一个序列化对象,但是不触发任何函数,然后进程结束,序列化对象销毁,触发`__destruct()`判断op值如果强等于“2”则把op重置为“1”注意这里的“2”是字符串然后把content置空执行`process()`函数,进入`process()`函数后先判断opop等于“1”进入write函数op等于“2”进入read函数write函数实现一个文件写入的功能read函数实现一个文件读取的功能
@@ -517,7 +517,7 @@ var_dump($c);
可以看到`";s:4:"pass";s:6:"hacker";}`是27个字符串所以我们使name的值为
```
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";s:4:"pass";s:6:"hacker";},
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";s:4:"pass";s:6:"hacker";}
```
来分析这27个bb经过第一步序列化后为
@@ -542,7 +542,7 @@ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";s:4:"pass";s:6:"hacker";
是name的值81个值
经过filter函数过滤后前54个c就相当于54个b多出来的27个字符c把27个字符`";s:4:"pass";s:6:"hacker";}`顶到后面了,到这里序列化语句就因为`;}`截止了且name的字符串数81为81个c符合特性二可以反序列化成功。后面`";s:4:"pass";s:6:"123456";}`被顶出去废弃了
经过filter函数过滤后前54个c就相当于54个b多出来的27个字符c把27个字符`";s:4:"pass";s:6:"hacker";}`顶到后面了,到这里序列化语句就因为`;}`截止了且name的字符串数81为81个c符合特性二以反序列化成功。后面`";s:4:"pass";s:6:"123456";}`被顶出去废弃了
```php
<?php
@@ -741,10 +741,12 @@ docker run -d -p 80:80 registry.cn-hangzhou.aliyuncs.com/eagleslab/ctf:easyseria
filter函数是过滤函数正则匹配替换字符串字符逃逸的条件之一
extract() 函数从数组中将变量导入到当前的符号表(本题的作用是将_SESSION的两个数变为post传参)
extract() 函数从数组中将变量导入到当前的符号表(本题的作用是将_SESSION的两个数变为post传参)
看到传phpinfo提示可能有一些东西进去看看
![image-20251009151234594](13.不安全的反序列化/image-20251009151234594.png)
很明显是要读取这个文件,代码里读取文件的地方在这里:
额,也就是说,`$function`必须等于`show_image`
@@ -842,7 +844,7 @@ phar反序列化即在文件系统函数file_exists()、is_dir()等)参数
**a stub**
可以理解为一个标志,格式为`xxx&lt;?php xxx; __HALT_COMPILER();?>`,前面内容不限,但必须以`__HALT_COMPILER();?>`来结尾否则phar扩展将无法识别这个文件为phar文件。
可以理解为一个标志,格式为`xxx<?php xxx; __HALT_COMPILER();?>`,前面内容不限,但必须以`__HALT_COMPILER();?>`来结尾否则phar扩展将无法识别这个文件为phar文件。
**a manifest describing the contents**