文章目录
- sqlshark
- LearnOpenGL
- ez_msb
- OnlyLocalSql
sqlshark
tshark -r sqlshark.pcap -Y "http" -T fields -e frame.len -e http.file_data > data.txt
不太像常规的盲注,一次性发送两条很类似的payload,比常规的多了一个least在判断password值的最小值
Form item: "password" = "any'/**/Or/**/(iF(((((Ord(sUbstr((sElect(grOup_cOncat(password))frOm(users)) frOm 14 fOr 1))))in(99))),1,0))#"
Form item: "password" = "any'/**/Or/**/(iF(((leAst((Ord(sUbstr((sElect(grOup_cOncat(password))frOm(users)) frOm 14 fOr 1))),99)in(99))),1,0))#"
其实可以直接忽略这一条,用长度判断直接去掉,随手写的乱七八糟脚本如下:
import re
import urllib.parse
with open('data.txt','r',encoding='utf-8')as file:
lists = file.readlines()
flag=''
tmp = 1
flag_tmp = 0
for i in range(0,len(lists),2):
match = re.search(r'(\d+)', lists[i+1])
length = match.group(1)
# print(length)
payload = (urllib.parse.unquote((bytes.fromhex(lists[i].split("\t")[1])).decode())).lower()
# print(len(payload))
if length == "492" and len(payload)<135:
print(payload)
match = re.search(r'in\((\d+)\)\)', payload)
asc = int(match.group(1))
match = re.search(r'from\+(\d+)\+',payload)
# print(match)
location = int(match.group(1))
flag+=chr(int(asc))
print(flag)
得到的密码套个VNCTF{}就是flag了
LearnOpenGL
flag被砖块挡住了,直接用全透明图覆盖掉砖的图片
from PIL import Image
# 创建一个全透明的RGBA模式图片
img = Image.new("RGBA", (128, 128), (0, 0, 0, 0))
# 保存图片
img.save("transparent_image.png")
ez_msb
总体流程如下,在blocks_add_xx_0处将两个数据结合到一起了
照着逆就好了,打印一下振幅再加题目名其实就很明显可以看出flag.txt对应哪部分数据了
jio本:
from scipy.io import wavfile
import numpy as np
# 读取音频文件
samplerate, data = wavfile.read('out.wav')
# 将音频数据转换为浮点数类型
samples = np.array(data, dtype=float)
# 获取音频振幅
amplitudes = np.abs(samples)
amplitudes = np.abs(samples)*1000/2
# 获取整数部分
int_amplitudes = amplitudes.astype(int)
data = ''
for i in int_amplitudes[:200]:
data += (bin(i)[2:].zfill(2))
print(data)
OnlyLocalSql
坏,被搞得怀疑人生的题目
源码:CTF-Archives/VNCTF2024-OnlyLocalSql: VNCTF2024 - Misc - OnlyLocalSql - Source Code (github.com),请给巨魔一个star!
出题人讲解https://space.bilibili.com/12949995
可以看到有个web服务,同时看源码就可以看出是不久前的西湖论剑的only_sql的源码,当然是后话了
直接访问http服务访问不通,看题目描述提到强制连接本地服务
发现本地curl是通的
因此想到使用流量转发,过ssh隧道去访问服务器的内网
彻底搞懂SSH端口转发命令 - 知乎 (zhihu.com)
Lateral Movement and Pivoting - 横向移动和枢纽 | TryHackMe CN Mirror (tryhackmyoffsecbox.github.io)
将服务器127.0.0.1的80端口转发到本地的8888端口,因此访问本地的8888端口的流量就会被通过服务器21013的ssh端口访问80端口,相当于从服务器本地进行访问
ssh -p 21013 ctf@manqiu.top -L 8888:127.0.0.1:80
成功访问到,不过这里mysql密码被改了,不是query.php里的注释密码,后面不能直接跟西湖论剑里一样去连接并命令执行
不过由于知道flag的位置/flag
,并且发现/flag
www-data就能读了
两种方法,一个是rogue_mysql_server项目rmb122/rogue_mysql_server: A rouge mysql server supports reading files from most mysql libraries of multiple programming languages. (github.com),伪造mysql服务,任意读文件,需要把本地的端口转发给服务器的33060,写到这里平台关了,题目docker还没启好,先留个坑迟一点填
还有一个非预期是题目权限没弄好 /var/www/html下有写权限,直接写个一句话就搞定了,反正flag不是root权限读