Misc
Domainhacker
简单流量分析过程就是目标用猕猴桃把目标的hash保存到了1.txt 然后压缩到了1.rar。
文件只有TCP和HTTP流,追踪TCP流能够发现蚁剑流量特征
继续追踪,在流15中传输了一个Rar文件。手动导出
Rar是加密的,我们能在流13中找到压缩的过程
分析蚁剑流量,命令Base64后通过参数传输,提取拼接得到base64如下
TwYNY2QgL2QgImM6XFxXaW5kb3dzXFxUZW1wIiZyYXIuZXhlIGEgLVBTZWNyZXRzUGFzc3cwcmRzIDEucmFyIDEudHh0JmVjaG8gZWZhOTIzYmE1MDQmY2QmZWNobyAxYTRiZTg4MTVlZjg=
解码如下
Ocd /d "c:\\Windows\\Temp"&rar.exe a -PSecretsPassw0rds 1.rar 1.txt&echo efa923ba504&cd&echo 1a4be8815ef8
得到压缩包密码为SecretsPassw0rds,解压得到NTMLhash
Domainhacker2
得到压缩包的密码FakePassword123$
。解压缩得到里面的文件。其中有一个ntds.dit
文件,通过搜索可知ntds.dit文件是域环境中AD的数据库信息文件
这里我们使用impacket/examples/secretsdump.py工具进行离线解密
python3 secretsdump.py -ntds ntds.dit -system SYSTEM -security SECURITY -history LOCAL > hash.txt
Web
Ez_gadget
fastjson版本为1.2.62,但是过滤了rmi,ldap,jndi关键字。网上大部分1.2.62链子都需要依赖这几个协议
public String Unserjson(@RequestParam String str, @RequestParam String input) throws Exception {
if (str != null && Objects.hashCode(str) == secret.getKey().hashCode() && !secret.getKey().equals(str)) {
String pattern = ".*rmi.*|.*jndi.*|.*ldap.*|.*\\\\x.*";
Pattern p = Pattern.compile(pattern, 2);
boolean StrMatch = p.matcher(input).matches();
if (StrMatch) {
return "Hacker get out!!!";
}
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
JSON.parseObject(input);
}
return "hello";
}
首先需要绕过hash判断,参考虎符CTF2022赛后复现。首先构造hash相等的字符串,根据hashcode源码可构造出如下等式
31*h1 + a[i] = 31*h2 = b[j]
(h1-h2)*31 = b[j]-a[i]
比如
//HF=Ge
72*31+70 = 71*31+101
先探测一下是否出网
下面就是绕过正则
使用Unicode编码绕过正则
取证
手机取证1
打开提供的盘古石取证软件,直接搜索关键字
手机取证2
依旧搜索关键词单号即可
计算机取证1
直接使用PasswareKitForensic分析即可得到系统密码
计算机取证2
使用volatility分析dump文件
发现可疑进程
经过搜索可知该软件可能被用来dump内存,提交进程号即可
计算机取证3
首先使用AFTK软件挂载E01磁盘镜像
然后使用EFDD工具解密bitlokcer加密磁盘,得到密钥
然后使用DiskGenius解密磁盘能够得到几个文件
分别导出,docx和pptx文件都有密码,可以使用pass.txt进行字典爆破最终爆破出pptx中的密码287fuweiuhfiute
得到flag
程序分析1
扔进GDA分析,看BaseInfo得到包名
程序分析2
同上,可以看见主类
程序分析3
主类中
解码发现是地址,提交密文即可
程序分析4
放到模拟器中会自动退出,根据提示找到如下位置,尝试提交h和a,最终a为flag
网站取证1
有源码,直接丢到D盾扫描
网站取证2
Seay分析,搜索password
再搜索my_encrypt定义,很明显是分组加密
复制运行即可得到密码
网站取证3
根据sql文件可得”金额”所对应的数据库列名money
Seay中搜索money可以发现使用encrypt
函数来加密money
跟进encrypt
得到盐值jyzg123456
网站取证4
首先根据转账的时间区间过滤出sql语句
然后过滤转账人,找张宝和王子豪对应的编号
分别为3和5,再次过滤。由于转账的货币是GG币,我们还需要计算每日的汇率
最后由于转账金额被加密了,我们还需要根据第三题的加密函数求逆,最终的计算思路为Total = GG币金额*汇率*转账次数
。脚本如下
total=根据时间的转账人过滤出的记录
total_list = total.split("\n")
# print(total_list)
# print(total_list[0][98])
target = []
for i in total_list:
if i[-18] == "5" and i[-15] == "3":
target.append(i)
print("收款记录:"+str(target))
# print(target[0][57])
#获取日期
def get_date(str):
if str[57] == ",":
return str[97:99]
else:
return str[98:100]
#汇率
c=汇率
date=[]
transfer=[]
transfer_price=c.split('\n')
# print(transfer_price[29][58])
for j in transfer_price:
date.append(j[45:47])
transfer.append(float(j[57:61]))
dic=dict(zip(date,transfer))
print("汇率:")
print(dic)
#金额
money=[]
d=[]
# print(target[70][119:127])
for k in target:
d.append(get_date(k))
if k[57] == ",":
money.append(k[118:126])
else:
money.append(k[119:127])
print(d)
print(money)
import base64
# 解密金额
def dec(string):
key = "cd9d86dd286a0b0079146c1c57e51576"
string = list(base64.b64decode(string))
l=len(string)
char = key[:l]
mon=''
for i in range(l):
mon += chr( string[i] - ord(char[i]) )
return mon
T=0
for i in range(149):
m=dec(money[i])
# print(m)
# print(dic[d[i]])
rmb=int(m)*float(dic[d[i]])
T+=rmb
print(T)
最后保留两位小数即可