标题: [wargames] Natas 25 解答 分类: 安全测试 创建: 2022-12-05 20:17 修改: 链接: http://0x2531.tech/testing/202212052017.txt -------------------------------------------------------------------------------- OverTheWire 设计了一系列 wargames,Natas 是其中之一,主要关注基本的服务端 Web 安全问题。 最近抽空玩了下,还挺有趣。 Natas 项目地址:https://overthewire.org/wargames/natas/ Natas 25 主要考察代码审计方面的能力,具体知识点是绕过 ../ 及 include 特性。 主要的后端代码如下: ==========

natas25

$__GREETING"; echo "

$__MSG"; echo "

$__FOOTER
"; ?> ========== 有些渗透测试经验的话,看到 logRequest 函数大概就知道思路了。这里面有2个点: 1. $_SERVER['HTTP_USER_AGENT'] 变量可以控制; 2. 由于客户端能拿到会话 id,所以知道日志文件路径。 一个可能的利用思路是:通过 user-agent 传递 webshell,webshell 被顺利写入 log 文件,然后通 过代码审计看是否有通过 include/require 函数包含该日志文件的点。 很容易发现 safeinclude 函数中有调用 include 函数包含文件。 但不幸的是,safeinclude 函数在包含文件前,做了一些安全检查,包括将 ../ 删除和拦截包含 natas_webpass 关键字的请求。 日志文件路径并不包含 natas_webpass,而是在文件内容中包含,所以只需绕过删除 ../ 的机制。 通过 lang 参数传递的日志文件路径会和 "language/" 拼接,我们需要绕过它使得直接 include 日志 文件。怎么绕过?答案是 ....//,由于检查机制会删除 ../,所以 ....// 被处理后正好变成了 ../, 完美绕过。 至此,答案就呼之欲出了。 首先,在 user-agent 中追加 @@。然 后,请求 /?lang=....//....//....//....//....//....//....//....//....//....//var/ www/natas/natas25/logs/natas25_s9b78es9ml0have379p4go85t9.log。至于需要多少个 ....//,尝试几次就好了。 include 包含 log 文件后,会执行其中的 php 代码,在页面显示 natas26 的密码。 ...... [05.12.2022 07::53:00] Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/ 537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/ 537.36@@8A506rfIAXbKKk68yJeuTuRq4UfcK70k "Directory traversal attempt! fixing request." ......