전체 글

ctf

2025 Codegate Writeup

2025년 3월 29일에 글로벌 국제해킹방어대회 Codegate CTF가 열렸습니다. 많은 문제들을 풀지는 못했지만 제가 푼 문제의 writeup을 올려보고자 합니다. 제가 푼 문제는 secret_note와 todo_list 이며 todo_list는 ctf 기간 동안 풀지 못하여 업솔빙을 하였습니다. secret_note간단한 heap note challenge 이다. 할당, 수정, 해제 가 가능하다. create를 4번하고 모두 해제하여 fastbin에 chunk를 넣어주고 create size 1024를 하여 small bin에 보내서 libc leak을 해준다.(key 값 brute focing) 그리고 libc overwrite가 가능하니 stdout fsop를 해줬다. exploit.py뉴비때 ..

후기

BOB 13기 [취약점 분석] 트랙 수료 후기

길면 길고, 짧다면 짧은 8개월의 고된 교육 끝에 3월 26일 수요일, BOB 13기 인증식을 마쳤습니다. 사실 뭐 하나 끝날 때마다 후기를 적어서 더 이상 적을 후기도 없지만, 마지막으로 하나 남기고자 합니다.BOB 교육을 시작한 게 엊그제 같은데 벌써 수료를 하고 복학한 뒤, 학교를 다니는 중입니다. 아쉽게도 Top 30에는 들지 못했기 때문에, 프로젝트 이후에는 3차 교육을 들으면서 개인적인 공부를 위주로 하였습니다. 3차 교육은 전반적으로 공통 교육과 비슷한 양상을 띠었지만, 퀄리티와 난이도는 공통 교육에 비해 현격히 높았습니다. 공통 교육이 단순히 기본기라면, 3차 교육은 실전 기본기를 배우는 느낌이었습니다.수료를 하고 난 뒤의 감정은 “후련하다”와 “아쉽다”인 것 같습니다. 지난 8개월은 정말..

mips

mips rop

mips에서도 bof가 발생할 경우 rop가 가능하다. 하지만 x64 rop와 큰 차이점이 2가지 있다. 첫 번째로x64 rop는 pop rdi; ret ; pop rsi; pop rdx ; ret  뭐 이런식으로 rsp 가 움직이면서 인자 값을 레지스터에 딱 딱 넣는다. 그러나 mips의 레지스터에 값을 저장하는 방식은 sp를 기준으로 n만큼 떨어진 주소의 값을 가져오는 방식을 사용한다.즉, sp는 가만히 있고 a0 = [sp+0x10] , a1 = [sp+0x20] 이렇게 인자를 가져오기 때문에 가젯을 구하는게 상당히 힘들다.예를 들어서 가젯을 구했는데 a0의 값도 sp+0x10 에서 가져오고 a1의 값도 sp+0x10에서 가져온다면 두 가젯중 하나만 사용 가능해진다. 또한 깔끔한 가젯이 없기 때문에..

mips

mips shellcode

execve("/bin/sh",0,0) 를 실행하는 main 함수의 어셈블리 코드는 다음과 같다.mips도 execve 함수 내부에서 syscall 이 이루어진다.x64에서는 syscall이 호출되었을 때 rax 값에 따라 어떤 작업을 수행할 지 결정되는데 misp는 해당 역할을 v0이 수행한다. 인자 순서는 a0, a1, a2 순서이다.syscall 직전에 레지스터 값을 확인해보자.v0 : 0xfaba0 : "/bin/sh" 주소a1 : 0a2 : 0 이제 쉘코드를 만들어 보자. 다음과 같이 어셈블리코드를 짤 수 있다..section .text .globl _start_start: li $t0, 0x2f62696e sw $t0, ($sp) li $t0, 0x2f2f7368 s..

mips

mips 스택프레임, 레지스터, 어셈블리어

mips 스택프레임#include void a(){ char buf[0x30]; printf("this is a\n"); read(0, buf, 0x30); b();}void b(){ printf("this is b\n");}int main(){ printf("this is main\n"); a();}위 함수를 예제로 하여 설명해겠다. 프롤로그addiu sp, sp, -32sw ra, 28(sp)sw s8, 24(sp)move s8, spsp에 -32를 빼서 공간을 확보한다.sw ra, 28(sp) 로 sp + 28 에 ra를 저장한다. 이는 복귀주소를 저장해놓은 것이다. (ret)sw s8, 24(sp) 로 sp +..

mips

mips - 기본 개념

mips 란?Microprocessor without Interlocked Pipelined Stages 아키텍처 중 하나로 4byte 주소체계를 가진 RISC 기반 명령어이다.mips의 특징중에는 특이한 것이 하나 있는데 바로 "delay slot" 이라는 것을 사용한다.이는 branch 나 jump같은 분기 명령이 실행될 때 다음 줄 명령까지 실행한다는 것이다. 그렇기 때문에 rop 를 짤때 마지막 한 줄을 생각해줘야 한다.예를 들어서 다음 코드를 보자.1) lw gp,24(s8)2) li a0,13) lw v0,-32584(gp)4) move t9,v05) jalr t96) nop다음과 같은 어셈블리 코드가 실행이 된다고 치자. 원래같으면 1, 2, 3, 4, ..

포너블

Fortify mitigation

Buffer overflow와 같은 메모리 관련 취약점을 막기 위해 gcc와 같은 컴파일러에서 제공하는 보호기법이다. 이는 소스코드에서 잠재적인 취약점을 탐지하고 런타임에 추가 검사를 통해 보안 향상을 한다.버퍼 오버플로우가 감지되면 프로그램을 종료한다. SSP와 비슷한 느낌이지만 동작방식은 아예 다르다. 동작 방식Fortify의 동작 방식은 buffer overflow 가 발생할 때 감지할 수 있는 특정 C 라이브러리 함수의 향상된 버전을 제공하는 방식으로 작동한다. 다시말해 strcpy,  memcpy, sprintf, memset, fprintf 등의 함수를 사용하면 컴파일 과정에서 __strcpy_chk, __memcpy_chk 로 변경한다.이러한 취약한 함수가 호출되면 fortify는 사용중인 ..

후기

BOB 13기 [취약점 분석] 프로젝트 후기

프로젝트가 끝나고 약 2주정도 쉰 후에 다시 공부를 시작한다.트랙교육은 몸이 많이 힘들었다면 프로젝트는 정신적으로 너무 힘들었다. 시간이 지나서 과거 미화가 된건지 모르겠지만 트랙교육은 그래도 재미는 있었던것 같다. 어찌됐든 과제이기 때문에 정답이 있는 것이고 시간만 때려밖으면 왠만하면 해결된다는 보장이 있는 것이기 때문에 힘들기는 해도 지치지는 않았다. 그러나 프로젝트는 트랙교육에 비해 잠도 많이 잤음에도 불구하고 정신적으로 너무 스트레스를 많이 받았고 12월에는 너무 지치고 쉬고싶었다. 아무튼 프로젝트는 결과적으로 나쁘지는 않았지만 좋다고 하기도 애매한 것 같다. 그래도 성과가 꽤 나와서 다행인것 같다. 프로젝트에 대해서 중요하게 평가되는 요소는 다음과 같다. ( 멘토님에게 들은 것 + 뇌피셜 ) 1..