以前写的文章~~ 这里都是高手~`~ 太垃圾的不敢拿出来`` 大家莫笑话俺
很多菜鸟朋友在得到后台后,经常会遇到一些只允许上传图片格式的站,一般人想到的方法,就是上传个图片的ASP马,抓包上传,或者数据库备份来得到webshell,其实,有时候我们可以不必这么麻烦的。
一般在上传的过程中,页面会分两种情况。
第一:提交验证,就是在我们上传是,提交我们上传的文件进行验证,如果发现不是图片格式的,就会报个错。
第二:本地验证,就是在上传的页面中,直接嵌套JAVA
脚本进行验证,从而判断是否是图片格式的文件。
对于第一种方法:大家可以稍微做下欺骗,例如ASP马.jpg.asp 或者ASP.asp (这里有个空格) 记着,后面+个空格,这样来进行欺骗的。再或者,传个ASA文件,有时候,还是可以突破的。
OK,讲第二种,本文重点:
对于本地的限制的,也就是说,提交页面的验证,本身就在这个提交页里,那么,我们就可以对其进行修改,来达到限制。先看个代码:
以下是代码片段: Copy code
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>图片上传系统</title> <script language="JavaScript"> <!-- //检查上传物件 checkFileUpload(表单名称,档案类型,是否需要上传,档案大小,图片最小宽度,图片最小高度,图片最大宽度,图片最大高度,储存宽度的表单名称,储存高度的表单名称) function checkFileUpload(form,extensions,requireUpload,sizeLimit,minWidth,minHeight,maxWidth,maxHeight,saveWidth,saveHeight) { document.MM_returnValue = true; if (extensions != '') var re = new RegExp("\.(" + extensions.replace(/,/gi,"|") + ")$","i"); for (var i = 0; i<form.elements.length; i++) { field = form.elements[i]; if (field.type.toUpperCase() != 'FILE') continue; if (field.value == '') { if (requireUpload) {alert('请选取上传的档案!');document.MM_returnValue = false;field.focus();break;} } else { if(extensions != '' && !re.test(field.value)) { alert('这个档案不符合上传的类型!\n只有以下的类型才允许上传: ' + extensions + '。\n请依规定选取新的档案。'); document.MM_returnValue = false;field.focus();break; } document.PU_uploadForm = form; re = new RegExp(".(gif|jpg|png|bmp|jpeg)$","i"); if(re.test(field.value) && (sizeLimit != '' || minWidth != '' || minHeight != '' || maxWidth != '' || maxHeight != '' || saveWidth != '' || saveHeight != '')) { setTimeout('if (document.MM_returnValue) document.PU_uploadForm.submit()',500); checkImageDimensions(field.value,sizeLimit,minWidth,minHeight,maxWidth,maxHeight,saveWidth,saveHeight); } } } }
function showImageDimensions() { if ((this.minWidth != '' && this.width > this.minWidth) || (this.minHeight != '' && this.height < this.minHeight)) { alert('您所上传的图片尺寸太小了!\n上传的图片大小至少要 ' + this.minWidth + ' x ' + this.minHeight); return;} if ((this.maxWidth != '' && this.width > this.maxWidth) || (this.maxHeight != '' && this.height > this.maxHeight)) { alert('您所上传的图片尺寸为 '+ this.width + ' x ' + this.height+' 太大了!\n上传的图片大小不可超过 ' + this.maxWidth + ' x ' + this.maxHeight); return;} if (this.sizeLimit != '' && this.fileSize/1000 > this.sizeLimit) { alert('您所上传的档案为 '+this.fileSize/1000+' KB太大了!\n最大不可超过 ' + this.sizeLimit + ' KB'); return;} if (this.saveWidth != '') document.PU_uploadForm[this.saveWidth].value = this.width; if (this.saveHeight != '') document.PU_uploadForm[this.saveHeight].value = this.height; document.MM_returnValue = true; }
function checkImageDimensions(fileName,sizeLimit,minWidth,minHeight,maxWidth,maxHeight,saveWidth,saveHeight) { //v2.0 document.MM_returnValue = false; var imgURL = 'file:///' + fileName, img = new Image(); img.sizeLimit = sizeLimit; img.minWidth = minWidth; img.minHeight = minHeight; img.maxWidth = maxWidth; img.maxHeight = maxHeight; img.saveWidth = saveWidth; img.saveHeight = saveHeight; img.onload = showImageDimensions; img.src = imgURL; } //--> </script> <style type="text/css"> <!-- form { margin: 0px; } .formword { font-family: "Georgia", "Times New Roman", "Times", "serif"; font-size: 8pt; } --> </style> <style type="text/css"> <!-- .box { border: 1px dotted #333333; } --> </style> </head> <body bgcolor="#EEEEEE" text="#333333" leftmargin="2" topmargin="2" marginwidth="2" marginheight="2"> <script language="JavaScript" type="text/JavaScript"> var windowW = 400; var windowH = 180; windowX = Math.ceil( (window.screen.width - windowW) / 2 ); windowY = Math.ceil( (window.screen.height - windowH) / 2 ); window.resizeTo( Math.ceil( windowW ) , Math.ceil( windowH ) ); window.moveTo( Math.ceil( windowX ) , Math.ceil( windowY ) ); </script> <form ACTION="fupaction.asp" METHOD="POST" name="form1" enctype="multipart/form-data" onSubmit="checkFileUpload(this,'GIF,JPG,JPEG,PNG',true,'','','','','','','');return document.MM_returnValue"> <table width="100%" height="100%" border="0" cellpadding="4" cellspacing="0"> <tr> <td height="20"><table width="100%" border="0" cellpadding="4" cellspacing="0" bgcolor="#999999"> <tr valign="baseline" class="formword"> <td width="40" align="right"><font color="#FFFFFF">注意:</font></td> <td><font color="#FFFFFF"> 请选取图片上传,允许类型为GIF、JPG、JPEG、PNG 。</font></td> </tr> </table> </td> </tr> <tr> <td height="20" align="center"> <table border="0" cellpadding="4" cellspacing="0"> <tr> <td><input name="upfile" type="file" class="formword" id="upfile" size="40"></td> </tr> </table> <input name="Submit" type="submit" class="formword" value="开始上传"> <input name="close" type="button" class="formword" onClick="window.close();" value="关闭视窗"> <input name="useForm" type="hidden" id="useForm" value="form1"> <input name="upUrl" type="hidden" id="upUrl" value="../images"> <input name="prevImg" type="hidden" id="prevImg" value="showImg"> <input name="reItem" type="hidden" id="reItem" value="rePic"> </td> </tr> <tr> <td height="20" align="center"> <table width="100%" border="0" cellpadding="4" cellspacing="0" bgcolor="#FFFFFF" class="box"> <tr valign="baseline" class="formword"> <td align="center"> Copyright © 2003 <a href="http://www.e-dreamer.idv.tw" target="_blank">eDreamer</a> Inc. All rights reserved.</td> </tr> </table> </td> </tr> </table> </form> </body> </html> |
看到了么,这里直接调用了个JavaScript
脚本来进行验证(可能有些朋友看不懂,没关系。我讲简单些),我们只要把<script language="JavaScript"> 一直到</script>之间的
脚本删除掉就可以了,然后保存在本地。问题又出来了:如果存在本地,那我们提交的话,如何提交到站上去呢?很简单:
以下是代码片段: Copy code
<form ACTION="fupaction.asp" METHOD="POST" name="form1" enctype="multipart/form-data" onSubmit="checkFileUpload(this,'GIF,JPG,JPEG,PNG',true,'','','','','','','');return document.MM_returnValue"> <table width="100%" height="100%" border="0" cellpadding="4" cellspacing="0"> <tr> <td height="20"><table width="100%" border="0" cellpadding="4" cellspacing="0" bgcolor="#999999"> <tr valign="baseline" class="formword"> <td width="40" align="right"><font color="#FFFFFF">注意:</font></td> <td><font color="#FFFFFF"> 请选取图片上传,允许类型为GIF、JPG、JPEG、PNG 。</font></td> </tr> </table> </td> </tr> <tr> <td height="20" align="center"> <table border="0" cellpadding="4" cellspacing="0"> <tr> <td><input name="upfile" type="file" class="formword" id="upfile" size="40"></td> </tr> </table> <input name="Submit" type="submit" class="formword" value="开始上传"> <input name="close" type="button" class="formword" onClick="window.close();" value="关闭视窗"> <input name="useForm" type="hidden" id="useForm" value="form1"> <input name="upUrl" type="hidden" id="upUrl" value="../images"> <input name="prevImg" type="hidden" id="prevImg" value="showImg"> <input name="reItem" type="hidden" id="reItem" value="rePic"> </td> </tr> <tr> <td height="20" align="center"> <table width="100%" border="0" cellpadding="4" cellspacing="0" bgcolor="#FFFFFF" class="box"> <tr valign="baseline" class="formword"> <td align="center"> Copyright © 2003 <a href="http://www.e-dreamer.idv.tw" target="_blank">eDreamer</a> Inc. All rights reserved.</td> </tr> </table> </td> </tr> </table> </form> </body> </html> |
这里是把
脚本删除后剩下的代码,看到开头的:<form ACTION="fupaction.asp"了么,fupaction.asp 这个就是提交页面,我们只要把这个页面的URL地址换上就可以了,比如URL是:www.dwqdqqq.com/manager/fupaction.asp 我们就换成ACTION="www.dwqdqqq.com/manager/fupaction.asp"
这样,就突破了限制,可以提交ASP马了。
当然,这种情况不是时有发生,但是,咱们得善于观察。对于没无从下手的朋友,这方法还是
不错的。
OK,就写这么多了。