본문 바로가기

Wargame Write-Up141

(HackCTF) ChildFSB writeup int __cdecl main(int argc, const char **argv, const char **envp) { char buf[24]; // [rsp+0h] [rbp-20h] BYREF unsigned __int64 v5; // [rsp+18h] [rbp-8h] v5 = __readfsqword(0x28u); Init(argc, argv, envp); puts("hello"); read(0, buf, 0x19uLL); printf(buf); return 0; } baby fsb 문제는, leak&got overwrite 으로 __stack_check_fail 함수에서 메인으로 돌린 뒤, 릭한 주소로 onegadget 을 구해 __stack_check_fail@got 에 덮었다. 이번엔 input.. 2022. 2. 24.
(HackCTF) wishlist writeup TL;DR, no heap ex, ROP with stack pivoting puts("1. make wish"); puts("2. view wish"); puts("3. remove wish"); make, view, remove 할 수 있는 heap challenge __int64 sub_4008A7() { char buf[16]; // [rsp+0h] [rbp-10h] BYREF printf("input: "); read(0, buf, 0x20uLL); return (unsigned __int8)buf[0]; } 1,2,3 번호입력할 떄 사용하는 함수. buf[0] 을 리턴하긴 하지만 ret address 까지 덮을 수 있다. 수상하다 1. make __int64 sub_400910() { int .. 2022. 2. 24.
[Lord of SQLI] succubus, zombie_assassin, nightware, xavis, dragon 풀이 succubus id, pw 에서 ' (싱글쿼터)를 필터링하고있다. 그래서 \ (슬레시) 를 이용해야한다. id 에\ 를 넣는다면,id='\' and pw='' 여기서 \' and pw= 부분이 id 가 되니 pw 에 or 문을 넣어서 임의 계정을 뽑아올 수 있다. payload : id=\&pw=+or+1=1%23 zombie_assassin addslashes 으로 sqli 를 막는 것처럼 보이는데, ' -> \' -> '\ 이런식으로 변한다. 그래서 succubus 문제처럼 pw= 까지 id 로 인식하게 해서 풀면 된다. 근데 싱글쿼터를 넣으면 id=''\ 가 되어 쿼리가 망가지기 때문에, 더블쿼터를 넣어야 한다. pw 는 위에서 썼던거 꺼꾸로 입력하면 된다. payload : id="&pw=%23.. 2022. 2. 19.
(HackCTF) childheap writeup unsigned __int64 Malloc() { int v0; // ebx int v2; // [rsp+0h] [rbp-20h] BYREF int v3; // [rsp+4h] [rbp-1Ch] BYREF unsigned __int64 v4; // [rsp+8h] [rbp-18h] v4 = __readfsqword(0x28u); printf("index: "); __isoc99_scanf("%d", &v2); if ( v2 4 ) exit(1); printf("size: "); __isoc99_scanf("%d", &v3); if ( v3 128 ) exit(1); v0 = v2; *(&ptr + v0) = malloc(v3); if ( !*(&ptr + v2).. 2022. 2. 10.