Pass-11双写绕过
代码编写过程中,只对黑名单中的内容进行空替换,因为只替换一次所以造成双写绕过。
直接将php文件后缀名修改为 pphphp
Pass-12GET型00截断
00截断原:0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。
在PHP5.3之后的版本中完全修复了00截断。并且00截断受限与GPC ,addslashes函数。
GET型提交的内容会被自动进行URL解码。 注意: 一定要关闭GPC,否则无法成功。
Pass-13POST型00截断
在POST请求中, %00不会被自动解码,需要在16进制中进行修改00.
Pass-14在服务端的PHP代码中,对于用户上传的文件做文件类型检查,查看文件格式是否符合上传规范。可以检 查文件二进制格式的前几个字节,从而判断文件类型是否正确。
针对这种情况可以直接新建要给1.jpg,其中代码内容如下
GIF98A
copy 1.jpg/b+2.php/a 3.jpg 将图片和php文件合并成新的jpg文件
直接上传
在PHP中,使用include、 require、 include_once、 require_once函数包含的文件都会被当作PHP代码执行, 无论文件的名称是什么,只要符合文件内容符合PHP代码规范,都会被当作PHP代码执行。
Pass-15和Pass-14一样的方式即可
Pass-16二次渲染
先找一个可以上传的图片,再下载下来利用emeditor和原图对比,白色的地方就是没有渲染的,再将php文件和原图合并生成新的图片文件再使用emeditor打开拿到php代码的16进制,然后再复制到原图上未被渲染的地方保存上传即可,下来我们就一步步操作;
老版的upload靶场(如果新版的16关打不开就使用老版的,老版的只有20关)
链接:https://pan.baidu.com/s/1rsvq_YCMGNxMRQNlbJTCwg?pwd=lszn
提取码:lszn
所需的图片和工具
链接:https://pan.baidu.com/s/168-aJZpCw7z9dy8dnOhGtg?pwd=pce5
提取码:pce5
1、网上找的原图上传
2、再将上传的图片下载下来
3、使用emeditor工具进行对比,白色的就是没有被渲染的;
4、编写phpinfo与原图合并;
5、再使用emeditor工具打开,复制16进制的phpinfo代码;
6、使用emeditor将16进制的php代码复制到原图中保存;
7、上传使用包含文件访问即可;
Pass-17关与Pass-16关一样的方式即可;
Pass-18竞争上传
网站逻辑:
1、网站允许上传任意文件,然后检查上传文件是否包含Webshell,如果包含删除该文件。
2、网站允许上传任意文件,但是如果不是指定类型,那么使用unlink删除文件。
在删除之前访问上传的php文件,从而执行上传文件中的php代码。
例如:上传文件代码如下
' phpinfo(); ?>'); ?>
竞争条件文件上传利用
提前不断访问代码文件,然后上传,最终使用蚁剑连接一句话Webshell
这一关我就不演示了,需要不停的上传直到竞争成功,后期用python写个脚本或者使用bp执行;
Pass-19 将php文件改为jpg文件上传利用include包含执行即可
Pass-20 将php文件改为jpg文件上传利用include包含执行即可,与19关不同的是上传的文件位置不同,执行的时候需要注意;
Pass-21 与20关相同
补充一个黑名单验证,.user.ini绕过
.htaccess也给过滤了,但没有过滤 .user.ini 文件;
先上传一个以auto_prepend_file=1.gif为内容的.user.ini文件【用户自定义的配置文件】。.user.ini文件里的意思是:所有的php文件都自动包含1.gif文件,.user.ini相当于一个用户自定义的php.ini。然后再上传一个内容为一句话木马的命名为1.gif的文件。上传成功之后,用webshell管理工具添加该图片的路径,但该图片名改为当前目录下的php文件,例如readme.php,输入密码连接成功。