题目是上传文件
直接上传muma.jpg还不成功:
好吧,那做一个图片马上去,换马以后发现还是不行,呃啊啊啊啊
干啥啥不行,搜wp第一名,哎
新面孔:exif_imagetype
函数在 PHP 中用于检测一个文件是否为有效的图像文件,并返回该图像的类型。如果函数返回false
或者不是预期的图像类型,通常意味着文件不是图像文件或者文件损坏。
exif_imagetype()函数会读取图像的第一个字节,并检查其签名,如果发现了恰当的签名则会返回相应的常量,否则返回false ,我们可以在一句话木马前面加上一个GIF图片文件头前缀GIF89a进行绕过,让函数误认为我们是合法的后缀
所以需要在一句话木马前面加上GIF89a(GIF图片文件头前缀,让这个函数误以为我们是合法后缀)png:塒NG | .gif:GIF89a | .jpg:塒NG
好歹是绕过了,接下来就该传.htaccess了
.htaccess类型还是不对,不要紧,在他前面加个GIF89a不就好了吗
居然连不上,考!
再次看wp
正常想到的是.htaccess,但是这个服务器是nginx,而.htaccess是针对apache的
所以引入一个php目录配置文件 .user.ini
它比.htaccess
用的更广,不管是nginx/apache/IIS,只要是在使用 CGI/FastCGI 模式的服务器上都可以使用.user.ini
在 PHP 环境里,.user.ini
文件是一种用户自定义的配置文件,它能够为特定目录及其子目录下的 PHP 脚本提供个性化的配置选项。
auto_prepend_file
是 PHP 的一个配置指令,其作用是指定一个文件,在执行每个 PHP 脚本之前,PHP 解释器会自动将这个指定文件的内容包含进来并执行。也就是说,当设置 auto_prepend_file = muma.jpg
后,PHP 会尝试在执行任何 PHP 脚本之前,先包含并执行 muma.jpg
文件的内容。
内容:GIF89a
auto_prepend_file=muma.jpg
我们指定一个文件(如a.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:require(./a.jpg);
这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()
时该设置无效)
新建了个 .user.ini 文件,但怎么写也写不进去,抓包内容都是空的
那就直接在包里面写,反正Content-Type也要改
该有的都有了,开始连蚁剑:
注意这里用蚁剑连接不是连 muma.jpg,而是index.php
连接成功,拿到flag
其他不用蚁剑手动POST的技巧:
uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=var_dump(scandir("/"));
// 扫描当前目录下的文件,并打印出来
uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=system('cat /flag');
uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=var_dump(file_get_contents("/flag"));