전체 글(86)
-
[How2heap] Fastbin Dup
Double Free Double Free Bug란 같은 청크를 두 번 해제할 수 있는 버그로 공격자에게 임의 주소 쓰기/읽기, 임의 코드 실행등의 수단으로 활용될 수 있습니다. 같은 청크를 두 번 해제한다면 이후 malloc 함수를 호출할 시 동일한 메모리 주소가 반환되면서 공격자는 chunk의 metadata를 조작할 수 있습니다. Fastbin dup Fastbin dup은 Double Free Bug를 이용하여 fastbin에 배치된 리스트를 악용한 공격입니다. 동일한 fast chunk를 중복으로 해제할 경우 해당 chunk들 fastbin에 중복으로 배치됩니다. 이렇게 중복으로 배치된 chunk들은 이후 malloc을 통해 처음 재할당으로 chunk의 fd를 변조하고 두 번째 재할당으로 임의 ..
2022.12.23 -
Advance 03
먼저 DIE를 통해 분석한 결과 MASM32로 컴파일된 것을 확인할 수 있습니다. MASM은 인텔 문법을 사용하는 MS-DOS 및 마이크로소프트 윈도우용 x86 어셈블러입니다. 프로그램 실행 화면입니다. Name과 Serial을 입력할 수 있습니다. 이번 문제는 Name이 CodeEngn일 때 Serial를 찾는 문제입니다. 현재 프로세스의 핸들 값을 얻고 DialogBoxParamA API를 실행합니다. 해당 API는 대화 상자를 만드는 함수입니다. 3번째 인자는 lpDialogFunc로 대화 상자 프로시저에 대한 포인터입니다. 해당 프로시저를 분석해보도록 하겠습니다. 먼저 Name의 길이가 3 미만이면 "You failed..."라는 구문을 띄웁니다. 401277 함수가 실행된 뒤 0x403000에 ..
2022.04.30 -
Advance 02
문제에서 제공되는 파일을 분석한 결과입니다. 따로 패킹되지 않았습니다. x32dbg로 분석을 해보도록 하겠습니다. 디버깅 중 해당 부분에서 에러가 발생해 다음 부분으로 넘어가지 못합니다. 해당 함수는 dll의 이름을 추출합니다. 0x40653C 함수 종료 뒤 dll의 이름을 인자로 전달되는 함수가 있는데 해당 함수의 결과 값을 0x1171과 비교합니다. 틀리다면 0x402C94로 점프하게 됩니다. 0x40653C 함수가 3번째에 eax가 0이 되어 에러가 발생하게 됩니다. 그래서 2번째 반복됐을 때 sub_402BE0 함수의 리턴 값을 ax와 비교하게 만들어 조건문을 통과시킬 수 있습니다. 패치한 파일을 실행시키면 위와 같은 문자열이 뜨면서 프로그램이 시작합니다. 비밀번호를 입력한 뒤 어떻게 진행하는지 ..
2022.04.30 -
Advance 01
먼저 PE 파일 분석을 하니 UPX로 패킹된 것을 확인할 수 있습니다. 그래서 먼저 언패킹을 하였습니다. 언패킹을 한 뒤 x32dbg로 분석을 하니 위와 같은 에러 메시지가 뜨면서 종료되었습니다. 그래서 자세히 분석을 해보니 IsdebuggerPresent라는 안티 디버깅 함수가 사용되는 것을 확인하게 되었습니다. 그래서 test eax, eax를 xor eax, eax로 변경하여 우회를 하였습니다. 패치한 파일을 다시 분석해보도록 하겠습니다. 먼저 컴퓨터가 켜진 뒤 실행된 시간을 출력하는 api인 timeGetTime에 break point를 걸고 진행하였습니다. 여기서 멈췄는데 timeGetTime 주소를 edi로 옮긴 뒤 실행합니다. eax(결과 값)의 값을 esi에 옮깁니다. 그리고 Sleep 함..
2022.04.29 -
you_are_silver
문제에서 주어진 프로그램을 디컴파일한 결과입니다. fgets 함수를 통해 s 배열에 데이터를 46byte를 입력할 수 있습니다. 이때 배열은 40byte이지만 입력은 46byte만큼 입력할 수 있어 6byte만큼 더 입력할 수 있습니다. 이때 6byte 입력으로 v6 변수의 2byte를 변조할 수 있습니다. 다음 printf 함수는 사용자 입력에 대한 검증이 없어 FSB가 발생합니다. 다음 v6를 인자로 get_tier 함수가 실행됩니다. 인자의 값에 따라 다른 값들을 리턴합니다. 값이 75 초과면 "You are challenger."라는 문자열을 출력한 뒤 4를 리턴합니다. 이후 get_tier의 리턴 값을 인자로 printf 함수를 실행합니다. 이때 뭔가 printf가 아닌 다름 함수가 실행되어야 ..
2022.04.08 -
starwars_galaxies2
문제에서 준 ELF 파일을 디컴파일한 결과입니다. 0. Create player 1. Play 2. View player 3. Exit 3개 기능이 존재합니다. 각 함수들이 어떤 역할을 하는지 확인해보겠습니다. _int64 __fastcall create_player(__int64 a1) { __int64 result; // rax int v2; // [rsp+18h] [rbp-78h] BYREF int v3; // [rsp+1Ch] [rbp-74h] BYREF char src[108]; // [rsp+20h] [rbp-70h] BYREF unsigned int i; // [rsp+8Ch] [rbp-4h] printf("Enter your player name: "); __isoc99_scanf("%10..
2022.04.08