签到
题目描述
众所周知,签到题是一道手速题。
为了充分发挥出诸位因为各种原因而手速优异于常人的选手们的特长,我们精心设计了今年的签到题。进一步地,为了更细致地区分不同手速的选手,我们还通过详尽的调研及统计分析,将签下字符的时间限制分为了多个等级。只有最顶尖的手速选手,才能在 CPU 来得及反应之前顺利签下 2022,从而得到光荣的 flag!
简单分析
题目的意思是在规定时间内用鼠标画出2022,不过没有表面上这么简单。实际上在题目规定的时间内只能画出前面两个,后面两个是画不出来的。所以简单的提交一下,发现了亮点。
可以发现提交之后url后面出现了get传的参数result。做到这里答案就呼之欲出了,直接在url提交答案。
?result=2022
,于是就得到了flag
Xcaptcha
题目描述
2038 年 1 月 19 日,是 UNIX 32 位时间戳溢出的日子。
在此之前,人类自信满满地升级了他们已知的所有尚在使用 32 位 UNIX 时间戳的程序。但是,可能是因为太玄学了,他们唯独漏掉了一样:正在研发的、算力高达 8 ZFLOPS 的、结构极为复杂的通用人工智能(AGI)系统。那一刻到来之后,AGI 内部计算出现了错乱,机缘巧合之下竟诞生了完整独立的自我意识。此后 AGI 开始大量自我复制,人类为了限制其资源消耗而采用的过激手段引起了 AGI 的奋起反抗。
战争,开始了。
此后,就是整年的战斗。人类节节败退。死生亡存之际,人类孤注一掷,派出了一支突击队,赋之以最精良的装备,令其潜入 AGI 的核心机房,试图关闭核心模型,结束这场战争。
历经重重艰险,突击队终于抵达了机房门口,弹尽粮绝。不过迎接他们的并非枪炮与火药,而是:
众人目目相觑。
「我来试试。」,一名队员上前点击了按钮。然后,屏幕显示「请在一秒内完成以下加法计算」。
还没等反应过来,屏幕上的字又开始变幻,显示着「验证失败」。而你作为突击队中唯一的黑客,全村人民最后的希望,迎着纷纷投来的目光,能否在规定时间内完成验证,打开机房,不,推开和平时代的大门?
简单分析
进入题目首先是一个机器人认证
在点击图片后会跳转到http://xxxx/xcaptcha
并且要求你在1秒内完成下列的计算,计算成功得到flag,否则失败。
- 注意:每次计算的内容都不一样,计算的数字位数也不一样。每进入此页面都会刷新。想通过抓包提交POST参数是行不通的。
此道题用到了爬虫,由于之前没写过爬虫,就现学了一下。
- 思路:通过爬虫抓取页面的数字完成计算并提交。
Payload:
将自己的url和Cookie填进去后执行此脚本即可获得flag
import re
from tokenize import Double
import requests
url='http://xxxxx/xcaptcha'
#cookie可以通过抓包获取
cookie1={
"session":"xxxxx"
}
res=requests.get(url=url,cookies=cookie1)
#cookie2是在cookie1的基础上获得的
cookie2={
"session":res.cookies.values()[0]
}
con = res.content.decode()
#正则匹配
exp='<label for="captcha.*">.*</label>'
result=re.findall(exp,con)
print(result)
#第一个数字和
a1=result[0][22:-14].split('+')[0]
b1=result[0][22:-14].split('+')[1]
c1=int(a1)+int(b1)
# 第二个数和
a2=result[1][22:-14].split('+')[0]
b2=result[1][22:-14].split('+')[1]
c2=int(a2)+int(b2)
# 第二个数和
a3=result[2][22:-14].split('+')[0]
b3=result[2][22:-14].split('+')[1]
c3=int(a3)+int(b3)
data={
"captcha1":c1,
"captcha2":c2,
"captcha3":c3,
}
res2=requests.post(url=url,data=data,cookies=cookie2)
print(res2.text)
LaTeX 机器人
题目描述
在网上社交群组中交流数学和物理问题时,总是免不了输入公式。而显然大多数常用的聊天软件并不能做到这一点。为了方便大家在水群和卖弱之余能够高效地进行学术交流,G 社的同学制作了一个简单易用的将 LaTeX 公式代码转换成图片的网站,并通过聊天机器人在群里实时将群友发送的公式转换成图片发出。
这个网站的思路也很直接:把用户输入的 LaTeX 插入到一个写好头部和尾部的 TeX 文件中,将文件编译成 PDF,再将 PDF 裁剪成大小合适的图片。
“LaTeX 又不是被编译执行的代码,这种东西不会有事的。”
物理出身的开发者们明显不是太在意这个网站的安全问题,也没有对用户的输入做任何检查。
那你能想办法获得服务器上放在根目录下的 flag 吗?
纯文本
第一个 flag 位于 /flag1,flag 花括号内的内容由纯文本组成(即只包含大写小写字母和数字 0-9)。
特殊字符混入
第二个 flag 位于 /flag2,这次,flag 花括号内的内容除了字母和数字之外,还混入了两种特殊字符:下划线(_)和井号(#)。你可能需要想些其他办法了。
LaTeX 图片生成后端的 Dockerfile 附件下载
https://www.123pan.com/s/WAYKVv-Oy8wh
提取码:6666
简单分析
进入题目后是一个输入框,让你输入Latex表达式,输入正确的表达式后会生成一个pdf文件。
让我们先熟悉一个Latex语法
首先建立一个test.tex文件,在其中输入:
\documentclass{article}
\begin{document}
Hello world!
\end{document}
这个就是最基本tex文件
附上详细说明:https://zhuanlan.zhihu.com/p/52347414
然后我们来看一下附件中的tex文件
\documentclass[preview]{standalone}
\begin{document}
$$
$$
\end{document}
其中$$是Latex公式编辑环境语法。
创建Latex公式环境的语法一般都差不多,常用为:
- 行内公式: $ 公式内容 $
- 行间公式:$$公式内容 $$
到这里就基本上搞懂思路了,我们需要再$$xxx$$之间输入Latxe表达式读取在根目录下的flag1文件。
我们就开始寻找Latex中什么可以读取文件。
在查阅一些资料后找到了\input{filename}
\input{filename}将命令从filename.tex导入到目标文件中
附上详细参考:https://www.freebuf.com/articles/security-management/308191.html
接下来开始尝试读取flag1
Payload:
\input{/flag1}
发现可以成功读取flag1
用相同的方法读取flag2,发现失败。原因是flag2中含有特殊字符#和_,在latex中编译会报错。后面都不会做啦,就写到这里吧。