2024寒假训练赛1——Writeup
WEB LoveTok 拿到附件后先看文件结构 还是比较简单的,老规矩,先从index入口开始 注意到这个对象,是个路由,路由方法在上面的函数。文件结构里找一下发现了同名的文件,进去看看 发现接收format参数后拿他去new了一个对象,同样跟进一下这个TimeModel文件 先看构造函数,可以看到会被addslashes过滤一遍。这里简单说一下这个函数的处理方法,如果被处理数据是输入到数据库中的,就会在例如单双引号、斜杠前面加上反斜杠进行转义。算是一种安全处理方式。不管要注意的就是,他只在数据输入进数据库时有效。 接下来就是一些显示的处理。看到下面的getTime方法,有个eval,应该就是利用这个家伙了 可以看到format有被放到eval中,但是不管输入什么都会被当成文本。怎么办呢?看提示 又是一个直接给payload的题了属于是 霓虹灯 一样,先看文件结构 发现不是常规语言,而是ruby 没事,同样先找index入口。 post提交了一个表单,没有明显的接口提示,那就直接看看controllers吧 没猜错,controllers控制着表单接收。如果经是验丰富的人看到这个正则匹配应该就知道肯定需要绕过了,但是我们还不清楚这个ERB对象是干嘛用的,再看看其他文件,也没发现有这个ERB类的定义,所以猜测应该是ruby自带的 搜了一下发现还真是,是个模板,而且还有个模板注入漏洞 发现ERB是Embedded RuBy的简称,意思是嵌入式的Ruby,是一种文本模板技术 网上提供了很多这个模板的注入方法,简单看了一下,读文件应该是长下面这样 <%= File.open('flag.txt').read %> 但是显然这应该不满足我们的正则匹配规则,怎么办呢?我看到了这篇文档 简单来说就是用^或者$,但是实测发现并不奏效,不过也当作是个知识点记录一下 怎么办呢?继续搜,发现了这个 是的,使用%0a或者\n换行就能绕过。拿我们前面的payload测试一下 1111%0a<%= File.open('/flag').read %> 这里有个坑要注意,如果上面这句payload直接在前端的输入框输入,就会被多次url编码,导致后端接收到的结果与预期不同,因此要将%,=等符号手动url编码后放置到数据包中进行发送 最终在数据包中的payload应该如下 neon=111%0a<%25%3d+File.open('/flag').read+%25> 有毒朋友 简单的文件包含与本地命令执行,下载附件后先看入口index.php 发现是读cookie,并且看到是被base64编码的,因此可以抓包下来看到serialize($page)的内容 在右侧已经被自动解码 继续看代码,跟进到PageModel 发现有一个文件包含的地方,并且可以通过控制刚刚cookie中的参数来达到访问不同的文件的效果。此时包含什么文件进来都会被当成php代码执行。而现在要找到能够查看并且可随着数据包而修改的文件内容的,第一个想起的就是服务器的日志文件。它会记录我们对服务器的访问请求。具体可以看我的这篇博客 所以可以通过修改User-Agent,从而达到让日志文件被写入php指令并执行的目的 这里要注意,得发送两次才能看到ls的结果,可以思考一下这是为什么 MISC 嘈杂 就像提示里说的那样,这里直接放exp import numpy as np from scipy.io.wavfile import read from scipy.fft import dst # 读取音频文件 final_waveform = read("encrypted.wav") # 对音频信号进行离散余弦变换(DST) result = dst(final_waveform[1]) # 从变换结果中选择幅度大于10^5的值 amplitudes = result[result > 10**5] amplitudes.sort() # 用于存储恢复的文本 recovered = "" # 遍历选定的幅度值 for a in amplitudes: # 找到幅度在变换结果中的位置 found = np.where(result == a)[0][0] # 判断位置是否为奇数 if found % 2 == 1: # 计算字符对应的ASCII码值 c = round(found / 20) # 将ASCII码值缩小,直到在可打印字符范围内 while c > 128: c //= 4 # 将字符添加到恢复的文本中 recovered += chr(c) # 打印恢复的flag print(recovered) 莫斯档案馆 每一层有一个pwd.png和一个压缩包,pwd.png是一个彩色条纹和圆点的非常小的图像,也就是摩斯密码,套了很多很多层,写脚本去识别摩斯密码,并递归解压。 ...