CTF相关
未讀SIGNINEz_Caesar
题目描述:小蓝鲨看你们牢底坐穿决定送你们一点分。
下载附件:
def variant_caesar_encrypt(text): encrypted = "" shift = 2 for char in text: if char.isalpha(): if char.isupper(): base = ord('A') new_char = chr((ord(char) - base + shift) % 26 + base) else: base = ord('a') new_char = chr((ord(char) - base + shift) % 26 + base) encrypted += new_char shift += 3 ...
CTF相关
未讀基本介绍以一个耳熟能详的Hello World程序切入:
#include <stdio.h>int main(int argc, char* argv []) { printf("Hello, world!\n"); return 0; }
通过gcc编译为ASM形式并输出得到:
.section .rodata.LC0: .string "Hello, world!" .text .globl main .type main, @functionmain: push rbp mov rbp, rsp sub rsp, 16 mov DWORD PTR [rbp-4], edi //字符串值赋给edi mov QWORD PTR [rbp-16], rsi mov edi, OFFSET FLAT:.LC0 //传参完毕 call puts ...
概述ret2shellcode是栈溢出利用ret2text、ret2shellcode、ret2libc三大类中的一个,是指攻击者需要在程序没给shell的情况下自己调用shell的机器码(即shellcode)注入到程序内存中,随后就是利用栈溢出复写return_address,跳转至shellcode所在内存,执行shell命令,得到flag。
可能的exp姿势1.注入shellcode至stack段中这个现在其实很少见了,基本上都加了保护。其中,比较常见的保护手段有:
ASLR:其功能是将一部分内存段(如栈…)的地址偏移,在注入时难以定位其位置。
NX:使得部分内存段(如堆、栈…) 不可执行,无法执行注入的代码。
Canary:原理是在栈底插入cookie信息,函数返回时将检测该信息是否被改变,若改变,则断定发生栈溢出
2.注入shellcode至bss段中在虚拟内存当中,bss段主要保存无初值的全局变量/静态变量(在assmbly中以占位符?声明)。若程序的bss段可写、可执行,则可以把shellcode写入全局变量/静态变量中。
例题一.[GDOUCT ...
CTF相关
未讀WEB[Week4] Path to Hero
题目描述:初出茅庐的勇者啊,你能战胜魔王,得到至宝吗?
打开靶机,观察前端显示:
<?phphighlight_file('index.php');Class Start{ public $ishero; public $adventure; public function __wakeup(){ if (strpos($this->ishero, "hero") !== false && $this->ishero !== "hero") { echo "<br>勇者啊,去寻找利刃吧<br>"; return $this->adventure->sword; } else{ echo "前方的区域以后再来 ...
algoezzz_base
题目描述:欸,这个base怎么有点不一样??
打开附件,
dict:{0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', ...
CTF相关
未讀Crypto[Week1] Basic Number theory
题目描述:数论并非那么简单…
下载附件并打开:
from Crypto.Util.number import *from secret import flagdef gift(m, prime): return pow(m, (prime + 1) // 2, prime)m = bytes_to_long(flag)p = getPrime(256)q = getPrime(256)print(f'p = {p}')print(f'q = {q}')print(f'gift1 = {gift(m, p)}')print(f'gift2 = {gift(m, q)}')# p = 71380997427449345634700552609577271052193856747526826598031269184817312570231# q = 65531 ...

