php trick
php trick
常用原生类
Error/Exception xss
Error适用于php7、Exception适用于php5/7
开启报错的情况下
1 |
|
例题:[BJDCTF 2nd]xss之光
Error/Exception绕反序列化md5比较
1 |
|
例题:[2020 极客大挑战]Greatphp
SoapClient
常用于SSRF/SSRF+CRLF
调用不存在的方法触发_call方法
1 |
|
例题:ctfshow web259
DirectoryIterator、GlobIterator、FilesystemIterator
多用于目录遍历
配合glob协议可以绕过open_basedir
1 |
|
SimpleXMLElement
多用于XXE
PHP 5/7/8
1 |
|
例题:[SUCTF 2018]Homework
SplFileObject
关键找到触发__toSting方法的地方
1 |
|
ZipArchive
open方法可以删除文件
1 |
|
例题:NepCTF2021 梦里花开牡丹亭
php源码泄漏
https://blog.projectdiscovery.io/php-http-server-source-disclosure/
PHP Development Server <= 7.4.21
php -S
内置服务器启动
1 |
|
filters_chain_oracle
PHP filters can also be used to read local files when their content is not printed
没有打印的情况下读取任意文件
常见函数
1 |
|
限制:
- GET请求和header max_size
- 使用了
file_exists
或is_file
等不支持filter的函数
脚本:https://github.com/synacktiv/php_filter_chains_oracle_exploit
https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle
LFI_to_RCE
CVE-2024-2961
GLIBC中iconv库的漏洞
iconv
在转换为ISO-2022-CN-EXT
字符集时会产生缓冲区溢出
而在linux中,php将一个字符集转换为另一个字符集使用的是iconv()
php://filter
的convert.iconv
也是使用了iconv()
具体溢出处理原理可以看作者原文
https://www.ambionics.io/blog/iconv-cve-2024-2961-p1
- 读取
/proc/self/maps
绕过ASLR和PIE - 根据maps算出php堆的地址和libc库的文件名
- libc算出
system()
函数地址 - 缓冲区溢出rce
影响函数
1 |
|
各种绕过trick
https://hackfun.org/2018/01/09/CTF%E4%B8%AD%E5%B8%B8%E8%A7%81PHP%E7%89%B9%E6%80%A7%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
pearcmd
https://y4tacker.github.io/2022/06/19/year/2022/6/%E5%85%B3%E4%BA%8Epearcmd%E5%88%A9%E7%94%A8%E6%80%BB%E7%BB%93/
https://tttang.com/archive/1312/
PCRE回溯次数
https://www.leavesongs.com/PENETRATION/use-pcre-backtrack-limit-to-bypass-restrict.html#0x03-phppcrebacktrack_limit
preg_replace /e代码执行
https://xz.aliyun.com/t/2557