网安基础学习之“文件上传漏洞原理与实现”

近期新闻头条上报出了“长沙市场监管局网站被上传了黄色页面”,经过长沙市公安局网技支队的排查,该门户网站后台编辑器存在**“文件上传漏洞”!**

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G9lBjYh7-1677305335722)(https://p3-sign.toutiaoimg.com/pgc-image/c48932e9031a421e94c46d1b650294f7~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=j%2BZ9AMxm%2F%2F%2FCvCbSt8dg5l1f5o8%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AfhQBImI-1677305335723)(https://p3-sign.toutiaoimg.com/pgc-image/c48157d02a8b4398bac24235884e006d~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=MlbMVSDfAkBLiWC39xrw%2FT%2BDaF0%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJxxKccP-1677305335724)(https://p3-sign.toutiaoimg.com/pgc-image/edcd9ac4f2d8422aa0c47531cfb5a052~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=PeBfgYfV%2BVkFUWgtcruPXq%2F%2FGlo%3D)]

通过数据可以显示,文件上传漏洞,对网站的负面影响还是很大的,那么究竟"什么是文件上传漏洞?技术原理是什么?如何防范该漏洞?

今天小编我就以本篇文章内容给大家分享一下"文件上传漏洞的技术原理与实现,以及我们该如何防御该漏洞"。

一、 "文件上传漏洞"是什么

Web应用程序通常会有文件上传的功能, 例如在 BBS发布图片 , 在个人网站发布ZIP 压缩包, 在办公平台发布DOC文件等 , 只要 Web应用程序允许上传文件, 就有可能存在文件上传漏洞

由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,**"文件上传"本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。**如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

二、 文件上传后导致的安全问题

上传的文件是web脚本语言,服务器的web容器解释并执行了文件上传的web脚本,导致了代码的执行。

上传文件是flash的策略文件,黑客可以通过控制flash在该域下的行为,来进行其他攻击。上传文件是病毒,木马文件,那攻击者可以诱使文件中其他的人员下载执行。

文件上传也有可能是钓鱼图片,或者包含了脚本文件的图片,在某些版本的浏览器中,这些脚本文件会被执行,可以用来做钓鱼攻击

除此以外,还有一些不常见的利用方法,比如将一个文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块,或者上传一个合法的文件,其内容包含了php的代码,再通过文件包含,来执行这个脚本。

三、造成文件上传漏洞的原因

(1)对于上传文件的后缀名(扩展名)没有做较为严格的限制

(2)对于上传文件的MIMETYPE 没有做检查

(3)权限上没有对于上传的文件的文件权限,(尤其是对于shebang类型的文件)

(4)对于web server对于上传文件或者指定目录的行为没有做限制

四、文件上传漏洞攻击方式

1.前端限制

function check(){var filename=document.getElementById("file");var str=filename.value.split(".");var ext=str[str.length-1];if(ext=='jpg'||ext=='png'||ext=='jpeg'||ext=='gif'){return true;}else{alert("这不是图片!")return false;}return false;}

在表单中使用onsumbit=check()调用js函数来检查上传文件的扩展名。这种限制实际上没有任何用处,任何攻击者都可以轻而易举的破解。只能用于对于用户完全信任的情况下,很难称之为一种安全措施只能称之是一种防止用户误操作上传的措施。

**原理:**当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名。

绕过方法:

**1).**绕过前台脚本检测扩展名,就是将所要上传文件的扩展名更改为符合脚本检测规则的扩展名,通过BurpSuite工具,截取数据包,并将数据包中文件扩展名更改回原来的,达到绕过的目的。例如:文件名本来为【evil.jpg】,上传时,用BurpSuite截包后,将数据包中的名字改为【evil.php】(或其它脚本类型)即可。

**2).**如果是JS脚本检测,在本地浏览器客户端禁用JS即可。可使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现。

2.检查扩展名

就是在文件被上传到服务端的时候,对于文件名的扩展名进行检查,如果不合法,则拒绝这次上传在检查扩展名是否合法的时候,有两种策略:

1).黑名单策略,文件扩展名在黑名单中的为不合法:

postfix=end(explode(′.′,′postfix = end(explode('.','postfix=end(explode(′.′,′_POST[‘filename’]);

if(postfix==′php′∣∣postfix=='php'||postfix==′php′∣∣postfix==‘asp’||$postfix==‘sh’){

echo “invalid file type”;

return;

}

2).白名单策略,文件扩展名不在白名单中的均为不合法

postfix=end(explode(′.′,′postfix = end(explode('.','postfix=end(explode(′.′,′_POST[‘filename’]);

if(postfix==′jpg′∣∣postfix=='jpg'||postfix==′jpg′∣∣postfix==‘png’||$postfix==‘gif’){

//save the file and do something next

} else {

echo “invalid file type”;

return;

}

白名单策略是更加安全的,通过限制上传类型为只有我们接受的类型,可以较好的保证安全,因为黑名单我们可以使用各种方法来进行注入和突破

**原理:**当浏览器将文件提交到服务器端的时候,服务器端会根据设定的黑白名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合黑白名单的限制,则不予上传,否则上传成功。

绕过方法:

在一些Web server中,存在解析漏洞

1).老版本的IIS6中的目录解析漏洞,如果网站目录中有一个 /.asp/目录,那么此目录下面的一切内容都会被当作asp脚本来解析

2).老板本的IIS6中的分号漏洞:IIS在解析文件名的时候可能将分号后面的内容丢弃,那么我们可以在上传的时候给后面加入分号内容来避免黑名单过滤,如 a.asp;jpg

3).旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行

4).nginx(0.5.x, 0.6.x, 0.7 <= 0.7.65, 0.8 <= 0.8.37)空字节漏洞 xxx.jpg%00.php 这样的文件名会被解析为php代码运行(fastcgi会把这个文件当php看,不受空字节影响,但是检查文件后缀的那个功能会把空字节后面的东西抛弃,所以识别为jpg)

5).apache1.x,2.x的解析漏洞,上传如a.php.rar a.php.gif 类型的文件名,可以避免对于php文件的过滤机制,但是由于apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar等扩展名是apache不能识别的,因此就会直接将类型识别为php,从而达到了注入php代码的目的。

3.检查HTTP Header中的Content-Type

**原理:**HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型不过这仍然是不安全的,因为HTTP header可以被发出者或者中间人任意的修改,不过加上一层防护也是可以有一定效果的绕过方法使用各种各样的工具(如burpsuite)强行篡改Header就可以,将Content-Type: application/php改为其他web程序允许的类型Content-Type: image/jpgContent-Type: image/pngContent-Type: text/plain。

常用的MIMETYPE表

text/plain(纯文本)

text/html(HTML文档)

text/javascript(js代码)

application/xhtml+xml(XHTML文档)

image/gif(GIF图像)

image/jpeg(JPEG图像)

image/png(PNG图像)

video/mpeg(MPEG动画)

application/octet-stream(二进制数据)

application/pdf(PDF文档)

application/(编程语言) 该种语言的代码

application/msword(Microsoft Word文件)

message/rfc822(RFC 822形式)

multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)

application/x-www-form-urlencoded(POST方法提交的表单)

multipart/form-data(POST提交时伴随文件上传的表单)

4.分析文件头内容来检查文件类型

与方法2不同,还有一种检查类型的方式是使用对于文件内容的验证机制,这种方法利用的是每一个特定类型的文件都会有不太一样的开头或者标志位。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fblnnafw-1677305335724)(https://p3-sign.toutiaoimg.com/pgc-image/930764b5cd334a55a56dac42638844e1~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=l6t457pJTul2Bxjw%2BNMY%2F7NjDZY%3D)]

在正常情况下,通过判断前10个字节,基本上就能判断出一个文件的真实类型。可以通过比如php的exif_imagetype()函数,一个通过这种方法来过滤的示例代码如下:

if (! exif_imagetype($_FILES[‘uploadedfile’][‘tmp_name’])) {

echo “File is not an image”;

return;

}

也可以自己编写函数来进行识别,图片文件通常有称作幻数的头字节,我们来看一下几种图片文件的幻数:(注意!下面是二进制而不是文本格式的数据)

JPGFF D8 FF E0 00 10 4A 46 49 46

GIF47 49 46 38 39 61

(相当于文本的GIF89a)

PNG89 50 4E 47绕过方法给上传脚本加上相应的幻数头字节就可以,php引擎会将 <?之前的内容当作html文本,不解释而跳过之,后面的代码仍然能够得到执行比如下面:(一般不限制图片文件格式的时候使用GIF的头比较方便,因为全都是文本可打印字符。)

GIF89a

<?php do_something(); ?>

如果是其他类型的二进制文件,也有响应的头字节,如下表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KWWSrl2b-1677305335724)(https://p3-sign.toutiaoimg.com/pgc-image/c07863475dd1434c86c8fbc3120439ee~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=1xgWnBy6KDO0evuhZ7qAYEiHfHM%3D)]

5.限制Web Server对于特定类型文件的行为

导致文件上传漏洞的根本原因在于服务把用户上传的本应是数据的内容当作了代码,一般来说,用户上传的内容都会被存储到特定的一个文件夹下,比如我们很多人习惯于放在 ./upload/ 下面要防止数据被当作代码执行,我们可以限制web server对于特定文件夹的行为。

大多数服务端软件都可以支持用户对于特定类型文件的行为的自定义,以Apache为例:

在默认情况下,对与 .php文件Apache会当作代码来执行,对于 html,css,js文件,则会直接由HTTP Response交给客户端程序对于一些资源文件,比如txt,doc,rar等等,则也会以文件下载的方式传送的客户端。

我们希望用户上传的东西仅仅当作资源和数据而不能当作代码,因此可以使用服务器程序的接口来进行限制,以Apache为例,我们可以利用 .htaccess 文件机制来对web server行为进行限制禁止脚本执行有多种方式可以实现,而且分别有不同的效果:

1).指定特定扩展名的文件的处理方式,原理是指定Response的Content-Type可以加上如下几行AddType text/plain .pl .py .php这种情况下,以上几种脚本文件会被当作纯文本来显示出来,你也可以换成其他的Content-Type

2).如果要完全禁止特定扩展名的文件被访问,用下面的几行

Options -ExecCGI

AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi识别

在这种情况下,以上几种类型的文件被访问的时候,会返回403 Forbidden的错误

3).也可以强制web服务器对于特定文件类型的处理,与第一条不同的是, 下面的方法直接强行让apache将文件识别为你指定的类型,而第一种是让浏览器

<FilesMatch “.(php|pl|py|jsp|asp|htm|shtml|sh|cgi)$”>

ForceType text/plain

符合上面正则的全部被认为是纯文本,也可以继续往里面加入其他类型。

4).只允许访问特定类型的文件

<Files ^(.jpeg|.jpg|.png|.gif)>

order deny,allow

deny from all

在一个上传图片的文件夹下面,就可以加上这段代码,使得该文件夹里面只有图片扩展名的文件才可以被访问,其他类型都是拒绝访问。

这又是一个白名单的处理方案,永远记得,白名单是最有保障的安全措施绕过方法可以通过 move_uploaded_file 函数把自己写的.htaccess 文件上传,覆盖掉服务器上的文件,来定义文件类型和执行权限如果做到了这一点,将获得相当大的权限。

6.文件系统00截断

**原理:**在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束。利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。

**绕过方法:**通过抓包截断将【evil.php.jpg】后面的一个【.】换成【0x00】。在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束,从而将【evil.php.jpg】的内容写入到【evil.php】中,从而达到攻击的目的。

7.其它方式—绕过

**原理:**部分程序员的思维不严谨,并使用逻辑不完善的上传文件合法性检测手段,导致可以找到方式绕过其检测方式。

绕过方法:

1). 后缀名大小写绕过

用于只将小写的脚本后缀名(如php)过滤掉的场合;

例如:将Burpsuite截获的数据包中的文件名【evil.php】改为【evil.Php】

2). 双写后缀名绕过

用于只将文件后缀名过滤掉的场合,例如"php"字符串过滤的;

例如:上传时将Burpsuite截获的数据包中文件名【evil.php】改为【evil.pphphp】,那么过滤了第一个"php"字符串"后,开头的’p’和结尾的’hp’就组合又形成了【php】。

3). 特殊后缀名绕过

用于检测文件合法性的脚本有问题的场合;

例如:将Burpsuite截获的数据包中【evil.php】名字改为【evil.php6】,或加个空格改为【evil.php 】等。

五、文件上传漏洞实例分享

1.结合iis5.x/6.0解析漏洞上传文件

先上传一个asp文件,抓包看看返回结果是什么

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1SGaZk0F-1677305335725)(https://p3-sign.toutiaoimg.com/pgc-image/753bd8b49ad74db08184c5d07967c2bb~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=PywGUd2cLwl1YFaFQI6GWkvBKMc%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r5UX0Kbv-1677305335725)(https://p3-sign.toutiaoimg.com/pgc-image/67a082913ecd4108b8890ddaa6e8e121~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=v%2BdF3U5pbaKmYrWuWiogjoHouxA%3D)]

由上图我们可以知道服务器是iis6.0,接下来我们利用iis6.0解析漏洞来上传我们的一句话,添加一个asp目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hO6RfFTB-1677305335725)(https://p3-sign.toutiaoimg.com/pgc-image/1a40fc5cc563403091e2cf863e5fbf1a~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=hnOQArqXiMkvNbWbgoeCJpGIYpQ%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8VFGsmv-1677305335726)(https://p3-sign.toutiaoimg.com/pgc-image/b616532188e0412b977d80b478c5f547~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=92aTnInXzyRIHEgHGveaZ2gB9kE%3D)]

2.一句话木马图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fAQhyLbk-1677305335726)(https://p3-sign.toutiaoimg.com/pgc-image/84997996cf554238af87897505c59980~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=nSksZHwRoy43qzweC7CIQbA9%2BLo%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7qCncoWt-1677305335726)(https://p3-sign.toutiaoimg.com/pgc-image/323584cab4334817bd5db2da506e3a92~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=boH37nOe0JeWySUSdnKcabg%2FUhs%3D)]

分析上图,先上传php文件,不允许,那么改下后缀名为png,还是不行,看来是对文件内容做了检查,做个图片马,上传

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q19SnDQ0-1677305335726)(https://p3-sign.toutiaoimg.com/pgc-image/7547f61f9d124213b21bea97e0593613~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=uC8BgzSWB%2FW6388aiyrRzVLAnT8%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZhnwedPW-1677305335727)(https://p3-sign.toutiaoimg.com/pgc-image/0faba9ec91ea4f50be990c1aaa03220c~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=l86UBCmyzJnUppc6pfH5Z9JNzfw%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tcz2ID1n-1677305335727)(https://p3-sign.toutiaoimg.com/pgc-image/1aa6193d15d94ead8dd5afe924e31337~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=KRwwoR9oEn7PRaNpwZTiKAehT%2Fg%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PiFxOkFt-1677305335727)(https://p3-sign.toutiaoimg.com/pgc-image/b866870d751d4f2baeaaa3d286072d54~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=wZYKjMRP0g8wPOLxMt4sKHrrjas%3D)]

菜刀连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQaMWKHW-1677305335727)(https://p3-sign.toutiaoimg.com/pgc-image/af960aabafbe46de9ddc6655983b0d6a~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=jmnVtGxckkBpNoD1b7YjYAIE6EU%3D)]

3.绕过前端验证

先上传php文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UameA7w4-1677305335727)(https://p3-sign.toutiaoimg.com/pgc-image/b1be711b92ab467892666a392236d45b~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=5dqDfSz%2FTl7DlTnZKyIzJCj2b5Y%3D)]

从上图可以看到上传的时候弹出一个弹窗,只让我们上传上面格式的文件,那么我们把我们的文件名后缀改成png,上传抓包,在包里将我们的文件再改回php文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sAoUcbWP-1677305335728)(https://p3-sign.toutiaoimg.com/pgc-image/b0eff315fc2e4837b65637de74668692~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=f%2BuoTEZZ0YWHQNGeSCnlHLKY%2Bmw%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eXW7ueCL-1677305335728)(https://p3-sign.toutiaoimg.com/pgc-image/0d84ab68b9a44fb8916e6ccae987d8b6~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=B5HtG%2FBhC4DzfUj%2F%2Bo%2FNq9p8F7o%3D)]

上图显示我们上传成功,那么最后就是菜刀拿shell了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIZ7rvxo-1677305335728)(https://p3-sign.toutiaoimg.com/pgc-image/aab9b72e3c5747789dec57b048446135~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=ph87NvJhGMQ68048DIQIbs5AgrU%3D)]

4.修改Content-Type绕过

上传一句话抓包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkGBkK6M-1677305335728)(https://p3-sign.toutiaoimg.com/pgc-image/74f3c0ff0d4d4b16840081f668d6f866~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=UtKieXzHoejOqo9Km8VRtTGpY%2Fs%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WCTTKmDv-1677305335729)(https://p3-sign.toutiaoimg.com/pgc-image/0bcde9393a6b42bd8eb35a6638033e0b~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=6CqhmN6%2F01ynBRzaAX6as%2Fse74A%3D)]

从上图可以指看到,Content-Type字段是application/octet-stream,来到Repeater,将Content-Type: application/octet-stream改成Content-Type: image/jpeg

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dE4DUHrd-1677305335729)(https://p3-sign.toutiaoimg.com/pgc-image/e54c8aabd6254ecc8743f252aa8a2e50~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=mQqpwX4BqdBUl5sL9yvmLdcgCzg%3D)]

成功上传,菜刀连接,getshell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-04ts1hkO-1677305335729)(https://p3-sign.toutiaoimg.com/pgc-image/eab0b02e9d0f4f94875e993e99bc633e~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=n6OOkT%2BY5S2kggC3RoQQXAyitbU%3D)]

5.特殊的上传方式

没有任何可以上传的页面,但是页面显示的是有上传的地址的,所以扫描一下,或者可以猜一下路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fWlqoIVN-1677305335729)(https://p3-sign.toutiaoimg.com/pgc-image/e688188e8feb48ea898076834d0239ed~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=FOVY84A%2BXMnMoVV7pELESqF59SE%3D)]

没有显示错误,说明这个目录下应该可以找到我们想要的的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ikYigS88-1677305335729)(https://p3-sign.toutiaoimg.com/pgc-image/0be550e94e444a619c9321e7cfa311b7~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=JfyQBscUR9FRfBrUpCtjXS9kpUo%3D)]

猜一下上传目录,一开始写的是upload.php,进入之后就直接跳转到upload1.php,并且提示无权访问,抓包看一下吧

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEhCf6lh-1677305335730)(https://p3-sign.toutiaoimg.com/pgc-image/8319b4d3d55c4d10baa779e4878ded60~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=QLtXWXgBGCyOOByQQPNUdeZKqmg%3D)]

下面就是无限的抓包重放,看返回包中有没有什么我们需要的东西

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uN6mmuf7-1677305335730)(https://p3-sign.toutiaoimg.com/pgc-image/96d35e98bc3346ac90aa3cc2b45075be~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=uAfOzdvg7za1YJypmxt8zU32qlE%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZielJwp-1677305335730)(https://p3-sign.toutiaoimg.com/pgc-image/56c31aba9f3b43878654211d1fa7d6d5~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=EtO4CR5jaW9FrdDgnQ%2BUzpoAu6o%3D)]

下图这个返回包中我们可以看到upload.php下一跳应该是upload_file.php,但是由于权限问题,不能进去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9l5Hmngm-1677305335730)(https://p3-sign.toutiaoimg.com/pgc-image/431d6e77432b417aa77a5db25f71a10c~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=kSixt8P4BrxmmfdseIKlD4W52TY%3D)]

但是,forward之后就出现了上传界面,神奇啊,那就上传一句话

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3NzPPWjr-1677305335730)(https://p3-sign.toutiaoimg.com/pgc-image/50e10eef974b46f9b41379711aa64701~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=ls2bjWhnIyo8w9z90ZEXxud4Cqs%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-up17264W-1677305335731)(https://p3-sign.toutiaoimg.com/pgc-image/4a8162b95ff14a428f102f5ee30f86b6~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=LmQxMKYVwYxW7TRlPzAJjFXzNXk%3D)]

接下来只要知道绝对路径就可以上传我们的一句话了,这个cookie挺让我在意的,把它改成upload_file.php,go一下,返回包直接显示了上传路径,文件上传之后被重新命名了,命名规则也很简单:verify_当天日期_你上传的文件名,前面我们上传文件的时候,有个verify,它的值就在下面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ddK9DD6c-1677305335731)(https://p3-sign.toutiaoimg.com/pgc-image/f8a884a78acf4879b4d8105d3d15bcb0~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=Un7lDK3QxcQCdbCTHlYqMthmAU0%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YsA4MOpo-1677305335731)(https://p3-sign.toutiaoimg.com/pgc-image/fdc3501a62a74c83ab0f39e56490ee1f~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=0aSWYLXng%2FXNEgpzcizFYu8S%2BrY%3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YhZ3ilV5-1677305335731)(https://p3-sign.toutiaoimg.com/pgc-image/8cd39e4e6b054370ae63ca9f3d8e1461~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=Z2An%2FcUlTWg9C02qL1eA6X4pbBI%3D)]

成功getshell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FbdnRHET-1677305335731)(https://p3-sign.toutiaoimg.com/pgc-image/ae3882a5b3084c358bdac54a85afcf5b~noop.image?_iz=58558&from=article.pc_detail&x-expires=1675753861&x-signature=hFm5nKD7fLckNpZtRkq13GHu98k%3D)]

六、文件上传漏洞防御防范

文件上传漏洞常见的几种防御方法:

**1.**文件上传的目录设置为不可执行只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

**2.**判断文件类型在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

**3.**使用随机数改写文件名和文件路径文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

**4.**单独设置文件服务器的域名由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含script的XSS利用等问题将得到解决。

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2022密码学/隐身术/PWN技术手册大全

扫码领取

因为重命名而无法攻击。

**4.**单独设置文件服务器的域名由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含script的XSS利用等问题将得到解决。

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

网络安全基础入门需要学习哪些知识?

网络安全学习路线

这是一份网络安全从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v19T846c-1677167179814)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑

阶段一:基础入门

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sRoDZu4K-1677167179814)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

网络安全导论

渗透测试基础

网络基础

操作系统基础

Web安全基础

数据库基础

编程基础

CTF基础

该阶段学完即可年薪15w+

阶段二:技术进阶(到了这一步你才算入门)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-il25GFVz-1677167179815)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

弱口令与口令爆破

XSS漏洞

CSRF漏洞

SSRF漏洞

XXE漏洞

SQL注入

任意文件操作漏洞

业务逻辑漏洞

该阶段学完年薪25w+

阶段三:高阶提升

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ITOSD3Gz-1677167179816)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

反序列化漏洞

RCE

综合靶场实操项目

内网渗透

流量分析

日志分析

恶意代码分析

应急响应

实战训练

该阶段学完即可年薪30w+

阶段四:蓝队课程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKCwwld2-1677167179818)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

蓝队基础

蓝队进阶

该部分主攻蓝队的防御,即更容易被大家理解的网络安全工程师。

攻防兼备,年薪收入可以达到40w+

阶段五:面试指南&阶段六:升级内容

需要上述路线图对应的网络安全配套视频、源码以及更多网络安全相关书籍&面试题等内容

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

网安基础学习之“文件上传漏洞原理与实现”相关推荐

  1. 【漏洞复现】海康威视iVMS综合安防系统任意文件上传漏洞复现 (在野0day)

    文章目录 前言 声明 一.产品简介 二.漏洞概述 三.影响范围 四.漏洞验证 五.漏洞利用 六.修复建议 前言 海康威视iVMS综合安防系统存在任意文件上传漏洞 ,攻击者可通过构造特定Payload实 ...

  2. 海康威视iVMS综合安防系统任意文件上传漏洞复现(0day)

    0x01 产品简介 海康威视iVMS集中监控应用管理平台,是以安全防范业务应用为导向,以视频图像应用为基础手段,综合视频监控.联网报警.智能分析.运维管理等多种安全防范应用系统,构建的多业务应用综合管 ...

  3. 文件上传漏洞-原理篇

    目录 第1章 文件上传漏洞基础 1.1 漏洞概述 1.2 漏洞成因 1.3 漏洞危害 1.4 漏洞利用姿势 第2章 文件上传漏洞检测与绕过 2.1 前端检测和绕过 2.2 服务器端检测和绕过 第3章 ...

  4. PHP文件上传漏洞原理以及防御姿势

    PHP文件上传漏洞 本文用到的代码地址:https://github.com/Levones/PHP_file_upload_vlun,好评请给小星星,谢谢各位大佬! 0x00 漏洞描述 ​ 在实际开 ...

  5. 文件上传漏洞原理/方式/防护

    文件上传漏洞是获取服务器权限最快也是最直接的一个漏洞 原理 文件上传漏洞是指用户上传可执行脚本文件 , 并通过脚本文件控制Web服务器 利用方式 文件上传漏洞的利用分为客户端和服务端 客户端主通过JS ...

  6. 文件上传漏洞原理与实例测试

    0x00 什么是文件上传 为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率.企业支持门 ...

  7. 文件上传漏洞原理和利用

    文件上传 1.前段选择文件,提交文件 2.浏览器形成POST MultiPart报文发送到服务器 3.服务器中间件接收到报文,解析后交给后端代码进行处理 4.后端代码将上传的文件内容写入到临时文件中( ...

  8. 文件上传漏洞揭密剖析(一)-文件上传漏洞原理

    前言 文件上传漏洞(File Upload Vulnerability)是一种常见的 Web 应用程序漏洞,通常存在于需要用户上传文件的应用程序中,如论坛.电子商务网站.博客.社交网站等.攻击者可以通 ...

  9. (php)泛微E-Office文件上传漏洞(原理分析+复现+批量检测)

    漏洞描述 泛微e-office是泛微旗下的一款标准协同移动办公平台. CNVD-2021-49104 由于 e-office 未能正确处理上传模块中的用户输入,攻击者可以通过该漏洞构造恶意的上传数据包 ...

最新文章

  1. 3检测人头_基于人头检测技术客流统计摄像头及管理平台
  2. spring中基于XML的AOP配置步骤
  3. c语言不安全库_为什么和其他语言相比C语言是快速的语言?
  4. spinner的理解
  5. 再谈VC++中ListControl排序[原创]
  6. JAVA Metrics 度量工具使用介绍
  7. MyCat分片规则之一致性hash分片
  8. 【第八周】程序设计方法学
  9. 给大佬递java表情_给大佬递茶表情包
  10. 关于基站定位及wifi定位
  11. 面试过阿里等互联网大公司,我知道了这些套路
  12. 新入职如何快速的熟悉项目
  13. 删除cookie删不掉的问题
  14. 银联支付前端页面跳转
  15. 中国人寿如何基于容器搭建金融PaaS云平台 1
  16. 物联网中你需要了解的ESP8266最基本的知识!
  17. 立此存照,万一哪天迈不过坎,回头看看
  18. “冷面杀手”王励勤赢了
  19. 西门子s5 通讯测试软件,几种常用的S5编程软件简要介绍
  20. Window10通过cmd终端实时查看log日志文件

热门文章

  1. 如何快速提取文件名称?
  2. 室内地图在哪些方面提升了我们的生活便利性?
  3. SVN server 服务端修改端口号
  4. shell脚本——sed编辑器
  5. 线段树——区间累加、区间累乘、区间求和
  6. 黑客帝国代码雨JS,支持中文
  7. java中的字符串排序
  8. SwitchResX for Mac 屏幕分辨率修改工具
  9. 北邮光纤通信技术光纤通信技术 阶段作业一
  10. jdk6(Jdk6 tls)