一、文件上传防御手段及绕过手段总结
常用的防御方式和常用绕过手段
1、前端JS检测
客户端前端在JavaScript代码中加入了对扩展名的黑白名单检查。
攻击时可以直接禁用javasrcipt。
2、MIME检测
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。防御时服务器端对MIME类型进行严格验证,防止恶意文件上传。
服务端代码是通过Content-Type的值来判断文件的类型,攻击者可以直接对文件的Content-Type进行修改来绕过此防御方式。
3、白名单检测
要求只能是特定扩展名的文件才能上传。
攻击者可使用%00截断,在url中%00表示ascll码的0 ,而ascii码的0,表示字符串结束,所以当url中出现%00时就会认为读取已结束。(需满足php版本<5.3.4才有可能存在此漏洞)
黑名单绕过(使用扩展名黑名单来限制上传文件类型)
1、文件拓展名绕过
使用双重扩展名或伪装扩展名,让服务器错误地识别文件类型,从而执行恶意代码。
2、.htaccess文件绕过
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过上传或修改.htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
3、.user.ini.绕过
使用.user.ini文件修改PHP配置参数,达到绕过安全限制或执行恶意代码的目的。
4、apache解析漏洞
apache按从右到左的顺序识别文件后缀,直至找到后缀能匹配配置文件中的设置。遇到不能识别的后缀名便跳过。上传特殊命名的文件,使文件被错误地解析为可执行脚本。
5、IIS解析漏洞
利用IIS对文件扩展名的特殊解析方式,如双重扩展名,执行意外的脚本代码。
6、Nginx解析漏洞
利用Nginx特定配置下的文件解析规则,执行意外的代码或获取敏感信息。
7、widows系统文件命名规则的特殊利用
利用Windows对文件名中特定字符(如空格、点号)的处理方式,使文件被错误解析或执行。
二、文件上传常用一句话木马
定义:一句话木马(One-Line Shell)是一种非常简单、简短的恶意代码,通常被嵌入到目标服务器的文件中,以便攻击者获得对服务器的远程控制。
php的一句话木马:<?php @eval($_POST['pass']);?>
其中eval函数可以使php将post进去的内容当做代码处理,而pass为密码。
入侵:
- 创建文本文件输入一句话木马,修改文件后缀使之变为php文件,将其上传到需要被入侵的网站。
- 打开蚁剑或者菜刀,新建或者添加,填入网址和密码等数据,开启代理连接被入侵的网站。
- 连接成功后,可访问网站对应的服务器,在其中可找到想要的数据。
三、三种webshell管理工具的使用方法
1、哥斯拉godzilla
(1)点击管理-->生成(木马),注意选择php类型,其次设置密码密钥
(2)将生成的木马文件(mm.php)上传到upload靶场文件
意外:我的电脑会查杀木马文件,可以通过设置-->隐私和安全性-->windows安全中心-->病毒和威胁防护-->“病毒和威胁防护”设置-->添加排除项保护文件
(3)点击目标添加进行基础配置,注意url,密码,密钥,点击测试,显示成功则点击添加
(4)点击进入
(5)burpsuite的抓包记录
2、冰蝎behinder
(1)添加排除项保护behinder文件再将压缩包解压进去,点击打开,设置如下的传输协议,生成服务端
(2)将上一步生成的shell.php上传到upload靶场
(3)设置代理并启用,新增shell
(4)双击新生成的数据,打开burpsuite抓包成功
3、蚁剑
初始化时,代码解压出错
解决方法:关闭实时保护,右键.exe文件以管理员身份运行再次初始化即可
(1)点击.exe文件打开蚁剑,右键点击空白页,添加数据
(2)输入对应的url和连接密码点击测试,测试成功
(3)设置如下的代理,再测试连接成功
(4)双击数据连接,进入可查看靶场内被上传的文件
四、文件上传无回显如何查找webshell地址
1、查找上传目录
许多网站的上传目录遵循一定的路径结构,尝试通过常见上传目录进行推测,比如/uploads/、/upload/、/files/、/images/等。
2、查 Web 服务器日志
有时候,上传的文件可能成功,但无法通过常规路径找到。这时可以通过检查Web服务器日志来确定Webshell的上传路径和请求地址。
Apache日志一般存放路径:
/var/log/apache2/access.log或者/var/log/httpd/access_log
Nginx 日志:一般在 /var/log/nginx/access.log
3、猜测常见的Webshell文件名
如果使用了常见的Webshel文件名,如shell.php、webshell.php或带有随机字符的文件名,尝试通过猜测url直接访问这些文件。
4、网络爬虫和扫描工具
使用网络爬虫工具如Burp Suite的爬虫功能,扫描可能存在的 Webshell 文件路径
五、文件上传表单的无参/有参情况下构造表单
1、无参情况下的文件上传表单
无参的文件上传表单:文件上传请求不需要额外的参数,只上传文件即可。适用于简单的文件上传功能,无需额外的信息(例如,文件描述或用户身份验证)。
构建表单示例:
Action:指定上传请求的目标url。
method="post":文件上传使用POST方法。
enctype="multipart/form-data”:指定表单的编码类型multipart/form-data。
2、有参情况下的文件上传表单
有参的文件上传表单:除了上传文件外,还需要提交额外的参数,比如文件描述、用户ID、Token 等。适用于带有身份验证和权限管理的上传系统。
构建表单示例:
input type="file": 文件选择框,用户通过该表单字段选择需要上传的文件。
input type="text":额外的参数字段,用于提交用户名、文件描述等信息。
input type="hidden":隐藏字段,用于传递身份验证 Token 或其他后端必需的参数。
input type="file":文件选择框,用于文件上传。
六、upload-labs靶场通关第6-第10关
搭建靶场
1、下载upload-lab-master压缩包https://github.com/c0ny1/upload-labs并解压到phpstudy_pro的www文件下
2、开启apache进入127.0.0.1/upload-labs-master/(靶场网址)即可
解决burpsuite扫描不到upload靶场的问题
(1)关闭burpsuite之前设置拦截的端口3333
(2)在phpstudy上新建如下的网站
(3)火狐浏览器设置如下的网络代理(保证端口与proxy listeners上设置的一样)
(4)输入网址http://127.0.0.1:8081/upload-labs-master/将127.0.0.1换成自己的内网网址
(5)回到burpsuite发现可抓包靶场信息
靶场通关
Pass6(大小写绕过)
1、查看提示,再查看源代码,发现本关对文件后缀的大小写并不敏感
2、尝试大小写绕过的方式,先在网站上上传文件,再使用bp抓包,修改文件名后缀为.PHp点击forward重发,上传成功。
Pass7(空白格绕过)
(1)首先查看源代码发现,缺少对首尾去空的约束
(2)先在网站上上传文件,再使用bp抓包,在文件名后加上英文空格,点击forward重发,上传成功。
Pass8(.绕过)
(1)查看提示和源码发现本关对上传的文件后缀名未做去点.的操作,而在Windows系统下,文件后缀名最后一个点会被自动去除。
(2)先在网站上上传文件,再使用bp抓包,在文件名后加.,点击forward重发,上传成功。
Pass9(数据流属性绕过)
(1)查看源代码发现本关对上传的文件后缀名未做去::$DATA处理。
Windows系统下,如果上传的文件名为test.php::$DATA会在服务器上生成一个test.php的文件,其内容和所上传文件内容相同并被解析。
(2)先在网站上上传文件,再使用bp抓包,在文件名后加::$DATA,点击forward重发,上传成功。
Pass10
(1)查看源代码发现之前的方法全被禁用,但这种禁止不是循环过滤的,尝试点、空白格等组合绕过。
(2)先在网站上上传文件,再使用bp抓包,在文件名后加.. .,点击forward重发,上传成功。