【CTF】NJCTF2017 writeup

ctf
  1. 1. 概述
  2. 2. Web题
    1. 2.0.1. Login(100)
    2. 2.0.2. Get Flag(100)
    3. 2.0.3. come on(200)
    4. 2.0.4. Be Admin(300)
  • 3. 总结
  • 概述

    辞职后没事情干,刚好赶上njctf,还是一样菜啊,只做了7道题,还要继续努力💪(ps:毕业设计什么鬼啊)写一下web的writeup,由于题目还开着,把没做出来的做一遍,纪录一下我觉得有必要记的题

    Web题

    Login(100)

    好吧,这道题取了巧,谁让大黑客们都是弱密码呢!!!!
    由于没有做验证码机制,所以扫了一波弱口令,然后…然后就进去啦
    其实这道题考的是mysql的长度限制漏洞。利用2个mysql的特性

    1. 当数据超过建表时的规定的数据大小,mysql将超过的部分截断
    2. 当select时where查询字句中的数据如果最后以空格结尾,mysql默认将空格去除查询
      那么利用这2个特性,我们只要注册一个admin+N*%20+x就可以已admin登陆,然后getflag:NJCTF{4R3_Y0u_7H3_Re41_aDM1N?}

    Get Flag(100)

    这道题考了命令执行漏洞
    首先发现存在文件任意读取漏洞,那么尝试读取一下源码,最后试出来是app.py

    可以看到有个命令执行并且是可控的,但是过滤了一些字符,用&就可以绕过。
    ls 查看一下

    可以看到flag文件
    9iZM2qTEmq67SOdJp%!oJm2%M4!nhS_thi5_flag
    cat一波,这里的特殊字符转移是关键

    come on(200)

    具体看大佬们的writeup即可,这道题主要学到了其盲注的注入方式。
    binary函数用来区分大小写

    1
    2
    3
    4
    5
    select xxx from xxx like x%
    select xxx from xxx like xx%
    select xxx from xxx like xxx%
    select xxx from xxx like xxxx%
    ...

    通过like来住出数据

    Be Admin(300)

    首先发现有.bak文件,下下来看一下,发现这道题主要考的是cbc字节翻转攻击和padding oracle attack.
    首先由于登陆出存在注入,我们可以把数据中的encrypt_pass取出来
    登陆绕过可以通过php弱类型比较来绕过,admin/0即可登陆
    要通过cbc字节翻转必须知道defaultId的值,所以我们需要先跑出defaultId的值
    padding oracle attack参考padding oracle attack
    符合我们现在的情况:

    1. 已知真实IV
    2. 已知对应cipher text
    3. 当解密失败ERROR错误
      题目环境可能坏了,本地搭一下,跑一下中间值
      需要注意的一点是padding oracle attack第一个字符没办法跑出来,由于最后一个字符解出来是空白所以还是error,不过没关系暴力一遍就好了(ps:有了原理,写代码很容易,就不放代码了)

    总结

    欠缺的还是很多,继续💪