2018HCTF-WriteUp(Web)

Web
一、share
题目:
描述
I have built an app sharing platform, welcome to share your favorite apps for everyone
in root_path
hint2:
<%= render template: "home/"+params[:page] %>
hint3:based ruby 2.5.0

注册完账号后,登陆发现,几个功能对应的url
  1. http://share.2018.hctf.io/home/Alphatest   回显文件编号和登陆用户的uid
  2. http://share.2018.hctf.io/home/share    发给管理员的消息和一个分享的Download url
这里其实当时我想到了几种思路,测试/home/share是存在xss的,但是并没有返回cookie什么的。
于是在xss平台上,试了一下获取网页源代码。

这里返回的code使用base64加密过的,解密后内容如下:

解密后网页内容大概是这个样子:

简单翻译一下就是:404,页面不存在的。
此时已经懵逼,在看过 FlappyPig和 De1ta的writeup后,发现robots.txt中暗藏玄机。
robots.txt内容如下:

这段代码中说了三件事:
第一,有个上传文件的功能。
第二,把文件分配给一个用户。
第三,把文件分享给所有人。
这三个功能都是管理员才能用的。
三个hint,解释一下:
hint1是文件结构
hint2是主页代码
hint3是ruby的版本
不得不说,做出来的都是大佬,大佬们找到了对应的CVE,CVE-2018-6914。
这个漏洞大概的意思就是通过../可以达到任意目录创建文件。
参考地址:https://www.ruby-lang.org/zh_cn/news/2018/03/28/unintentional-file-and-directory-creation-with-directory-traversal-cve-2018-6914/
所以这个时候的思路是:
1、通过CSRF让admin通过文件上传接口上传恶意文件
2、通过CVE-2018-6914把文件生成在home下(为什么生成在home下?因为home下我们才能访问)
3、通过CSRF调用Alpha_test接口把文件分配到自己的id下,在/Alphatest拿到生成的文件名
4、看文件,拿flag
因为自己的js学的比较差,所以这里就引用大佬们的payload

文件分享payload:

然后查看home/Alphatest,就能拿到文件名。
最后访问http://share.2018.hctf.io/?page=aa3820181111-336-12y58wh获取flag。

二、kzone

描述
A script kid’s phishing website
URL http://kzone.2018.hctf.io
这题相当蛋疼,当访问http://kzone.2018.hctf.io/的时候自动跳转到qq空间登录页面,一度让我怀疑人生。
后来抓包发现代码中有一段js自动跳转到qq空间。

 

注释掉后,我们来到了钓鱼页面。

 

 

扫目录发现http://kzone.2018.hctf.io/www.zip 源代码泄露。
查看install.sql,发现用户名和密码都是admin。
输入用户名密码,结果页面跳转到http://kzone.2018.hctf.io/2018.php
然后504了…很迷
然后打开源代码,发现/include/member.php下有个注入

因为这里的session是可控的,所以尝试cookie注入。
观察safe.php,这是waf函数。
根据文章:http://blog.sina.com.cn/s/blog_1574497330102wruv.html
可以知道绕过方法,各种writeup大同小异。
通过 \u0073elect代替 select进行注入。
这里放一个大佬的tamper脚本。

python
#!/usr/bin/env python
from lib.core.enums import PRIORITY__priority__ = PRIORITY.LOW

def dependencies():
pass

def tamper(payload, **kwargs):
data = '''{"admin_user":"%s"};'''
payload = payload.lower()

payload = payload.replace('u', '\u0075')
payload = payload.replace('o', '\u006f')
payload = payload.replace('i', '\u0069')
payload = payload.replace('\'', '\u0027')
payload = payload.replace('\"', '\u0022')
payload = payload.replace(' ', '\u0020')
payload = payload.replace('s', '\u0073')
payload = payload.replace('#', '\u0023')
payload = payload.replace('>', '\u003e')
payload = payload.replace('<', '\u003c')
payload = payload.replace('-', '\u002d')
payload = payload.replace('=', '\u003d')
payload = payload.replace('f1a9', 'F1a9')
payload = payload.replace('f1', 'F1')
return data % payload

三、admin

描述
ch1p want to have new notes,so i write,hahaha
URL http://admin.2018.hctf.io
在修改密码的地方,发现隐藏的github地址: https://github.com/woadsl1234/hctf_flask/

 

审计一下,发现routes.py中存在函数strlower()存在问题。

对于 nodeprep.prepare来说,会把 ᴀ -> A -> a
所以有了如下思路:我们冒充admin
但是复现的时候我发现,当注册的用户已经存在的时候,会返回

而是用 ᴬdmin注册的话,就会显示成功

 

 

然后我们去修改密码

 

 

然后登陆后出现flag:hctf{un1c0dE_cHe4t_1s_FuNnying}
ps:这个网址可以查询对应的字符 https://unicode-table.com/en/search/?q=small+capital
四、bestrong
描述
i know you love her/him so much, so you need pull your socks up. For example, writing more letters. (by the way, bob gave alice a 32 carat diamond)
hint1:this website is based golang, and my friend told me, i should use the latest package. Who care, it works.
hint2:go jose cve
hint3: critical vulnerability in json web encryption
URL http://bestrong.2018.hctf.io
这题太猛了,没人做出来……

五、bottle

描述
Not hard, I believe you are the lucky one!
hint1: */3 */10
hint2: bot use firefoxDriver
URL http://bottle.2018.hctf.io

 

看了几个大佬的writeup,总结一下这题的做法:

首先发现这个Bottle的ctlf注入,然后利用xss打到cookie,通过cookie登陆,就能得到flag。
 
登陆的时候抓包,发下如下请求

 

payload如下:

六、warmup

http://warmup.2018.hctf.io/source.php源码泄露,如下:

payload:http://warmup.2018.hctf.io/index.php?file=hint.php?/../../../../../../../../../../../ffffllllaaaagggg
hctf{e8a73a09cfdd1c9a11cca29b2bf9796f}

七、hide and seek

描述
only admin can get it update1/更新1: 1. fix bugs 2. attention: you may need to restart all your work as something has changed hint: 1. docker 2. only few things running on it update2/更新2: Sorry,there are still some bugs, so down temporarily. update3/更新3: fixed bug
URL http://hideandseek.2018.hctf.io

 

随便输入个非admin得用户就可以进入后台。

后台有一个文件上传功能,只能上传zip文件。
可以参考这个文章:https://xz.aliyun.com/t/2589

上传link,link内的内容是/etc/passwd,这里link一定要用linux命令来做。
我们可以发现,软链接的内容能够被直接打印出来。

接着读取 /proc/self/environ

接着读取/app/it_is_hard_t0_guess_the_path_but_y0u_find_it_5f9s5b5s9.ini
得到hard_t0_guess_n9f5a95b5ku9fg/hard_t0_guess_also_df45v48ytj9_main.py
在读取hard_t0_guess_also_df45v48ytj9_main.py

读取flag.py发现没有权限。
读取Index.html,发现只要用admin登陆就可以获得flag。
获取对应的mac地址,然后用random.seed()获得session替换就可以了。
参考文章:
HCTF2018 Writeup — Eur3kA https://xz.aliyun.com/t/3253
HCTF2018 Writeup — FlappyPig https://xz.aliyun.com/t/3245
HCTF2018 Writeup — De1ta https://xz.aliyun.com/t/3255
HCTF 2018 Writeup — Whitzard https://xz.aliyun.com/t/3242
HCTF 2018 Writeup —  Smi1e https://www.anquanke.com/post/id/163974
Category: 技术