upload-labs通关记录
1.Pass-01
-
原理 客户端检测,仅仅通过使用JavaScript来拒绝非法文件上传。 -
攻击过程 上传一个1.jpg文件,使用burp将.jpg修改为.php # 1.jpg
<?php
phpinfo();
?>
?上传成功后,访问图片地址
2.Pass-02(MIME验证)
-
原理 MIME类型用来设定某种扩展名文件的打开方式,当具有该扩展名的文件被访问时,浏览器会自动使用指定的应用程序来打开。 -
攻击过程 上传1.php ,因为服务器会检测Content-Type的值,所以修改为image/jpeg ? 上传成功后访问地址 ?
3.Pass-03(黑名单验证,特殊后缀)
-
原理 黑名单过滤是一种不安全的方式,黑名单定义了一系列不安全的扩展名,服务器端在接收文件后,与黑名单扩展名进行对比,如果发现文件扩展名与黑名单里的扩展名匹配,则认为文件不合法。 -
攻击过程 上传1.php 文件,通过burp 修改文件后缀为.php3 ? 上传成功后,复制图片地址,并访问,发现图片做了重命名 注:这一关有条件,httpd.conf需要配置AddType ,不然会出现无法解析的情况
#修改httpd.conf AddType
AddType application/x-httpd-php .php .phtml .php5 .php3
AddType指令是在给定的文件扩展名与特定的内容类型之间建立映射关系。
AddType是与类型表相关的,描述的是扩展名与文件类型之间的关系。
4.Pass-04(黑名单验证,.htaccess)
-
原理 # .htaccess
.htaccess文件是Apache服务器中的一个配置文件,可以实现网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。
注: .htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。
# .htaccess 文件内容
SetHandler application/x-httpd-php
-
攻击过程 上传.htaccess 文件,然后再上传4.png图片,上传成功后,复制图片地址,访问
? 注:访问图片地址可能会遇到不能解析的情况,需要修改httpd.conf
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride all #将None改为all
Require all granted
</Directory>
5.Pass-05(黑名单验证,.user.ini)
-
原理 # .user.ini
自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用.htaccess 文件有同样效果。
#编写.user.ini文件
auto_prepend_file=5.jpg #所有的php文件都自动包含5.jpg文件
-
攻击过程 这一关服务器Server API 需要使用CGI/FastCGI ,先上传.user.ini,然后再上传5.jpg,后面访问5.jpg发现发生错误 因为原理是所有的php文件都自动包含5.jpg ,所以可以访问上传目录下的readme.php(本关一开始就存在的文件) readme.php 文件
6.Pass-06(黑名单验证,大小写绕过)
7.Pass-07(空格绕过)
8.Pass-08(windows特性加点绕过)
9.Pass-09(::$DATA绕过)
-
原理 在window的时候如果文件名+’::
D
A
T
A
′
会
把
:
:
DATA'会把::
DATA′会把::DATA之后的数据当成文件流处理,不会检测后缀名。且保留::
D
A
T
A
之
前
的
文
件
名
。
利
用
w
i
n
d
o
w
s
特
性
,
可
在
后
缀
名
中
加
:
:
DATA之前的文件名。利用windows特性,可在后缀名中加::
DATA之前的文件名。利用windows特性,可在后缀名中加::DATA绕过 -
攻击过程 使用burp修改文件后缀1.php::$DATA ? 访问的时候需要去掉::$DATA
10.Pass-10(点空点绕过)
11.Pass-11(双写绕过)
12.Pass-12(GET请求00截断)
# 00截断使用条件
php版本低于5.3,且magic_quotes_gpc关闭状态
phpstudy可以方便的更改,没有找到的可以去php.ini里修改
13.Pass-13(Post请求00截断)
14.Pass-14(图片码绕过)
15.Pass-15(图片码绕过)
16.Pass-16(图片码绕过)
17.Pass-17(二次渲染)
18.Pass-18(条件竞争)
import requests
def main():
i=0
while True:
try:
print(i,end='\r')
a=requests.get("http://192.168.184.131/upload-labs/upload/1.php")
if "PHP Version" in a.text:
print("OK")
break
except Exception as e:
pass
i+=1
if __name__ == '__main__':
main()
19.Pass-19(图片码配合包含漏洞)
20.Pass-20(/.绕过)
21.Pass-21(数组绕过)
-
原理 会判断文件名是否是array数组(jpg,png,gif),不是的话会分割文件名和后缀名再进行白名单验证。 -
攻击过程 使用burpsuit修改数据包 ? 复制图片链接访问 ?
|