美文网首页
2018QCTF-XMAN夏令营选拔赛

2018QCTF-XMAN夏令营选拔赛

作者: cceb9d5a8577 | 来源:发表于2018-07-15 12:17 被阅读205次

    Web newscenter

    发现搜索框是post数据


    用bp抓包,放在sqlmap下跑


    然后就跑出来了



    Web Lottery

    这个咋一看是一个类似双色球的东西,给你输入7位数,然后跟他后台生成的7位数对比,猜对的越多,得到的钱越多,目的是要去赚钱买flag,这种情况一般都不可能按正常操作来做的,估计都是篡改数据多一点



    我们点开html和js可以看到这个生成正确数字的过程,一个简单的if判断语句,我们只要改numbers[]数组的内容全部为true,就可以获得最多的钱


    所以我们先设置一波代理进行本地操作,然后用抓包工具进行改数据,改完再关掉代理,去购买flag,这题就解出来了,具体操作如下:







    Misc x-man-A-face

    这题很简单,签到题吧,就一个缺角的二维码,用ps操作补齐,扫出来是一串base32,解码一波就出flag了




    Misc x-man-keyword

    拿到这个png玩意,一波binwalk,010editor,stegsolve都没有什么发现,后面绝望之际偶然看到世安杯-LSB隐写-png那题,就突然想用lsb隐写试试,结果就解出来一串这样的的东西:
    ps:这里我用的是lsb.py工具,密码我猜是lovekfc,结果就猜对了2333333


    `PVSF{vVckHejqBOVX9C1c13GFfkHJrjIQeMwf}``
    一开始以为是凯撒加密,试了好久没有发现什么,后面出hint,又去疯狂百度一波发现了不得了的东西:https://wenku.baidu.com/view/ab7a4f0131126edb6f1a10a0.html

    认真阅读了以后,再根据hint,写出解密脚本,一跑flag就出来了



    Pwn Xman-dice_game

    这是一道猜随机数的题目,本来题目本意是以时间作为随机数种子的,但是如果输入的buf过多就会覆盖到随机数种子,从而导致种子不变化,生成的随机数不随机


    我们可以看到,下面的函数中实际上是让我们去猜一个随机数v2=rand()%6+1,并且保证v2是整数并且在1和6之间,如果连续猜对50次就可以拿到flag,那么我们就可以通过不断地产生随机数碰撞的方法,去获得一个固定的num[50],然后再把我们获得的num[50]输入到程序中从而获取flag



    生成随机数碰撞Exp如下:


    获得flag的Exp如下:

    Pwn---- Xman-stack2

    不得不说这是一道有点骚的题目
    主要利用了数组下标溢出,然后配合利用了整数溢出
    程序的主要功能是让你创建一个数组,由你来分配数组的大小,然后输入每个元素的数值,然后你可以追加元素进入数组,可以修改某一个下标的内容,还可以遍历数组所有的元素
    首先的这个地方,造成了数组下标溢出:没有对输入的下标进行检查,导致我们可以在栈的任意位置进行写的操作


    这样我们就可以找到ret的地址,然后把ret的地址改成hackhere:0x0804859b,本以为这样就可以getshell了,没想到执行了这个函数后却被报错找不到“/bin/bash”


    说明这个命令被删了,我们只能自己构造system(/bin/sh),由于有数组下标溢出的漏洞,写操作倒不难,主要需要注意写的只能是10进制数和注意地址是小端序就行了,但是有个很坑的地方在于,如何确定ret的位置,按照栈来算的我一开始是算到112+4=116,也就是下标为115,然而怎么样覆盖都不对,只能自己通过gdb调试,最后找到ret的地址是在下标为132的地方,这也是很迷,但找到正确的覆盖地址后构造就不难了,主要构造两次payload:
    1.【puts-plt】【main】【printf-got】
    2.【system】【 】【/bin/sh】
    第一次的构造是为了能够泄漏出printf的真正地址为:0xf7***020,从而找到libc的版本:



    从而得到:
    【system的真正地址】=【printf真正地址】-【printf在libc中的地址】+【system在libc中的地址】
    【/bin/sh的真正地址】=【printf真正地址】-【printf在libc中的地址】+【/bin/sh在libc中的地址】
    这样一来,就可以get到shell拿到flag了


    另外,找ret地址的时候我采用的一直方法是,用整数溢出打印出255个栈的内容,然后大致摸索着加调试,慢慢就找出ret的地址了,如图泄漏栈:


    最终exp如图:



    赛后瞎BB

    打这个比赛体验了一把通宵,然而最终也才做出6题,相比去年的xman夏令营选拔赛题目,今年的难度高了很多,同时又让我意识到一个深刻的道理:我是真的菜orz
    题目难度很迷,按道理来说xman夏令营选拔赛应该是对萌新友好一点的菜鸡互啄比赛,没想到这次是py风云下的诸神之战,pwn一共六道难度有点大,堆的题目占一半也就是知识盲区占一半。。唉蓝瘦,web总体看起来好像要简单一点,我这个非web手都能搞懂两题,然后misc是王者级难度在相当一段时间里misc大家都只能做签到题,无人解出另外三道。。。逆向和密码就不太会做就不知道难易了。。。另外发现每次有点水准的比赛都有rsa的题目,是时候去学一波这些有关rsa的知识了不然感觉会有点亏

    相关文章

      网友评论

          本文标题:2018QCTF-XMAN夏令营选拔赛

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