10-12-周日_09-45-51
This commit is contained in:
@@ -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()`函数后先判断op,op等于“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提示可能有一些东西,进去看看
|
||||
|
||||

|
||||
|
||||
很明显是要读取这个文件,代码里读取文件的地方在这里:
|
||||
|
||||
额,也就是说,`$function`必须等于`show_image`。
|
||||
@@ -842,7 +844,7 @@ phar反序列化即在文件系统函数(file_exists()、is_dir()等)参数
|
||||
|
||||
**a stub**
|
||||
|
||||
可以理解为一个标志,格式为`xxx<?php xxx; __HALT_COMPILER();?>`,前面内容不限,但必须以`__HALT_COMPILER();?>`来结尾,否则phar扩展将无法识别这个文件为phar文件。
|
||||
可以理解为一个标志,格式为`xxx<?php xxx; __HALT_COMPILER();?>`,前面内容不限,但必须以`__HALT_COMPILER();?>`来结尾,否则phar扩展将无法识别这个文件为phar文件。
|
||||
|
||||
**a manifest describing the contents**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user