背景

建议大家先刷在看WP,简单写下我的思路,感觉很多知识点和技巧还是挺贴近实战的。

最后感谢Root,****等师傅的指点和帮助。

about hacker101 CTF

hacker101 CTF是国外漏洞提交平台hacker one 的一个CTF靶场,累计一定积分后会获得私人邀请资格

A little something to get you started

查看源代码,发现背景图片没有,访问查看(在日常渗透的的一些静态文件也会存储在服务器中,有可能存在SSRF等问题), 查看图片,找到flag.

Micro-CMS v1

主要考察简单的XSS和注入,一共四个flag

flag_1

进入Testing ,选择编辑,尝试注入

image

这时候会发现script标签被过滤了,紧接着我们尝试在标题注入,这时候会发现标题的标签被转译了。然而返回主页的时候会发现,转译的标题在首页反而成功执行了。

image

这种情况在一些复杂场景的确出现过,比如A网站出现的数据处理的很好,但是在B网站引用的时候出现了问题(比如19年的百度搜索手机端引用视频连接标题导致XSS的事件),感觉有点像二次注入。

flag_2

点击第二个Markdown Test发现一个坏掉的图片连接,提示我们测试一些markdown方法(其实这里我们使用常规XSS也能进行绕过,但是这里提示了markdown说明正解应该是使用markdown来绕过的),这里参考了下面的文章,成功构造获取flag

Markdown中的XSS

1
[Click Me]("" onerror = "xss")

保存后,在源代码中获取flag

image

flag_3

编辑页面的URL存在规律性,目前看到这种第一反应是加单引号,第二反应就是遍历下看看能不能越权。

遍历/page/edit/x 发现flag

image

flag_4

在尝试/page/edit/x和/page/x的注入测试中找到flag,也是考察常规流程和思路了。

image

Micro-CMS v2

主要考察注入知识点

flag_1

在上面的基础上加上了登陆功能,首先加单引号发现报错,python写的网站,sql语句已经出来了。

image

尝试构造语句

1
SELECT password FROM admins WHERE username=admin' or ''='

但是显示“Invalid password”“无效的密码”,因此密码也需要进行构造。

1
2
3
4
5
6
7
8
SELECT password FROM admins WHERE username=admin' union select '123' as password -- 

#这样的话,密码就设置成为了123
#union select 联合查询 as 赋值

a' union select 1#

#或者直接将后面全部注释

构造好后成功登陆,然后进入编辑页面获取flag

flag_2

接着测试页面并没有什么发现,于是抓包分析看看是不是请求数据存在问题的时候发现虽然有创建新页面的选项,但是服务器并不会响应,最后看一篇国外文章,是利用编辑页面创建新页面,再删除cookie进行创建获取的flag

image

flag_3

这里也是看解析会的,是需要登陆数据库中的账号密码来获取,可以手工也可以使用工具跑,登陆账号密码后获取flag,可以从数据库找flag或者账号密码登陆都能获得flag

image

Web, Crypto

看题目是加密和web结合的考察.

flag_1

进入后是文章发布页面,标题内容随便写,生成URL如下:

1
http://34.94.3.143/4f8cc4a561/?post=3dkqDxqGu3FMNhmBSkyGpwYxpQfSE0Am9c5DsDlI1StgMnBkNPrbjAJqcs0ZRzyfUg8V2OqUVC0WLlwIOS8y9euwWwkQMTQwU01UZpKGgkJSBEUo1SmBwnE!D5rhg7j5uNQw3it5!RIgX9jub325UMEuUtudtfL3GRcaJpU33m8lhjLwd6PUmKxLvh3GWPN5uRW74UfgnwIHOF9bNtv-bg~~

猜测文章内容是post参数传输的,尝试修改看看会报什么错,获取flag

image

flag_2

显然内容是加密传输的,fuzz报错看看能不能得到什么有用信息,总结如下:

1
2
3
4
python2编写
会替换一些字符
使用aes算发为cbc,密钥为staticKey
使用base64加密

问了搞密码学方向的师傅,知道考察点是Padding oracle attack,使用kali中的padbuster方法进行解密。

image

flag_3 and flag_4

思路是存在sql注入,使用破解的加密算法写加密注入语句,获取flag。具体还在搞。

首页三张图片

flag_1

查看三张图片内容,第三章访问错误,测试参数id 是否存在注入

1
http://34.94.3.143/5b39cb10f1/fetch?id=1000-998

sqlmap梭哈

1
python sqlmap.py -u http://34.94.3.143/5b39cb10f1/fetch\?id\=1 -D level5 -T photos -C filename --dump

image

flag_2

第三张图片不能看,但是ID参数存在3,证明大概率存在第三张图片,然后在这卡了半天(思路错误)。

最后找文章&&请教大佬,发现注入原来还能这么玩,读取数据

1
http://xxxx/xxx/fetch?id=4 union select 'files/adorable.jpg' --

根据图片的读取方式和之前测试index等路径后,初步觉得是python,go之类的语言编写的小demo,测试main.py 出了结果。

找到源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from flask import Flask, abort, redirect, request, Response
import base64, json, MySQLdb, os, re, subprocess

app = Flask(__name__)

...
...

@app.route('/fetch')
def fetch():
cur = getDb().cursor()
if cur.execute('SELECT filename FROM photos WHERE id=%s' % request.args['id']) == 0:
abort(404)

# It's dangerous to go alone, take this:
# ^FLAG^7edbfc67bef7b1b9c0f68ccf7baa75e3a5a53673f147ef3462ccc1da128e2a7f$FLAG$

return file('./%s' % cur.fetchone()[0].replace('..', ''), 'rb').read()

if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)

flag_3

代码审计main.py 从而获取flag,已经触及我知识盲区了。
没最出来,具体看大佬操作

Cody’s First Blog

看首页了解到考察点PHP+文件包含

flag_1

查看源代码,发现注释了登陆界面(有时候看看注释的js之类的经常能找到一些接口)访问,发现登陆和留言,留言提交后需要审核,登陆尝试注入,爆破弱口令爆破都没啥反应,尝试fuzz路径,发现报错了。文件包含实锤了。

image

尝试远程包含,伪协议等操作都失效了,然后看提示说下关于输入框,于是在首页输入框一顿乱试,最后发现输入PHP代码会返回flag(这说明输入文件是静态存储,可以被文件包含,可能是本地包含,一个思路)

image

flag_2

既然是静态存储那么一定有地方存储了(本地文件包含总的有文件对吧),于是再找字典搞搞试试。

米斯特微信公众号看见的一个字典

找到PHP文件字典,写脚本去掉.php,在请求书发送特殊字符(用于定位包含文件),写脚本上VPS跑。最后跑出来是admin.inc

image

flag_3

应该考察的越权不是fuzz,但是也跑出来了,,
这个应该是管理员审核前台发来的评论,点击允许果然发送到首页去了。

image

那么提示已经很明显了,第一个输入PHP会返回flag,那么管理员批准会执行吗?尝试包含admin,inc报错,再尝试index包含

image

不会执行但是写在网页中了,尝试包含,成功了

image

但是之后尝试写入就是一直失败状态,看了一些wp了解到是存在限制,只能读取一条不能交互,这样只好吧源码读取再审计。

1
<?php echo file_get_contents('index.php');?>

image

Postbook

考察各种功能的越权漏洞,原理都是一样的就不都写了。

flag_1

发现注册账号网页,注册账号登陆,有写留言的功能,编写抓包,修改参数ID,获得flag

flag_2

编辑修改他人信息(平行越权)保存修改他人的信息获取flag

flag_3

尝试删除公能,发现删除ID是md5加密,替换获取flag

flag_4

发现修改密码界面,抓包尝试越权,发现cookie设置就是ID的md5 值,修改成1查看到管理员密码,登陆管理员账号获取flag

flag_5

既然首页有flag,那么伪造cookie看看能不能搞到别的,测试了2发现也存在
估计都是差不多类型的,flag太多老找重,不着了不找了,反正知道怎么搞了。