upload-labs 1-20关练习

php字符串函数:

strrchr函数:
    echo strrchr("I love Shanghai!","Shanghai");
    查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
strtolower函数:
    将字符串中的字母全部转换为小写
str_ireplace函数:
    替换字符串
    $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
trim函数:
    首尾去除空格
    trim($file_ext)

第一关:绕过前端JS限制

漏洞概要:只在网页前端JS脚本中判断文件类型,后端php没有做任何处理

思路1:
绕过前端JS即可,关键是这个action的页面
通过上传一张正常的图片,抓包获取post的目标php文件的路径

upload-labs 1-20关练习_第1张图片

upload-labs 1-20关练习_第2张图片

思路2:最快的方法是先上传一个后缀为Jpg的一句话木马,通过burp抓包修改后缀为php即可


 
第二关:修改MIME类型

漏洞概要:后端php只对上传来的文件Content-type做了判断
思路:修改MIME类型为image/jpeg即可绕过上传

upload-labs 1-20关练习_第3张图片


第三关:黑名单绕过

漏洞概要:黑名单过滤的方式及其不安全,容易出现没有过滤全面的后缀导致文件被php解析运行
思路:批量fuzz后缀名上传文件,比如.cer,phtml,等等偏僻的后缀都有可能被解析运行,这里靶站是用phpstudy环境搭建的,默认是不会解析php3和phtml后缀的,需要添加才能部署完整的第三关环境
php可解析的文件名后缀在httpd.confi配置文件中标注

upload-labs 1-20关练习_第4张图片

 

AddType application/x-httpd-php .php .phtml .php3 .sadphp

以上后缀都可以被php解析
upload-labs 1-20关练习_第5张图片

 


 
第四关:黑名单绕过

漏洞概要:和上关一样,不同的是这里的黑名单更多了一些,不过没有过滤.htaccess后缀
思路:上传.htacess文件,后上传php文件后缀任意,都可以被php解析执行

这次过滤了一大堆后缀 我看了是一脸懵 看人家写的教程说是没有过滤.htaccess后缀
htaccess百度说是一个apache服务器的配置文件,看来这个时候如果目标服务器是apache的网站就可以考虑传这个文件~
htaccess文件内容

SetHandler application/x-httpd-php

一些有趣的东西:
有一个关键的问题,需要手动去burp里修改一下上传.htaccess文件名称,因为windows是不允许直接命名这种类型的文件,
可是可以通过上传,上传到windows系统的电脑中,或者命令行的方式修改,有点奇怪,而且这种文件名带点的文件也不是隐藏的文件
upload-labs 1-20关练习_第6张图片

手动直接修改:不允许修改

upload-labs 1-20关练习_第7张图片

命令行修改:修改成功

upload-labs 1-20关练习_第8张图片
 

再之后上传任意文件都可以解析成php文件

upload-labs 1-20关练习_第9张图片


比如gif等等其他的随便后缀



第五关:黑名单模式过滤
漏洞概要:过滤htaccess后缀,但是没有过滤php全部的大小写,使用后缀pHp即可绕过上传
使用phP后缀绕过上传
upload-labs 1-20关练习_第10张图片

 这里还有一种绕过方式,修改.htaccess的大小写方式,也可以绕过,而且apache可以正常解析该配置文件
upload-labs 1-20关练习_第11张图片

第六关:黑名单过滤,没有对后缀去空处理

漏洞概要:在判断后缀名的时候没有先去除多余的空格
思路:后缀名后添加空格即可绕过后端php脚本的检测,再上传到windows服务器上,会自动去除后缀名后的空格。

后缀名后添加空格即可绕过
upload-labs 1-20关练习_第12张图片


 

第七关:黑名单过滤,没有过滤点
根据windows系统特性会自动忽略最后一个点,添加点即可绕过后端的php检测,而且可以正常解析
upload-labs 1-20关练习_第13张图片

 第八关:黑名单过滤,没有过滤::$DATA
upload-labs 1-20关练习_第14张图片

 第九关:黑名单过滤,注意第15行和之前不太一样,路径拼接的是处理后的文件名,于是构造sad.php. . (点+空格+点),经过处理后,文件名变成sad.php.,即可绕过。
upload-labs 1-20关练习_第15张图片
第十关:黑名单过滤法,替换文件后缀名为空
upload-labs 1-20关练习_第16张图片

check.pphphp 替换后为 check.php,利用的主要是这个函数替换字符串的时候是根据完整的php来替换的,写成check.pphhpp这样的名字传到服务器上都不会被替换,而必须是php这三个字符串相邻才会被替换,比如上面的p[php]hp,括号中的php就被替换成空了,刚好剩下的p和hp组成新的后缀名即check.php
 

第十一关:get的00截断
upload-labs 1-20关练习_第17张图片

 根据文件路径做了一个00截断,../upload/1.php%00check.jpg
../upload/1.php%00check.jpg 截断后变成../upload/1.php 即可

00截断的操作环境需magic_quotes_gpc为off状态
第十二关:post的00截断

post是不会自动解析的,需要用二进制的方式去修改

upload-labs 1-20关练习_第18张图片

第十三关:图片马
源码中只判断了上传文件的前两个字节
图片马需要利用文件包含漏洞才能执行
制作方式:
1.命令行方式

copy normal.jpg /b + shell.php /a webshell.jpg 


2.手动使用二进制编辑软件,比如winhex,010,ue
Gif头:GIF89a

文件包含源码:

上传成功
upload-labs 1-20关练习_第19张图片

第十四关:图片马
直接上传上关制作的一句话图片马即可,关键的一点是网上的Upload-labs通过手册等等都没有提到如何去获取上传后图片的文件名,本菜鸟也不知道怎么获取到,可能只是侧重于上传成功而已吧..但是有什么用呢,没有文件包含漏洞仍然不会被解析执行
第十五关:php内置函数获取图片类型-exif_imagetype 环境需要开启php_exit模块
exif_imagetype()
 读取一个图像的第一个字节并检查其签名。
如果函数出现报错:Fatal error: Call to undefined function exif_imagetype() in E:\phpstudy\PHPTutorial\WWW\upload-labs\demofor15.php on line 3
则需要去php.ini路径中将

extension=php_mbstring.dll
extension=php_exif.dll

第二行前面的注释去掉,重启服务器即可
我写的一个关于exif_imagetype函数的小demo
 

运行下看看,首先是一张正常的图片
http://127.0.0.1/upload-labs/demofor15.php?filename=11.png
upload-labs 1-20关练习_第20张图片

执行结果:
upload-labs 1-20关练习_第21张图片

 再试试这个一句话的图片马试试
图片马:

upload-labs 1-20关练习_第22张图片

 检测结果:
upload-labs 1-20关练习_第23张图片

 太弟弟了,这个函数原理是检测文件的第一个字节和签名,签名是什么东西我不太懂~
 

你可能感兴趣的:(ISCC,CTF,Upload-labs)