포너블(18)
-
basic_rop_x86 풀이
문제에서 C 소스코드를 주네요? 분석해보겠습니다. 우선 initialize(), alarm_handler() 함수는 중요해 보이지 않으니 한 줄 해석만 하겠습니다. initialize() : buf 세팅, 30초 후에 alarm_handler() 함수에게 신호 전송 alarm_handler() : TIME OUT을 출력하며 프로그램 종료 그리고 read 함수로 buf를 0x400만큼 입력을 받으니 BOF가 발생합니다. write로는 read로 입력받은 buf를 출력해줍니다. 문제 정보를 보면 NX가 걸려있으니 쉘코드는 사용하지 못하겠네요. 문제 이름이 rop니까 ROP로 풀어보도록 하겠습니다. 우선 필요한 가젯을 모아보겠습니다. read와 write는 들어가는 인자가 3개니까 pop pop pop 가젯이..
2021.07.31 -
welcome 풀이
흠...? 코드를 보니 그냥 서버만 접속하면 FLAG를 딸 수 있을 것 같습니다. natcat으로 주어진 접속 정보에 접속해보겠습니다. ???? natcat 사용법만 알면 점수 꽁으로 먹는 문제네요? 이번 글은 풀이라고 해도 될지 의심이 가는 수준이네요..ㅋㅋ
2021.07.22 -
RTL_Core 풀이
안내 문자열을 출력해주고, gets() 함수로 s를 입력받습니다. 그리고 if문으로 가면 check_passcode() 함수에 s를 인자 값으로 넣은 리턴 값이 hashcode와 같냐는 조건이 보입니다. hashcode는 이따가 주소 값을 좀 찾아보도록 하겠습니다. 그럼 이제 check_passcode() 함수를 분석해보겠습니다. v2라는 int형 변수를 선언해서 0으로 초기화해줍니다. 그리고 0~5까지 for문을 돌려서 a1(main() 함수에서의 s)의 인자 값을 4byte씩 증가시키며 v2에 더해줍니다. 그리고 누적된 v2를 리턴합니다. 이제 hashcode의 주소 값을 확인해보겠습니다. 0C0D9B0A7(10진수로 3235492007) s에는 저 주소를 넣어주고 뒷부분을 0으로 채우면 될 것 같습..
2021.07.18 -
RTL_World 풀이
int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax int v4; // [esp+10h] [ebp-90h] char buf; // [esp+14h] [ebp-8Ch] void *v6; // [esp+94h] [ebp-Ch] void *handle; // [esp+98h] [ebp-8h] void *s1; // [esp+9Ch] [ebp-4h] setvbuf(stdout, 0, 2, 0); handle = dlopen("/lib/i386-linux-gnu/libc.so.6", 1); v6 = dlsym(handle, "system"); dlclose(handle); for ( s1 = v6; memcmp(..
2021.07.17 -
Offset 풀이
원래 다른 오버플로우 문제들은 다 실행파일을 줬는데 이 문제는 공유 라이브러리 형식으로 된 문제를 주네요? 우선 분석부터 해보겠습니다. v5에 main함수 인자 개수를 대입합니다. 그리고 문자열 하나를 출력 후 gest로 char형 배열 s를 입력받습니다. 그리고 select_func라는 함수에 s의 주소 값을 인자로 넣어 호출합니다. select_func() 함수는 무슨 기능의 함수인지 IDA로 보겠습니다. 함수 포인터인 v3를 선언하고, two로 초기화 해줍니다. 그리고 dest에 우리가 입력한 문자열을 담은 s를 0x1F(10진수로 31)만큼 복사해줍니다. dest가 "one"이면 v3를 one으로 바꿉니다. 그리고 v3() 함수를 호출해서 v3의 리턴 값을 리턴합니다. 이 함수가 끝인 줄 알고 I..
2021.07.14 -
Simple_Overflow_ver_2 풀이
이번 문제는 여태까지 풀었던 Buffer Overflow문제들보다 소스코드가 조금 복잡해 보입니다. 우선 문제 파일을 실행시켜보겠습니다. 코드랑 같이 보면서 설명하도록 하겠습니다. 우선 do-while 반복문을 사용하는데, do의 첫 부분에서 88-14=74(10진수로 116) 크기의 char형 배열 s를 \n(줄 바꿈 이스케이프 시퀸스)이 나오기 전까지 입력받습니다. 그리고 for문으로 들어가는데, size_t 형식의 변수 v3에다가 int형 변수 i를 대입합니다. 저는 여기서 size_t라는 타입을 처음 봐서 구글에 서칭을 조금 해봤습니다. size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입으로 반드시 unsigned 형으로 나타낸다. 나무위키에 siz..
2021.07.14