Catalog
  1. 1. jboss反序列化漏洞
  2. 2. 环境
    1. 2.1. 操作系统
    2. 2.2. 编译器
    3. 2.3. Python版本
  3. 3. 代码分析
    1. 3.1. 批量在网址后面添加路径
    2. 3.2. 批量验证
    3. 3.3. getshell
批量验证jboss

根据师兄们的思路和代码自己小改的代码。

jboss反序列化漏洞

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
复现可以参考博客:https://www.cnblogs.com/Hi-blog/p/7904443.html

环境

操作系统

操作系统 Windows10

编译器

pycharm

Python版本

Python3

代码分析

两个函数吧,有些还是从网上抄来用的,还不是很理解。

批量在网址后面添加路径

1
2
3
4
5
6
7
8
9
10
11
def tianjia():
file = open("D:/python源码/shodan爬虫.txt", "r", newline='\r\n') # 打开爬虫文本
newfile = open("D:/python源码/shodan爬虫添加.txt", 'w', ) # 创建添加路径后写入的文本
while True:
lines = file.readlines(100000) # 依次读取每行
if not lines:
break
for line in lines:
newfile.write(line.replace('\r\n', u'/invoker/readonly\r\n')) # 在每行后面添加/invoker/readonly
file.close() # 关闭文本
newfile.close() # 关闭文本

批量验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def yanzheng():
result = [] # 创建一个result的list集合
with open('D:/python源码/shodan爬虫添加.txt', 'r') as f:
for line in f:
result.append(list(line.strip('\n').split(','))) # 读取每行将每一行放入result集合里面
for i, a in enumerate(result):
if (i + 1) % 2 != 0:
url = a[0]
NETWORK_STATUS = True # 创建一个NETWORK_STATUS初始状态为ture
try:
r = requests.get(url) # 利用request模块get请求到网址
zt = r.status_code # 读取request返还的网页状态
except requests.exceptions.ConnectionError: # 如果请求超时跑出异常使得NETWORK_STATUS的状态变成false
NETWORK_STATUS = False
if zt == 500: # 判断网页状态如果等于500则存在漏洞
print (url + '可能存在漏洞')
file = open('D:/python源码/可能存在漏洞.txt', 'a')
file.write(url + '\n') # 将存在漏洞的网址写入文本
elif NETWORK_STATUS == False: # 如果请求超时返还异常时,NETWORK_STATUS为false,就输出强求超时
print (url + '请求超时')
else: # 其他情况则输出其他状态
print (url + '其他状态')

这个就不分析了,注释写得很清楚了,这个自己写了好一会,还请教了别人,真菜,嘤嘤嘤!!!
附上运行的图:

getshell

这里getshell是利用工具的,看看是否可以理由漏洞拿下该网站。

工具就不发了,不太好。

附上完整源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# _*_coding:utf-8_*_
import requests
import sys


def tianjia():
file = open("D:/python源码/shodan爬虫.txt", "r", newline='\r\n') # 打开爬虫文本
newfile = open("D:/python源码/shodan爬虫添加.txt", 'w', ) # 创建添加路径后写入的文本
while True:
lines = file.readlines(100000) # 依次读取每行
if not lines:
break
for line in lines:
newfile.write(line.replace('\r\n', u'/invoker/readonly\r\n')) # 在每行后面添加/invoker/readonly
file.close() # 关闭文本
newfile.close() # 关闭文本


def yanzheng():
result = [] # 创建一个result的list集合
with open('D:/python源码/shodan爬虫添加.txt', 'r') as f:
for line in f:
result.append(list(line.strip('\n').split(','))) # 读取每行将每一行放入result集合里面
for i, a in enumerate(result):
if (i + 1) % 2 != 0:
url = a[0]
NETWORK_STATUS = True # 创建一个NETWORK_STATUS初始状态为ture
try:
r = requests.get(url) # 利用request模块get请求到网址
zt = r.status_code # 读取request返还的网页状态
except requests.exceptions.ConnectionError: # 如果请求超时跑出异常使得NETWORK_STATUS的状态变成false
NETWORK_STATUS = False
if zt == 500: # 判断网页状态如果等于500则存在漏洞
print (url + '可能存在漏洞')
file = open('D:/python源码/可能存在漏洞.txt', 'a')
file.write(url + '\n') # 将存在漏洞的网址写入文本
elif NETWORK_STATUS == False: # 如果请求超时返还异常时,NETWORK_STATUS为false,就输出强求超时
print (url + '请求超时')
else: # 其他情况则输出其他状态
print (url + '其他状态')


if __name__ == "__main__":
tianjia()
yanzheng()
Author: 九指
Link: /2018/10/08/%E6%89%B9%E9%87%8F%E9%AA%8C%E8%AF%81jboss/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付寶