분류 전체보기 299

[Dreamhack Wargame] Cat-Jump

Step1: 일단 else if문을 통과해 CAT-JUMP를 37번 해야함 void StartGame() { char cat_name[32]; char cmd[64]; // 생략 srand(time(NULL)); catnip = 0; jump_cnt = 0; puts("let the cat reach the roof! 🐈"); sleep(1); do { obstacle = rand() % 2; do { printf("left jump='h', right jump='j': "); scanf("%c%*c", &input); } while (input != 'h' && input != 'l'); if (catnip) { catnip--; jump_cnt++; puts("the cat powered up and..

[Dreamhack Wargame] STB-lsExecutor

소스코드이다. 처음엔 필터링 우회해서 효과적인 command를 구성하려 했는데 어림도 없더라 read_data(data,60); size = snprintf(command, 30, "ls -%s ", data); printf("Enter path : ") read_data(&command[size], 70); system(command) ** snprintf 취약점 ** snprintf는 두 번째 인자로 size(입력받을 input 크기)를 지정할 수 있지만 snprintf의 반환값은 버퍼에 실제로 쓰인 문자의 수가 아니라, 버퍼가 무한하다고 가정했을 때 쓰이게 될 문자의 수라고 한다 따라서 read_data에서 data에 60자 입력 시, 마지막 null 바이트 치환되면서 59자가 되고 size = 0..

[Dreamhack Wargame] FSB_Overwrite

Full RELRO, NX, PIE, No canary, 64bit ELF buf에 엔터포함 0x20자까지 입력 가능, 입력값이 바로 printf 인자로 들어감 => fsb 취약점 changeme 전역변수를 1337로 바꾸기만 하면 됨 PIE 적용되어있어서 changeme 주소 계속 바뀜 - 스택에 있는 main함수 주소(rsp+0x48)를 leak해서 changeme 주소를 구한다 * changeme 주소가 rip+0x200700로 결정되므로 CODE 섹션과 DATA 섹션 간 offset 일정 - 스택상에 changeme 주소를 쓰고 * 처음에는 %ln으로 changeme 주소를 스택에 쓰려고 했으나 ($rsp+0x58 = %17$p 위치에 rsp+0x148 주소가 담겨있다) 왠지 모르게 큰 값의 경우..

[Dreamhack Wargame] Master Canary

Master Canary라는 개념을 새로 알게 되기도 했고 Core Dump file을 이용한 분석 방법도 새로 알게 되어 메모 겸 자세히 남긴다 Master Canary TLS (Thread Local Storage) 영역은 스레드의 전역변수를 저장하기 위한 공간으로 Loader에 의해 할당된다 FS 세그먼트 레지스터는 TLS 영역을 가리킨다 스택 버퍼를 사용하는 모든 함수에서는 같은 카나리 값(fs:0x28에 위치한 값)을 사용한다. 다른 쓰레드도 마찬가지 임의 함수에서 stack canary를 leak할 경우 다른 함수에 응용 가능 TLS 주소(FS 세그먼트 레지스터 주소)에서 0x28 바이트만큼 떨어진 주소에 위치한 랜덤 값을 우리는 Master Canary라고 부른다 디버거에서는 $fs_base..

2022 CCE 예선 - 공용/일반

PWNABLE [100] - BYNANCE - 라이브러리 로드도 안되고, p system 해도 함수가 안찾아지며, got/plt도 딱히 없었다 - ida로 열었을 때 function window에 함수가 수상할정도로 많다 - file ./byenance 해보면 확실히 알 수 있다 => statically compiled binary 보호 기법은 : Partial RELRO / No Canary / No PIE / NX bit IDA 디컴파일 결과 __int64 __fastcall buy_eth(__int64 a1, __int64 a2) { // 생략 puts("how many eth do you want to buy?", a2, v8); fgets(v7, 1024LL, stdin); num = atoi(..

security/CTF 2023.06.10

2022 CCE 예선 - 청소년

WEB HACKING [100] - Request forgery SSRF 문제. File Scheme을 이용해 서버 내부의 flag 파일을 읽어와야됐는데 URL 필터링 적용되어있음. => file:// , file:/// , etc 등등 필터링되어있는 것 같았음 필터링 걸렸을 시 '잘못된 URL' alert 창이 뜬다 file:/flag 해서 검색하면 'http://prob2.cstec.kr:5583/image.php?url=file%3A%2Fflag' 이렇게 GET 요청 가면서 다운로드 페이지로 감. untitled.png 다운로드 되는데 당연히 이미지파일은 아니고 hxd로 열어보니 이렇다~ WEB HACKING [100] - Login me Easy blind SQL Injection 쿼리 예상 SE..

security/CTF 2023.06.08