XCTF战役原创

admin 2022年10月30日13:59:37XCTF战役原创已关闭评论38 views字数 6354阅读21分10秒阅读模式

Web#

1、sqlcheckin#

打开题目是一个登录框,并且给出了源码

7.png

看到 PDO 以为是堆叠注入,先 fuzz 一遍

8.png

可以看到几乎能用的都被过滤了,堆叠最关键的分号;也在其中

回头再看源码,发现账号和密码是直接拼接查询的,并且满足 username == admin 即可拿到 flag

接下来就是构造万能密码,字符都过滤的差不多了,但是没用过滤 ()-

  • 最终的万能密码:admin / '-(0)-'

2、webtemp#

本题考点: pickle 序列化 绕过‘R’与‘moudle’限制

参考文章:
从零开始 python 反
序列化攻击:pickle 原理解析 & 不用 reduce 的 RCE 姿势

题目要求我们满足:

I will give you the flag if we share the same animal as our favourite.

并且放出了源码

1.png

9.png

CTF 对 pickle 的利用大多是利用 __reduce__ 方法,它的指令码是 R,但是如果禁用掉了 R 的话又该如何攻击呢(如何利用 __reduce__ 文章中和网上其他资源都已经写的很详细了),这里又引出了一个全局指令:

C 指令,但是 c 指令(也就是 GLOBAL 指令)基于 find_class 这个方法, 然而 find_class 可以被出题人重写。如果出题人只允许 c 指令包含 __main__ 这一个 module,这道题又该如何解决呢?

2.png

根据文章内容,我们如果想要满足题目条件,就需要 secret 类的属性和 Animal 属性一致,如果能够控制 secret,篡改它的值,使之与 Animal 相对应的值相等,就能满足题目所需。

我们先用调试器生成一个正常 Animal 类序列化

3.png

b'\x80\x03c__main__\nAinimal\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x02\x00\x00\x00aaq\x04X\x08\x00\x00\x00categoryq\x05X\x02\x00\x00\x00bbq\x06ub.' 

然后将篡改的内容添加到序列化内容前面

b'\x80\x03cmain\nsecret\n}(Vname\nVaa\nVcategory\nVbb\nub0c__main__\nAnimal\n)\x81}(X\x04\x00\x00\x00nameX\x02\x00\x00\x00aaX\x08\x00\x00\x00categoryX\x02\x00\x00\x00bbub.'

生成 payload

4.png

5.png

提交标记处的 base64 即可获得 flag

6.png

3、nweb#

题目标题 俺不会注入 就是一个提示,尽量往注入方向靠(不排除出题人太狗)

先正常注册一波,习惯性的注册 admin 用户,发现提示用户名已存在

注册用户后登录页面如下

10.png

flag.php 提示我们无权访问

转了一圈没发现什么能伪造 admin 的地方

在注册页面处发现了注释

这个点也想了挺久

最后发现修改 type=110 可以直接越权注册

有了权限后我们去访问 flag.php,测试后果然存在注入,且是有回显盲注

py 脚本不知道为什么跑着跑着就会断开连接(ORZ 太菜了)

只能用 BP 去跑了

11.png

database 为 ctf,搞忘截图了,存在表 admin,fl4g,jd,user

继续跑注 fl4g 中的列

12.png

只有一列 flag

继续注

13.png

用正则匹配匹到 flag{Rogue-M 就不知为何配不出来了,并且正则不区分大小写,这里还是用 ascii 码跑

最后跑的 flag 只有一半。。。。flag{Rogue-MySql-Server

Rogue-MySql-Server 任意文件读取漏洞在 DDCTF 和国赛上曾经考过,可以去看看 WP


exp

但是目前我们登录的页面没用涉及到数据库操作的地方,猜测可能 admin 用户的界面有此操作,所以现在来注 admin

14.png

15.png

username 为 admin ,pwd 为 md5 加密数据,解密后为 whoamiadmin

本以为拿这个账号密码就可以去登录了,但还是密码错误密码错误

无计可施之下想扫扫看看有没有其他页面,结果还真找到了!!(一拿到题目就扫就不存在这些问题了)

16.png

用 admin/whoamiadmin 登录 database.php

最后就是利用
exp

连接成功后成功在文件中成功找到另一半 -is-nday}

flag flag{Rogue-MySql-Server-is-nday}

Misc#

1、ez_mem&usb#

这是个 USB 内存取证

附件分析

附件给的是一个 pcap 包,用 wireshark 打开即可

大体看一下,发现存在 http 协议,直接过滤 http

发现存在一个文件上传的记录

简单分析一下,可以看出来,上传了一个压缩包

![image-20200308212454023](/Users/dreamn/Library/Application Support/typora-user-images/image-20200308212454023.png)

我们把这压缩包导出来看一下

解压,可以得到虚拟内存文件 data.vmem

使用内存取证工具 volatility 分析

分析操作系统 volatility -f /root/桌面/data.vmem imageinfo

查看进程信息 volatility -f /root/桌面/data.vmem –profile=WinXPSP2x86 pslist

这里面进程都是系统进程,一般不需要特别关注,主要有一个进程可以看一下,就是 explorer.exe,这是资源管理器,可以看到用户当前所处的位置信息

导出 explorer.exe 的 dmp 文件信息

volatility -f /root/桌面/data.vmem –profile=WinXPSP2x86 memdump -p 1476 -D ./

借助 strings 工具,可以快速查看包含的 ascii 信息

strings 1476.dmp > 1476.txt

尝试过滤出包含 flag 的信息 cat 1476.txt |grep flag

可以看出来,就两个和 flag 有关的信息 flag.zip,flag.img

查找一下这俩文件

volatility -f /root/桌面/data.vmem –profile=WinXPSP2x86 filescan |grep flag

找到一个 flag.img,导出该文件

volatility -f /root/桌面/data.vmem –profile=WinXPSP2x86 dumpfiles -Q 0x0000000001155f90 --dump-dir=./

导出的文件名和内存中显示的文件名是不一样的,手动修改一下 cp file.None.0xff425090.dat flag.img

查看文件类型 file flag.img

lag.img: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "SYSLINUX", sectors/cluster 2, root entries 112, sectors 360 (volumes <=32 MB), Media descriptor 0xfd, sectors/FAT 1, sectors/track 9, heads 1, serial number 0x5d307603, label: "FDD_BOOT ", FAT (12 bit), followed by FAT

是个虚拟磁盘文件~提取文件 binwalk -e flag.img

提取到的目录

进入查看信息,发现 usbdata.txt 是空的,只有一个 F400.zip,对该压缩包进行解压

发现需要密码,可是哪里有可能存在密码呢既然可以在命令行输密码解压,那就可以在命令行输密码压缩,查看该镜像的命令记录

volatility -f /root/桌面/data.vmem –profile=WinXPSP2x86 cmdscan

发现一个疑似密码的东西=>passwd,拿过去解压看看~

解压成功~得到 usbdata.txt

usbdata 是键盘数据,根据键码对应表,可以写脚本输出数据

可以参考本篇文章:
从 CTF 中学 USB 流量捕获与解析

import sys
import os
usb_codes = {
   0x04:"aA", 0x05:"bB", 0x06:"cC", 0x07:"dD", 0x08:"eE", 0x09:"fF",
   0x0A:"gG", 0x0B:"hH", 0x0C:"iI", 0x0D:"jJ", 0x0E:"kK", 0x0F:"lL",
   0x10:"mM", 0x11:"nN", 0x12:"oO", 0x13:"pP", 0x14:"qQ", 0x15:"rR",
   0x16:"sS", 0x17:"tT", 0x18:"uU", 0x19:"vV", 0x1A:"wW", 0x1B:"xX",
   0x1C:"yY", 0x1D:"zZ", 0x1E:"1!", 0x1F:"2@", 0x20:"3#", 0x21:"4import sys
import os
usb_codes = {
   0x04:"aA", 0x05:"bB", 0x06:"cC", 0x07:"dD", 0x08:"eE", 0x09:"fF",
   0x0A:"gG", 0x0B:"hH", 0x0C:"iI", 0x0D:"jJ", 0x0E:"kK", 0x0F:"lL",
   0x10:"mM", 0x11:"nN", 0x12:"oO", 0x13:"pP", 0x14:"qQ", 0x15:"rR",
   0x16:"sS", 0x17:"tT", 0x18:"uU", 0x19:"vV", 0x1A:"wW", 0x1B:"xX",
   0x1C:"yY", 0x1D:"zZ", 0x1E:"1!", 0x1F:"2@", 0x20:"3#", 0x21:"4$",
   0x22:"5%", 0x23:"6^", 0x24:"7&", 0x25:"8*", 0x26:"9(", 0x27:"0)",
   0x2C:"  ", 0x2D:"-_", 0x2E:"=+", 0x2F:"[{", 0x30:"]}",  0x32:"#~",
   0x33:";:", 0x34:"'\"",  0x36:",<",  0x37:".>", 0x4f:">", 0x50:"<"
   }
 
def code2chr(filepath):
    lines = []
    pos = 0
    for x in open(filepath,"r").readlines():
        code = int(x[6:8],16)   
        if code == 0:
            continue
        
        if code == 0x51 or code == 0x28:
            pos += 1
            continue
        
        if code == 0x52:
            pos -= 1
            continue
 
        
        while len(lines) <= pos:
            lines.append("")
        if code in range(4,81):
            if int(x[0:2],16) == 2:
                lines[pos] += usb_codes[code][1]
            else:
                lines[pos] += usb_codes[code][0]
  
    for x in lines:
        print(x)
 
 
if __name__ == "__main__":
    
    if len(sys.argv) != 2:
        print("Usage:\n\tpython keyboardScanCode.py datafile.txt\nhow to get datafile:\t tshark -r file.usb.pcapng -T fields -e usb.capdata > datafile.txt")
        exit(1)
    else:
        filepath = sys.argv[1]
        code2chr(filepath)
quot;,
   0x22:"5%", 0x23:"6^", 0x24:"7&", 0x25:"8*", 0x26:"9(", 0x27:"0)",
   0x2C:"  ", 0x2D:"-_", 0x2E:"=+", 0x2F:"[{", 0x30:"]}",  0x32:"#~",
   0x33:";:", 0x34:"'\"",  0x36:",<",  0x37:".>", 0x4f:">", 0x50:"<"
   }
 
def code2chr(filepath):
    lines = []
    pos = 0
    for x in open(filepath,"r").readlines():
        code = int(x[6:8],16)   
        if code == 0:
            continue
        
        if code == 0x51 or code == 0x28:
            pos += 1
            continue
        
        if code == 0x52:
            pos -= 1
            continue
 
        
        while len(lines) <= pos:
            lines.append("")
        if code in range(4,81):
            if int(x[0:2],16) == 2:
                lines[pos] += usb_codes[code][1]
            else:
                lines[pos] += usb_codes[code][0]
  
    for x in lines:
        print(x)
 
 
if __name__ == "__main__":
    
    if len(sys.argv) != 2:
        print("Usage:\n\tpython keyboardScanCode.py datafile.txt\nhow to get datafile:\t tshark -r file.usb.pcapng -T fields -e usb.capdata > datafile.txt")
        exit(1)
    else:
        filepath = sys.argv[1]
        code2chr(filepath)

解出来的结果是 flag[69200835784ec3ed8d2a64e73fe913c0],不知道是不是键码映射有问题,两个括号出来的不是大括号,手动改成大括号才是对的

2、2019-nCoV#

过于傻瓜,略

3、简单 MISC#

首先来看一下题目

由于不靠谱的队友把服务器图片都删了,所以本题没有图片

【目标】简单密码学

【环境】Windows

【工具】Winhex+ 在线工具

【分析过程】

  • 直接解压,发现一个加密的压缩包 flag.zip,在其预览中发现 flag.txt 应该就是我们要的 flag

  • 当即觉得这个压缩包是个伪加密,扔进 Winhex 发现根本不是伪加密。

    于是想到解压密码可能与 flag.zip 一同解压出来的还有一张图片有关

  • 将 photo.jpg 放入 winhex,发现头文件并不是 jpg 头文件格式 FFD8FF,将头文件 FFD0FF 改为 FFD8FF

保存后发现图片可以打开了,哈哈哈,看来是挺easy。
然后就用StegSolve查看图片,试着去看看关于解压密码是不是藏在图片中
  • 好吧,我被耍了,回过头再看 photo.jpg,在 winhex 中查看到藏着一个 zip 压缩包,将这压缩包单独提出来
好像,这里没有坑,可以直接解压,得到一个ctf.txt,打开后是一段摩尔斯电码
  • 用摩尔斯解码工具解码,得到 EPIDEMICSITUATIONOFUNIVERSITYWAR

  • 接下来去试试能不能解压 flag.zip,发现可以咯。

    解压出来的 flag.txt,是一段 base64 的加密的字符,直接 base64 解码就好了,这里就不多说了。

Th1s_is_FlaG_you_aRE_rigHT,试着去提交 flag,发现并不正确,哈哈哈,我还是太菜了,居然不加头标识符就交了,加上去得到 flag{Th1s_is_FlaG_you_aRE_rigHT} 就是正确的 flag 咯。

4、隐藏的信息#

给出的二维码补全了后并没有什么用

拖进 winhex 查看压缩包发现是伪加密,将标志位修改后打开.wav 文件,里面的开头和末尾有隐藏的拨号音

并且在 winhex 中同样发现了二维码图片的隐藏提示

22.png

23.png

USE BASE64 TO GET YOUR FLAG

应该是将拨号音 base64 编码后即为 flag。

将拨号音切成几个小份的 wav,2 3 位一段,在群内大佬们的帮助下和一上午的尝试下,最终拿到了正确的拨号数字

187485618521

编码后提交即可

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月30日13:59:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XCTF战役原创http://cn-sec.com/archives/1380168.html