基本把代码的意思都写入注释中了,我之前博客写的,图可能不是太清晰,也可以去我之前博客看
1.Js绕过
直接function改成return true
稍微改一下就可以了
3.phtml上传绕过
这一关没什么可说的,算是钻了apahce的一个空子吧
简单的一个黑名单的方式,但是利用了apahce的解析
在http.conf文件的第403行,这里直接会把phtml文件当作php代码来执行,其实你在这后面加个.txt,他都能给你当作php来执行
5 大小写绕过
成功绕过,这种黑名单方式不是很好,,建议白名单
6 后缀加空格绕过
可以看到源代码中并没有对空格做限制,windows中一个特性,加一个空格他会自动给你删除掉,加空格并不影响上述文件的一系列操作
木马上传成功
7.后缀加点绕过
同样是windows的特性
http://192.168.1.4/upload-labs/upload/7.php.
已经上传成功了
在upload目录下看到的7.php其实是不带.的原因是在windows中的特性,把点取消了
:”DATA”
Windows特性,把后面的当作Io流了
上传成功
比如上传一个.php. .
那么第一步去这个名字,然后删除文件名末尾的点 变成”.php. “
然后函数strrchr 再去第一次出现的点,最后变成php点空格
然后在转为小写,然后在去字符串,变成php点空格,没影响,再首尾去空
又变成php.
变成了和上面一样的后缀加点的绕过方式。
想要成功这个需要一个小条件,一般会在拿到php版本的时候去测试
要先判断下save_path后面的上传路径是否可控
1.PHP 版本 < 5.3.4
2.php.ini 中 magic_quotes_gpc=off
满足上面的条件的时候php就是把%00当成结束符,后面的数据直接忽略
save_path可控,因此00截断即可。利用save_path=../upload/11.php%00
12.POST 00截断
改成加号的原因是+号在hex中是2b方便找到
改好就是这样的
其实这个content-type改不改是无所谓的,这个代码和11的区别就是get形和post的区别,GET请求中%00会被当做url解析最后成空,而在post请求中,他会把这个当作是字符串去执行。
13.图片马配合文件包含漏洞
先解读下代码的意思
然后这个要去通过文件包含漏洞去利用
先传一个gif
在通过文件包含去访问gif
http://192.168.1.4/upload-labs/include.php?file=/upload/1820200215212531.gif
使用菜刀成功连接
14.图片马配合文件包含2
这个上传绕过的方式和前面13的是一样的,有区别的地方是后端代码的不一样
这个后面上传的是一样的
上面的判断逻辑是这样的
15 exif_imagetype图片马绕过
方法和前面两个一样,唯一与众不同的就是上传的方式,用的是exif_imagetype的方式
上传的方式是一样的,但是代码区别很大
二次渲染之后,图片是被替换了的,可以看到这里用到了imagecreatefromjpeg
这个函数把你上传的图片二次渲染后生成新的图片,用winhex打开,可以看到图片的代码是不一样的,有一部分是没变的,另外一部分的代码是被改变了的,要把Php一句话写入到没改变的代码中,用winhex。
然后判断二次渲染中的图片内容中是否含有Php代码。
这样可能会出现条件竞争,比如在程序还没运行完,我们就先访问到了他在校验文件后缀是否合法的那个文件。
import requests
url = "http://127.0.0.1/upload-labs/upload/test.php"
while True:
html = requests.get(url)
if html.status_code == 200:
print("OK")
break
通过Burp不断发提交一句话木马的请求
这里可以通过Python脚本来实现不断访问Php马的页面
他这个upload路径没加/ 导致都传到根目录去了
直接上传图片马就行
代码写在前面了,先校验后缀,所以我们要先上传图片马,然后在对其条件竞争,可以通过上传.php.jpg的文件,条件竞争后,后有没被更改名字的,这个时候通过apahce的解析漏洞去找php.jpg的文件即可拿到shell
通过这样的方式也可以