>  기사  >  웹 프론트엔드  >  획기적인 JS 로컬 검증 솔루션

획기적인 JS 로컬 검증 솔루션

小云云
小云云원래의
2018-03-13 15:02:502513검색

취약점 업로드 시 자주 접하게 되는 일종의 js 확인은 꽤 짜증나는 일입니다. 웹사이트에서 js 확인이 활성화되어 있는지 판단하는 방법은 판단 속도를 이용하는 것입니다. 왜냐하면 js 확인은 클라이언트에서 로컬 확인에 사용되기 때문입니다. 잘못된 파일 형식을 업로드하는 경우 업로드한 파일 형식이 잘못된 것으로 판단되어 웹사이트에서 js 확인을 사용한다고 판단할 수 있습니다.

js 검증 우회 데모 코드:

<?php
/**
 * Created by cracer
 * Date: 15-10-7
 * Time: 下午1:19
 * Name: upload1.php
 * cracer:http://www.cracer.com/
 */
//文件上传漏洞演示脚本之js验证
$uploaddir = &#39;uploads/&#39;;
if (isset($_POST[&#39;submit&#39;])) {
 if (file_exists($uploaddir)) {
 if (move_uploaded_file($_FILES[&#39;upfile&#39;][&#39;tmp_name&#39;], $uploaddir . &#39;/&#39; . $_FILES[&#39;upfile&#39;][&#39;name&#39;])) {
 echo &#39;文件上传成功,保存于:&#39; . $uploaddir . $_FILES[&#39;upfile&#39;][&#39;name&#39;] . "\n";
 }
 } else {
 exit($uploaddir . &#39;文件夹不存在,请手工创建!&#39;);
 }
 //print_r($_FILES);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=gbk"/>
 <meta http-equiv="content-language" content="zh-CN"/>
 <title>文件上传漏洞演示脚本--JS验证实例</title>
 <script type="text/javascript">
 function checkFile() {
 var file = document.getElementsByName(&#39;upfile&#39;)[0].value;
 if (file == null || file == "") {
 alert("你还没有选择任何文件,不能上传!");
 return false;
 }
 //定义允许上传的文件类型
 var allow_ext = ".jpg|.jpeg|.png|.gif|.bmp|";
 //提取上传文件的类型
 var ext_name = file.substring(file.lastIndexOf("."));
 //alert(ext_name);
 //alert(ext_name + "|");
 //判断上传文件类型是否允许上传
 if (allow_ext.indexOf(ext_name + "|") == -1) {
 var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
 alert(errMsg);
 return false;
 }
 }
 </script>
<body>
<h3>文件上传漏洞演示脚本--JS验证实例</h3>
<form action="" method="post" enctype="multipart/form-data" name="upload" onsubmit="return checkFile()">
 <input type="hidden" name="MAX_FILE_SIZE" value="획기적인 JS 로컬 검증 솔루션04800"/>
 请选择要上传的文件:<input type="file" name="upfile"/>
 <input type="submit" name="submit" value="上传"/>
</form>
</body>
</html>

참고: 폴더 경로와 파일 이름은 영어로 작성하는 것이 가장 좋습니다. 그렇지 않으면 오류가 보고될 수 있습니다.

획기적인 JS 로컬 검증 솔루션

코드를 upload.php로 저장한 다음 동일한 디렉터리에 업로드 폴더를 만들어 업로드된 파일을 저장하세요.

js 검증 우회 방법

JS 검증은 우회가 가장 좋습니다. 클라이언트 기반 검증은 안전하지 않다는 말이 있는 것 같습니다.

파일 업로드가 클라이언트 측 JS 확인을 기반으로 하는지 어떻게 확인하나요?

웹사이트 소스 파일을 직접 보는 방법, 패킷 캡처 도구를 사용하여 클라이언트가 서버에 데이터 패킷을 제출했는지 확인하는 방법 등 여러 가지 방법이 있습니다. 그렇지 않은 경우 js 확인을 사용하여 무작위로 파일을 업로드하고 확인합니다. 반환 결과.

획기적인 JS 로컬 검증 솔루션

위 그림과 같이 JS 인증은 업로드된 파일을 제출한 직후에 프롬프트를 띄우고 서버에 파일 제출을 종료합니다. 우회 방법은 다음과 같습니다.

A. 코드 내 onsubmit 이벤트에서 파일 업로드 시 업로드된 파일 검증 관련 코드를 직접 삭제할 수 있습니다.

획기적인 JS 로컬 검증 솔루션

ok Firebug를 사용하여

획기적인 JS 로컬 검증 솔루션

획기적인 JS 로컬 검증 솔루션

B를 제거한 후 파일 업로드 JS 코드에서 허용되는 파일 확장자를 업로드하려는 파일 확장자로 직접 변경하세요.

획기적인 JS 로컬 검증 솔루션

획기적인 JS 로컬 검증 솔루션

ok 다음 두 가지 방법은 작동이 비교적 간단합니다. 여기서는 설명하지 않겠습니다. 질문이 있으면 QQ

C에 문의하세요. 해당 변경 사항.

D. Burpsuite나 Fiddle과 같은 프록시 도구를 사용하여 먼저 로컬 파일을 jpg로 변경하고, 업로드할 때 가로채고, 파일 확장자를 asp로 변경하세요.

위 4가지 방법은 누구나 자유롭게 사용할 수 있으며 모두 로컬 JS 검증을 우회할 수 있습니다.

관련 추천 :

js 인증 관련 기사 추천 요약

js 전화번호, 휴대폰 번호 확인을 위한 정규식

신분증 정보가 적법한지 확인하는 js

위 내용은 획기적인 JS 로컬 검증 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.