REDROCK CTF WP
参赛人:yingwenzha
MISC
1.yourcraft
没啥好说的跑酷就完了(绿宝石那关后面有捷径)

2.签到

cv
3.290的小秘密 lsb加密用stegsolve
就出来了
4.wireshark
直接丢wireshark里
最后一个的hex就直接是了

5.我图图呢
两段中一段是改图片长度获得隐藏内容
另一端是编码最后地方



6.easyzip


6.Are you a JPG master?
这道题看有两个hint
所以跟着hint来就行
先是JAVA盲水印
然后寻找工具
找到了
剥离水印。获得第一次zip密码

然后level2
给了个图片和dic
因为有dic首先怀疑是文件植入了一个zip
要用dic暴力破解zip得到flag
打开kali
binwalk -e。。。。。。。。。。
没用
查看hint
怀疑是图片数据直接隐写
然后开始判断种类
先用`stegdetect`判断,结果ng,所以f5和ourgruss排除
同时尝试oursecret
直接判断为无
于是使用Stegsolve查看图片细节
发现大量奇怪色块判断是`steghide`
着手编写脚本
```
#http://pcat.cc
from subprocess import *
def foo():
stegoFile='level2.jpg'
extractFile='hide.txt'
passFile='dic.txt'
errors=['could not extract','steghide --help','Syntax error']
cmdFormat='steghide extract -sf "%s" -xf "%s" -p "%s"'
f=open(passFile,'r')
for line in f.readlines():
cmd=cmdFormat %(stegoFile,extractFile,line.strip())
p=Popen(cmd,shell=True,stdout=PIPE,stderr=STDOUT)
content=unicode(p.stdout.read(),'gbk')
for err in errors:
if err in content:
break
else:
print content,
print 'the passphrase is %s' %(line.strip())
f.close()
return
if __name__ == '__main__':
foo()
print 'ok'
pass
```
运行
成功获得flag

7.mermory
kali里下好vol然后内存分析,在浏览器记录里发现了secret.png和part3
然后把secret.png导出获得头
在剪切板记录里获得part2
最后结合头部中部尾部得到flag
8.5525
SilentEye隐写,把音频导入然后解密就行
根据hint提示这个密码和五月天有关(u1s1它这个误导非常大,因为hint说key是歌手名首字母大写可问题是解出来的key是Mayday二Mayday是五月天这个乐队的名字,五月天是乐队而不是歌手,真的奇了怪了

## 密码学
1.real1ty的小秘密

凯撒密码,试几下就出了

2.我解md5真的假的
一个一个解就行直接用给的那个网站就行

注意第4个,给的那个网站我没查到,所有只能硬算
撞库就完事咯

3.Morse_Code
找个网站直接解,接完调小写并且%ub 和%ud分别是{}

4.easy crypto
先问一下gpt这是啥加密方式
问到是仿射加密
发现其具有周期性
那我多跑几遍直到redrock出现就行了

5.What is RSA
写一个解rsa的脚本
把参数填了就出了

6.e这么小吗
这道题很难,先是尝试了硬解(包括不限于拿自己电脑跑n的因素分解以及网上搜库,还用rsatoolv2也试了都没出)直到翻到一个博客
[RSA算法原理及CTF解题_ctf rsa 已知m n c 求e-CSDN博客](https://blog.csdn.net/qq_45521281/article/details/114706622)
##### e=3,可进行小明文攻击
适用情况:e较小,一般为3。
当如果公钥e很小,明文m也不大的话,就会导致 `m^e=k*n+c` 中的k值很小甚至为0,爆破k或直接开三次方即可。
根据这个思路
(因为这道题给我发的数字都是10进制所有我需要先改一下代码再获得10进制解密数字后转16进制然后转字符串)
结果图:
7.rel1ty的大秘密
这道题是赤石,贼大一个文件
但是总的来说还是很简单
写3个程序分别用于解base16 32 64编码
然后来回套,看那个可以继续套下去
直到出现一个很像flag的东西

然后猜测royk与rock处是交换点
然后取oyk 和ock 进行原始base64解密
对比不同
交换(题意就是有3对数据表内容发生了交换)
然后是real1tG 的G与 y
不断尝试,交换
得出可能flag
然后提交

8.real1ty的中秘密
维吉尼亚密码的变种,叫gpt写了个脚本
```
def vigenere_decrypt(ciphertext, key, shift=0):
plaintext = ""
base = ord('A') # 假设为大写字母
for i in range(len(ciphertext)):
c = ciphertext[i]
k = key[i % len(key)]
# 解密公式
decrypted_char = chr((ord(c) - ord(k) - shift) % 26 + base)
plaintext += decrypted_char
return plaintext
# 示例调用
ciphertext = "密文内容" # 替换成真实密文
key = "密钥" # 替换成已知密钥或尝试推测
shift = 0 # 替换成尝试的shift值
print(vigenere_decrypt(ciphertext, key, shift))
```
不难发现j是{
同时呢调整大小写
使大小写与密文一致
最后发现提交后还是不对
然后抖了一激灵
既然使real1ty beileves crypto ***
那么根据real1ty的大秘密我可以猜测是那个内容是safe
然后得到结果
Redrock{real1ty_believes_crypto_InfosAFE}
pwn
1.login
签到题
ida打开 输入-1 开启后门

故 -1
flag get
2. real login
3. 依旧签到
4. 
nc 连上
输入49
获得bash
然后去根目录cat flag
3.爱捉弄人的beatcat
这道题应该是个内存泄漏题


要buf=v2那就看怎么填充得到v2了呗,然后就看buf到r的空间大小0x191个,然后就这么填充A占位
就成功满足判定了
然后cat /flag
获得flag
4.计算猫
这个就是做脚本自动计算

然后就行了
5.与贝塔凯特约会
newstarctf 第一周的一个pwn题一样的过程

使nbytes_4的数据溢出到nbytes

把得到的payload输进窗口就完成了
6.贝塔凯特的后门
这道题也是内存溢出
但是使要溢出到指定函数(backdoor)的地址上从而调用backdoor
之前没有这方面的知识
找了很久的资料
最后知道了方法
先是填充
使buf刚刚溢出

0x50+0x08生成个A
然后是加上backdoor的地址
启动脚本

成功获得flag
web
1.贪吃蛇
score控制台改10000就行

2.这是真签到
进去翻翻源码
得到flag
3.机器人
newstarctf中的智械危机类似
看robots.txt这是一个协议关于爬虫相关的

然后先看hint知道/flag下的字符串是flag的每个字符填充7个随机字符得到
所以写个脚本就得到flag了

4.留言板
python版sql注入
先在留言板试了几下
发现它会打印一个字符串回来
内容就是你写的内容
但是它被u‘’包被
所以写的时候现在前面加一个‘+f’就可在{}里执行任意命令,注意到它有限长,而且和‘’的数量.的数量有关,所以废了下功夫构造出一个函数得到flag


5.肚子饿了
这道题使真的很折磨人
我试了很久的绕过,都没有成功绕掉,你是黑客不给你吃真的把我脑子贯穿,chatgpt都爆了几次
最后找到了成功的方式。
首先,这个题是布尔盲注
那么我就要想办法得生成一个字符然后判断这个字符是否是(首先是表然后是列最后是值)的几号字符。
看了newstarctf的wp也是能够知道了这大概是个什么流程
但是问题最大的是如何找到这个判断通过长时间的分析发现and和union不能用,位置还是在尴尬的order by 后面 并且order by 后面已经有了一个值(在这里命名为x)。所以唯一的出路是想办法让那个by后面的值入手,发现if(e1,e2,e3)这个sql语句中e1是判别式如果正确那么就会返回e2如果错误那么就会返回e3。这就是一个很好的触发点。此时如果找到一个运算符让x与这个if出来的值进行计算可以改变表的顺序就大功告成。
经过尝试。最后发现如果在?type=处填写>>IF((判别式),2,1)就可以做到上条件。然后就开始着手写脚本
```
import requests
from urllib.parse import quote
url = "http://127.0.0.1:16626/"
mark = "西红柿炒鸡蛋