靶场搭建
下载地址 :https://github.com/c0ny1/upload-labs
我这里是在小皮中搭建的
步骤下载压缩包 ,解压到小皮的www目录下,开启apache、mysql服务
直接访问
http://localhost/upload-labs-master/upload-labs-master/
第一关
查看源码,发现具有白名单限制,看看是前端还是后端
前端有一个checkfile()函数,删除即可,上传一句话木马
第二关
对源码进行分析,发现验证的上传文件的类型
对上传的文件做类型修改
第三关
通过对源代码的审计,发现设置了黑名单,过滤了 asp aspx php jsp后缀的文件
可以上传后缀为php5 文件
不过需要修改apache的httpd.conf 添加一些后缀名
AddType application/x-httpd-php .php .phtml .phps .php5 .pht
重启apache服务,上传后缀为php5的木马
第四关
还是先审计源代码,发现基本上能想到的后缀名都被过滤了,可以采用.htaccess文件进行绕过,
这个文件就是将上传的文件当作php文件进行处理
不过需要修改自己apache的http.conf文件 ,开启AllowOverride
先上传.htaccess文件,在上传一个图片马
第五关
还是先审计源代码, 这一关才真正给所有后缀名都给过滤了,想了还有,在网上看了看还有一个是.ini文件
php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞
创建一个.user.ini文件
意思是所有的php文件都自动包含5.jpg文件
创建一个5.jpg文件
上传这两个文件,使用蚁剑进行连接(需要修改php.ini响应时间)
还可以抓包修改后缀名 php. .(点空格点)
第六关
老样子,审计源代码,好像可以大小写绕过 strtolower()函数
构造.PhP
第七关
审计源代码,好像没有首尾去空,trim()函数
构造.php (空格) ,上传php文件,抓包修改后缀名
第八关
审计源代码,发现没有使用deldot()使用点号进行过滤
deldot(file_name); //删除文件名末尾的点
使用php.进行绕过
第九关
审计源代码,用php. .(点空格点)进行绕过
第十关
第九关的过滤方式
第十一关
审计源代码发现不存在双写验证过滤str_ireplace()函数
用双写进行绕过 .pphphp
第十二关
审计源代码发现限制只能上传jpg,png,gif后缀
白名单限制,最终文件的存放位置是以拼接的方式,可以使用%00截断,但需要php版本<5.3.4
,并且magic_quotes_gpc
关闭。
url中的%00十六进制就是0x00
get00截断
上传php文件,进行抓包修改
修改前
修改后
第十三关
十二关,十三关要求php版本小于5.3.4
这里借鉴大佬写的upload-labs靶场通关指南(12-13关) - 代码天地
第十四关
这一关要求上传图片马,
访问include.php检测图片马能否正常运行
上传图片马,打开图片获取连接、
也可以通过include.php进行访问
?file=upload/图片名称
第十五关
和十四关一样
第十六关
再采用十四关的方法,也不是不行,就是获取图片的信息比较慢
所以要打开phpstudy的【php_exif】模块,来加快图片马的读取
第十七关
二次渲染绕过 利用后端二次渲染需要找到渲染后的图片里面没有发生变化的Hex地方,添加一句话,通过文件包含漏洞执行一句话,用蚁剑进行连接
gif图
上传的文件进行渲染过后,进行下载,通过对前后两次文件的相同之处,确定此处没有被渲染,将一句话写在这里,用蚁剑进行连接(思路)
这里分享一个已经做好的绕过二次渲染的图片马 文件上传之二次渲染(专用图).zip - 蓝奏云
第十八关
十七关的gif直接上传,蚁剑直接连接
第十九关
这一关是属于条件竞争,但是上传的文件很快就会被删除,没办法使用蚁剑进行连接,
这里写了一个脚本可以保证一直上传,
import requests
url = "http://xxx.xxx.xxx.xxx/upload-labs/upload/19.php"
while True:
html = requests.get(url)
if html.status_code == 200:
print("OK")
break
第二十关
审计代码发现,只验证了后缀名,上传以后缀为jpg文件,抓包进行修改,放包