uploadlabs(1-18Pass)通关教程
uploadlabs在下载地址:https://github.com/c0ny1/upload-labs
通过uploadlabs靶场练习可以很好的掌握文件上传漏洞
环境:PHPstudy
Windows11
安装步骤:直接将uploadlabs解压后放在WWW目录下即可,然后直接访问
Pass-01
随便上传.php文件
提示文件后缀名错误,可以知道这里采取前端验证的方式
方法1:利用插件禁止JS脚本运行
方法2:F12找到JS脚本 然后删除
方法3:先将xxx.php 后缀名更改为xxx.jpg 通过了前端验证后再利用BP进行抓包 把后缀名更改回来
文件上传成功 可以通过区upload文件夹查看文件 也可以通过页面反馈查看
Pass-2
随意上传文件,可以看到没有前端提示 然后使用php对后端进行验证
这里是验证Content-type的类型 可以通过BP抓包后修改为image/jpeg
Pass-3
此关卡根据源码设置了黑名单 不允许上传.asp,.aspx,.php,.jsp后缀文件
可以利用文件的其他扩展名绕过上传
这里我想要上传一个'.php'后缀的文件,所以列举一些php文件的其他拓展名
.php .php5 .phpml .phps 等等
利用xxx.php5绕过上传
Pass-4
根据源码可以得到 黑名单把文件扩展名全部加上了,这个时候需要换一种方式
可以选择通过'.htaccess'文件进行绕过。
'.htaccess' 文件相当于一种部分配置文件,好比局部变量一样,只在当前目录生效。比如你设置解析'.txt'解析为'.php',
那么'.htaccess'文件在的子目录中就会执行,而上一级目录不执行。
创建'.htaccess'文件,然后在其中写入代码,使得文件在解析时将'.jpg'文件解析为'.php'文件,代码如下
在上传时我们只需要将文件后缀名改为'.jpg',访问时会自动被执行为'.php'文件
Pass-5
这关不能使用Pass-4的技巧了
上传抓包 然后在文件后缀名上增加上 . . (点空格点)
这一关的思路是它没有循环验证,也就是说这些收尾去空,删除末尾的点,去除字符串::$DATA,转换为小写这些东西只是验证了一次。所以我们的绕过思路就很简单,在数据包中把后缀名改为.php. .说一下他的验证过程,首先他发现有一个点,这时会把他去掉,又发现有一个空格,也会把它去掉,我们这时还有一个点,也就是.php. 由于他只是验证一次,所以不会在去掉我们的点,这时就可以上传成功,也可以解析成功。
Pass-6
这一关没有将大写强制转化为小写 可以将php写成PHP就可完成上传
Pass-7
直接看代码,发现没有收尾去空。上传php文件,抓包在后面加空格
Pass-8
第八关我们可以发现没有删除文件名末尾的点,和第七关思路一样,就是把空格换成点
Pass-9
可以看到源代码没有没有去除字符串::$DATA
而上传到服务器的文件在Windows中会自动去掉::$DATA
可以直接上传文件 然后BP抓包后在文件名后增加::$DATA
上传成功
Pass-10
第十关与第五关相同 抓包后再文件名后增加 点空格点
Pass-11
这一个关卡仍然是黑名单拦截 只要你的文件后缀名与黑名单中的内容吻合,那么就替换为字符串,这样文件就无法解析
只需要上传xxx.pphphp文件即可 或者利用bp进行修改
Pass-12
随便上传文件 看源码得知是白名单绕过 后续关卡也是这样 不过多赘述了
只允许上传'jpg','png','gif'格式的文件。但是上传路径是可以控制的,可以使用%00进行截断。%00只能用于php版本低于5.3的。这里我们需要把phpstudy切换一下版本,把magic_quotes_gpc关闭,以phpstudy为例。其他选项菜单---php扩展及设置---参数开关设置---把magic_quotes_gpc关闭
Pass-13
第十三关和第十二关是差不多的,只不过是接受值变成了post,她两的差别呢就是get会自行解码,post不会自行解码,我们需要对%00进行编码,选中%00右键
右击截断符号
然后就可以上传成功
Pass-14
第十四关是用图片+php代码,组成一个图片码进行上传,当然要想解析出来这个图片,还得有这个包含漏洞。我们看到,他已经说了,网站存在包含漏洞
首先制作一个图片码,可以直接用Notepad直接打开图片后面加一个php代码,但是需要16进制,要不然图片可能出错。
也可以cmd进行生成,命令语句:copy 14.jpg /b + 14.php /a webshell.jpg 如图所示,我们在上传这个生成后的图片。
访问include.php文件 file为参数 后面跟上upload/文件名
Pass-15 16
与Pass-14相同
但是16需要打开php_exif 去php.ini里面进行修改即可
Pass-17
需要了解函数 imagecreatefromjpeg() 返回一图像标识符,代表了从给定的文件名取得的图像
成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片马失败。按照原来的方法进行上传,我们可以发现还是可以上传的,但是配合包含漏洞却无法解析,这时我们把上传的图片复制下来用Notepad打开,发现我们原来写的php代码没有了,这就是二次渲染把我们里面的php代码删掉了。把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,配合包含漏洞,就可以了
Pass-18
第十八关主要是对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除
操作:直接上传一个php文件,然后进行抓包,将数据包发送至intruder下,如图操作
然后发包,用另一个浏览器一直访问18.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了。