zoukankan      html  css  js  c++  java
  • 三十:RCE代码及命令执行漏洞全解

    摘要:在WEB应用中有时候程序员为了考虑灵活性,简明性,会在代码调用或者命令执行函数去处理。比如当应用在调用一些能将字符串转换为代码的函数时,没有考虑用户是都能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞

    函数eval:

    eval() 函数把字符串按照 PHP 代码来计算。
    该字符串必须是合法的 PHP 代码,且必须以分号结尾。
    如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
    

    函数system:

    system — 执行外部程序,并且显示输出
    $code=$_GET['x'];
    echo system($code)         //x=ipconfig   x=ver
    

    漏洞形成条件:

    可控变量,以及漏洞函数  无拓展功能,一般没有此类函数 
    

    文件包含漏洞:

    本地文件包含和远程文件包含漏洞,自己的服务器允许别人的php代码,实现远程文件包含
    
    index.php
    <?php
    	$file = $_GET['file'];
    	if(isset($file)){
    		include("$file");
    		//   require();
    		//   require_once();
    		//   include_once();
    	}else{
    		echo "file fail";
    	}
    ?>             同文件目录下存在其他文件会读取,目录下存在index.php,默认访问index.php,127.0.0.1/include/?file=dudu.php
    	../../etc/httpd.conf  本地包含漏洞可以读取其他文件           172.0.0.1/uploads/include.php?file=图片马的地址
    有文件包含,直接上传,或者日志进行上传。蚁剑连马时候,连得是目标马的地址
    
    	○ PHP中造成文件包含的四个函数 
    

    1、include(),require()

    当使用include()函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
    当使用require()函数包含文件时,只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行。
    

    2.include_once()和include()功能相同,区别在当重复调用同一文件时。程序只调用一次

    require_once()功能和require()相同,区别在于当重复调用同一文件时,程序只调用一次。
    
    当上述的四个函数包含一个新文件时,该文件将作为PHP代码执行,php内核并不在意该被包含的文件是什么类型,如果被包含的是txt文件,图片文件,远程URL,也都将作为PHP代码执行
    

    ○ 本地文件包含,远程文件包含的区别
    
    1、本地文件包含LFI(local File Include)
    2.远程文件包含RFI(Remote File Include)需要ini中allow_url_include = on,allow_url_fopen = on

      PHP伪协议
    事实就是支持的协议和封装的协议12种
    file:// - 访问本地文件系统
    http:// - 访问http网站
    ftp:// - 访问FTP(s)URLS
    php:// - 访问各个输入输出流
    zlib:// - 压缩流
    data:// - 数据(RFC 2397)
    glob:// -查找匹配的文件路径模型
    ssh2:// - Secure Shell 2
    rar:// - RAR
    ogg:// - 音频流
    expect:// - 处理交互式的流
    		
    目标文件  robots.txt	 路径为127.0.0.1/www/robots.txt  	 <?php phpinfo();?>
     robots.zip	127.0.0.1/www/robots.zip	robots.txt
    1.php	127.0.0.1/www/1.php	<?php echo('Hello world')?>
    flag.txt	D:/flag.txt	flag{123test}
    		
    常用协议:
    	1.目录遍历获取flag:
    

    	2.php://input                              php://filter
    	(1) php://input用于执行php代码
    

    	也可以写入shell获取服务器权限
    	<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[CMD])?>');?>
    

    	(2)php://filter 用于读取源码
    	?file=php://filter/convert.base64-encode/resource=1.php
    

             3.file://
    	用于读取本地系统文件,在CTF中读取本地文件
    

             4.data:// 
    	可以写入后门,获取权限执行任意命令
    

    	5.zip://
    	zip://[压缩文件的绝对路径]#[压缩文件的子文件名]
    

    	6.phar协议的作用是归档,将多个文件分组为一个文件。可以处理tar和zip文件
    

  • 相关阅读:
    搭建环境遇到的几个问题
    webservice
    Eclipse 反编译 阅读class 文件
    设置navigationBar上面的item
    自定义的UITabbar上面的按钮的x坐标的计算方法
    UIToolbar自定义背景及按钮设置
    UITabBar实现自定义背景及UITabBarItem自定义图片和字体
    IOS APP圆形图片的实现
    如果AlertView输入框为空,则禁止点击确定按钮
    两种局部刷新UITableView的方法的使用条件
  • 原文地址:https://www.cnblogs.com/SnowSec/p/14316974.html
Copyright © 2011-2022 走看看