题目来源于:bugku
题目难度:难
题目 描 述: What about making things a bit harder ?
题目源代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
rel="stylesheet"
href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="main.css" />
<title>Say Hello to our Gentelmen | LFI Warmups</title>
</head>
<body>
<br /><br />
<div class="container">
<h1 id="h1">LFI Warmups - level 2</h1>
<hr />
<h2 id="challenge">Hello I can speak 2 languages !</h2>
<hr />
<u><b>Rules</b></u>
<ul>
<li>include some critical file <code> why not /etc/passwd</code></li>
</ul>
<hr />
<u><b>Challenge</b></u>
<p>Please Select a language of your choice : en/fr </p>
<p><b>HINT :</b> Approved Paths, there is a <code>languages </code> directory, I wont tell you what's stocked in it ? ;)</p>
<hr />
<p>
</p>
</div>
</body>
</html>
这个HTML页面似乎是一个Web挑战或练习的一部分,特别是关于本地文件包含(Local File Inclusion, LFI)的。在这个挑战中,用户被要求通过某种方式访问一个名为languages
的目录中的文件,以选择英语(en)或法语(fr)的语言设置。
不过,这个HTML页面本身并没有包含任何执行LFI的代码。它只是一个前端界面,用于向用户展示挑战的规则和提示。
这里有一些关键点:
- 挑战规则:规则中提到要“include some critical file”,并给出了一个例子
/etc/passwd
。但在一个真正的Web应用中,直接包含像/etc/passwd
这样的系统文件是不安全的,也是不可能的(除非存在严重的安全漏洞)。 - 挑战内容:用户被要求选择一种语言(en/fr)。这可能意味着后端代码会根据用户的选择来包含或读取
languages
目录下的某个文件(例如en.txt
或fr.txt
)。 - HINT:提示说“Approved Paths, there is a
languages
directory”。这意味着用户应该尝试访问languages
目录下的文件。 - 潜在的LFI风险:虽然这个HTML页面本身没有LFI风险,但后端代码(可能是PHP、Python等)可能会根据用户输入来动态包含文件。如果后端代码没有正确验证或转义用户输入,就可能导致LFI漏洞。
为了完成这个挑战,你可能需要:
- 访问后端代码(如果可用)以了解它是如何处理用户输入的。
- 尝试通过修改URL或发送POST请求来传递不同的语言参数(例如
?lang=en
或?lang=fr
)。 - 使用开发者工具(如浏览器的Network或Console标签页)来查看和调试HTTP请求和响应。
- 根据后端代码的行为和响应来确定如何成功访问
languages
目录下的文件。
下面我们开始解题:
这个题目还是有点难度的,根据bugku的网友提供的解题思路
我们直接输入“ URL/?language=./languages/../../../../etc/passwd ”
这样就能成功获取到flag,题目就解决了