文件上传,内容逻辑数组绕过(22)

uploadd  第十三关

这一关告诉我们的,有一些上传漏洞需要配合这个文件包含和加解密。

这个先在一个图片源码里面写入php后门的脚本代码

这里也可以手工注入到图片的源码里面来,手工注入,如果采用16进制打开这个图片,这个图片在生成保存的时候,就不会出问题,否则会无法正常打开。

之后就把那个带有两个源码的jpg文件上传上去,打开图片的地址,想执行后门代码,需要利用到文件包含漏洞,文件包含漏洞会直接将包含的文件以后门的格式去执行,以当前文件包含的脚本去执行,因为是php,就会放到php去执行。我们打开文件包含地址

 接受file的参数给变量file,再用include去包含变量file,在这里我们就可以复制这个地址,然后写上参数,?file=,就等于我们刚刚上传的图片的地址/upload/8020230514105109.png,被包含之后png里面的php脚本代码就会被执行,

这个没有写php后门脚本,随便写一个php的脚本,没有密码需要,如果是后门文件的话,需要输入密码执行

13.14.15.16关都运用到了文件包含漏洞,只是代码有一些不同,我们看一下13关的代码, 这个是头部验证,每一个格式都有自己特有的头部,比如jpg格式

 所有的png格式都是这个东西,别的格式也有别的特有的头部。通过判断文件头来判断是什么格式,但这个可以通过后期的伪造,为造出来其他格式。

第十四关

第十四关的代码验证用的另一种方式,

 这里用到了getimagesize函数,这个函数运是获取到图片里面的信息,而如果不是图片格式的话就没有返回值,就不能执行后面的代码,这个就限制了文件的类型,只能上传图像,排除解析漏洞和其他漏洞,只能配合别的漏洞去执行。

第十六关

 exif_imagetype

  这个代码就是获取到,获取图片的类型,所以这个函数也差不多就只会获取图片格式的信息,获取别的就没有返回值,就不会执行下面上传代码。所以就只能上传图片。这个代码就已经相当安全了。

第十六关,

代码也是判断图片类型,不过是一个格式,一个格式去判断的看,jpg,jpeg,也是检测文件信息的,这个代码是相当安全的。

过关的话就配合文件包含漏洞。

之后又开始一个重点

第十七关,

就没有配合漏洞了,第十七关涉及到的漏洞是二次渲染,

二次渲染是,在文件上传的时候有的网站,会先有一个缩小的图片的叫浓缩图或者拓展图,下面还会有保存或者删除类似的按钮,这种一般就涉及到二次渲染,先上传到服务器,这个服务器会有保存或者删除这个操作,这个就相当于在中间停了一下,让你选择保存或者删除,每个图片的规格都不一样,有大有小,有一些网站为了图片在页面中显示正常,会把你头像先截取然后按照他的规格来保存。   

二次渲染的过程中会涉及到一个叫逻辑安全的问题,上传第一次的时候渲染到截取对方,对方服务器已经有了,就是他验证的地方是在第一步还是第二部。

我们看一下十七关的代码,

这个代码意思第三行接受鼠标提交事件

 第四行截取jpg,png,gif,等等

第五行,在这个文件上传中取他的名字

第六行,把文件的后缀取出来给变量file_ext,后门十一行就直接用move_uploaded_file,去移动文件了把tmp_file,移动到变量upload_file上来了, 第八行就是他声明的路径uoload_path,加上 .  /  加上名字,没有验证,就直接移动到了指定目录去了,下面才开始验证是否保存。

这个是存在二次渲染的逻辑漏洞,这个在验证之前就已经把文件放到目录去了。这个代码还有一个重命名,所以到了之后也找不到自己上传的文件,绕过的方法运用到了资源占用,就是在上传的时候,刚好到文件夹里面还没有命名之前访问到,代码就没办法对他重命名了,也叫文件竞争。

用十八关演示一下,

因为前面没有验证,直接上传一个php的文件,然后burp抓住数据包, 然后选择一个可以修改的且没事的作为可修改字节,然后重复上传数据包,这时候就打开网站一直访问上传的php文件,知道出现图中这个界面,就是访问到了,只要我们访问到了,我们就上传成功了!他不能在后面修改它。

网站有二次上传的时候就要多观察,判定符不符合二次渲染。这一关漏洞的原因是因为直接把文件放了进去,在第二步才做的验证。

第十九关

第十九关是黑名单验证,文件夹绕过,十九关源码

这个源码的黑名单验证啥都的就不说了,直接说重点,十三行代码把临时文件temp的信息转移到img来,十二行代码是img等于upload_path目录加上/和file的名字,file的名字是七行等于post提交的save的值,也就是说file的名字值我们是可以控制的,这一关可以有两种方法绕过,第一个看着文件名,我们看一下数据包,就有一个叫save name

利用这个绕过漏洞

把save值修改成php.%00.jpg,因为是post提交方法,不会自动解码,所以%00要url编码一下上传,不然对方服务器网站识别不出来它截断的意思,因为截断了最后到文件夹里面的就只剩下php。

第二种方法

我们同样抓包看一下save的值,然后通过的源码的分析,

如果这个文件名字后门还有/.  ,验证的时候当作php/.   ,就会绕过验证上传,然后到文件夹里面也会被强制为php文件,就会以正常php文件解读,那怎么利用就在数据包里面修改

就修改成跟箭头指的一样的值就可以。文件就会上传成功,还是php文件。

这个就是未造成与一个文件夹的情况,他会以为是在

upload-19.php这个文件下面上传一个点,但是系统接受这个值也会会把php的那个当作文件来处理。

第二十关,先看一下源码 

这里运用到了数组接受+目录命名绕过。

第四行哪里写了是检测mime值的

第十行接受文件名(save name值)来检查测的,跟十九关相比多了一个十一行,is_array,判断是是一个数组,是数组就执行,

第十六行是个类型检测,检测上传类型,是一个白名单类型。jpg等格式不在截取的变量ext里面,变量ext从上面第十五行来的,end是截取文件最后的东西,接受截取的后缀,然后就去判断后缀是否在白名单里面,因为十六行前面是给感叹号是不在的时候,不在就截止了,在里面就进入下一个检测。

二十行变量file-name等于reset接受获取变量file前面的,文件名,中间跟个.  ,然后加上后面的后缀,变量file【count(变量file)-1】,

上图做个比方,xiaodi。jpg,数组话就分为  xiaodi    。   jpg 三个数组,假如数组名字叫x,数组0就是xiaodi,数组2。,数组2就是jpg,这里有三个数组,所以count(变量fiel)等于3,3-1=2,所以是变量file的第三个数组,就是后缀名。就是等于他们三个合在一起。

在后面的验证就在十九关出现过了,临时文件temp指向img,img是upload/变量file的文件目录组合,就是正常的文件上传验证了。   

这一关分为几个严重呢,第一个是mime的验证,这个在数据包里面改成白名单相关的进行了,

第二个是is-arryr判断是不是数组,是数组在进行后门的验证,不是数组就跳过了。然后下面的验证刚刚说了。

来试着绕过一下,我们上传一个php的文件,先抓住数据包,在save值哪里修改为,加上/.   ,看看提示是上面,绕过到哪一步了,提示的是禁止上传改后缀文件,在十七行哪里被拦截了,因为他是白名单,文件名格式必须的是白名单里面才行。

我们上传一个正常的文件,在数据包里面save的值是这个

 如果我们这样写upload/upload-20.php/.jpg,这个格式验证的是最好jpg,而上去的还是php的文件,,利用的目录文件,网站会以为是在php里面写入.jpg。

绕过开始,我们上传一个带有php脚本的图片格式文件,

然后把抓住的数据包源码修改成这样,变成数组的形式,检查的检查的最后一个数组加上jpg白名单刚好可以绕过去,看结果

这个样子文件上传成功,最好是php后面加上一个斜杠,这个我写早了,这个上传成功1了。

php文件。

这个代码里面支持数组。

实战情况下,很难绕过这种情况的网站,是碰不到这种情况,我们只能在代码中这样做,我们实战看不到代码,只能一个一个试试,这种只会在比赛中出现,会给一些代码去做。

我们再来说一下文件上传的漏洞,

tmocat方法任意写文件漏洞

文件上传的漏洞不只是程序里面的漏洞,也会爆出类似cve的漏洞,是一些上传环境里面的辅助漏洞,我们举个例子

tomcat任意上传漏洞,tomcat是一个搭建平台,上传漏洞不仅在网站层面上,之前演示的漏洞但是代码层面的,这个就不是

他是网站搭建的时候,漏洞也会在中间件层面,就是搭建件。

这也是为什么思维导图构造,验证和绕过是代码层面的,所以cve不在验证和绕过里面,而cve在漏洞修复里面,它属于其他层面和代码没有任何关系。

打开靶场环境

 打开好啦,根据网页上的打开靶场网站

这个这里会有一个共同的疑问怎么知道这个搭建件和版本,这时候中间件信息收集,用nmap扫,端口扫描都可以扫出来,或者网站的源码返回看看

现在如何利用这个漏洞,访问直接抓数据包

靶场提示

 复制这串代码,该修改的对方修改为网站的参数,下面那个shell是可以自定义的时候,就是写入的字符串,这时候我们写入一个jsp的后门,就可以获取到网站的数据,直接去网上搜jsp后门

 这样子上传上去之后,访问这个1.jsp,然后根据搜的后门访问方式去访问

 成功了。

解析漏洞

他也是中间件上面的漏洞,但是他的漏洞形成不同,它是属于解析上面的一个绕过,

主要有这三种iis,apache,nginx,

演示一下,老师打开自己找到的测试网站  iis6.0

 这里老师注入好了,获取账号密码就不管了,只演示网站的文件上传

 这里用burp抓包,这个是很安全。

这个有解析漏洞比如img/qq.jsp正常jsp执行

img.asp/qq.jsp会被当作asp执行。

文件夹img.jsp当作jsp执行

img.asp;img.jsp,也会当作asp执行。

我在数据包里面

 后面的命名规则是不变的,如果我们在前面加上/x.asp;,  

 上传成功了,然后因为这个网站有解析漏洞的原因会解析成asp文件,我们访问一下这个网站

 就以asp执行了,这里没有写asp代码,所以解析为这样子,真实情况写个asp代码就行了。

这个解析漏洞给解析为asp,有解析漏洞才可以。

在演示一下apache

Nginx越界读取缓存漏洞(CVE-2017-7529)

在unbtun里面,搭建好靶场环境,打开靶场

 右键查看元素,然后网络所有重新加载,然后在哪里看到了中间件是nginx1.23.4版本

 点文件上传,上传一个带有php代码的图片格式文件,然后复制网址访问的时候后面加上给/1.php在去访问就解析成php文件了,执行成功。

 这个漏洞也是解析漏洞。

这里说一下,之前讲sql注入的时候要判断数据库类型版本,提交方法,参数类型。

那碰到文件上传呢,先判断二次渲染,是不是经过两次,猜对方是上面验证都猜完还没有,之后再看中间件,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值