본문 바로가기

CodeGate 2010 - yboy ( xbox pwned ) 보호되어 있는 글입니다. 더보기
CodeGate 2015 Quals - Mashed Potato CodeGate 2015 Quals - Pwnable 600pt, Mashed Potato 메모리 보호기법은 SSP와 NX, ASLR만 걸려있는 상황이고,비슷한 환경으로 구성하고 다시 풀어봤다. ( 로컬 환경 구성 : Ubuntu Linux 14.04 x86_64 ) 먼저 취약점으로 보이는 부분은 바로 보인다. leave_plain() 함수 내부에서 fgets 입력을 2번 받는데, 첫번째로 입력받은 값만큼 2번째 입력을 받는다. 이 부분에서 BOF가 발생하는데, SSP가 걸려있기 때문에 canary 값을 알아내야 했다. 사실 바이너리 자체는 로그를 남기는 기능만 했는데, 선택지가 2개밖에 없기 때문에 ( 1. 암호화 // 2. 평문 // 3. 종료 )그냥 바로 암호화 부분의 함수를 보면.. 입력받을 최대.. 더보기
DEFCON 2015 prequals - wwtw DEFCON 2015 prequals, wwtw FSB 문제, 라이브러리 정보 없음. [# 2015.06.22 -> 이해하기 쉽게 헷갈리는 변수명 수정] 메모리 보호기법은 PIE까지 다 걸려있다. 아래와 같이 게임? 하는 부분으로 시작한다. 20x20 맵 상에서 움직여서 E까지 움직이면 되는데, 스테이지를 5개 깨면 게임은 끝나고 인증부분으로 넘어간다. 게임 자체에는 공격벡터가 없다. 이 부분을 자동화해서 코딩해야 좀 더 분석이 편해졌을텐데, 게임 부분은 직접 움직이는 쪽으로 코딩해서 분석에 오래걸렸다. 나중에 자동화 코드도 짜봐야겠다. 게임이 끝나면 위와 같은 인증함수로 넘어가는데, Key값을 얻어내는건 어렵지않다. Key값은 "UeSlhCAGEp" 이다. 문제로 주어진 바이너리에는 FSB 취약점이 존.. 더보기
Plaid_CTF 2014 - ezhp 보호되어 있는 글입니다. 더보기
CodeGate 2015 Quals - Sokoban CodeGate 2015 Quals - Pwnable 1000pt, sokoban 로컬 환경 구성 -> Ubuntu Linux 14.04 x86_64 ( 라이브러리 : libc-2.19.so ) 코드게이트 예선 때 못 푼 문제였는데, 롸업이 올라왔길래 정독해보고 다시 풀어보았다. 바이너리로 주어진 파일을 실행시켜보니 위와 같이 "[]"를 골인 지점으로 옮기는 게임 형식이다.소스 분석 중, 가장 먼저 눈에 띈 부분은 아래 그림과 같이 stage 6 에서 게임 모드를 선택하는 부분이 있다. 랜덤-무한 모드를 선택할 경우, 낮은 확률로 아래와 같이 히든 맵(공간이 막혀있지 않은 맵)이 나온다.코드게이트 때는 저 부분도 발견하지 못했었는데, 롸업을 보고 발견하니 허탈했다. 이걸 발견했어도 풀진 못했을 것 같긴 .. 더보기
Codegate 2015 - Bookstore 메모리 보호기법이 있는대로 다 걸려있다. 이런 문제는 처음이라 당황스러웠는데eip를 컨트롤하기 위해 주소값을 알아내야 하고, 이를 위해메모리릭이 필요한 점 외에 다른 부분은 크게 신경쓰지 않고 풀었다. 책 정보에대한 구조체.특이한점은 alloca함수에 의해 스택에 메모리가 할당된다는 점과 함수포인터를 2개 가지고 있다는 점.전체적인 흐름을 보면 구조체가 스택을 통해서 복붙하는 방식으로 진행된다.아래 함수를 보면.. 이 부분을 통해 스택에 스프레이식으로 임의의 값을 뿌릴 수 있는데, 특정 조건에 따라 eip컨트롤이 가능하다. 과정이 살짝 복잡한데 UAF 유형 문제와 비슷하게 생각하면 쉽다. 변수 free_ship에 대한 세팅 (위 그림에서 v14변수)이 0일경우구조체 내부에 존재하는 함수포인터를 초기화하지.. 더보기
B-Sides Vancouver 2015 - Ownable 400 왜 Ownable 이라고 되있는건지는 모르겠다NX만 적용되어있다. Character를 재설정하는 과정에서, read_data 함수 내부에서 오버플로가 발생한다. 하지만 아래와 같이 \n, \x0 ~ \x1f, \x7f 은 필터링 되는 부분이므로 이부분을 피해서 입력이 가능하다. 필터링을 우회하는 부분은 이부분을 통해 해결헀다.먼저 위 그림(Generate_dungeon함수 내부)에 보면, 던전의 레벨을 입력하는 부분이 있는데unsigned __int8 자료형인 v6 변수에 입력을 받는다, 하지만 다음 조건절에서는 (char)형으로 형변환되므로255(0xFF)를 입력해주면 조건절을 통과할수 있다.그리고 mmap을 통해 할당되는 메모리는 0x2015000 + 255 * 0x1000 이 된다. 0x201500.. 더보기
Codegate 2015 푼거 + 풀다만거 정리 보호되어 있는 글입니다. 더보기
CSAW 2014 pwn_500 xorcise /* -------------------------- XORCISE ENTERPRISE EDITION -------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include #define BLOCK_SIZE 8 #define MAX_BLOCKS 16 #define FILE_ERROR "Unable to open file." #define AUTH_ERROR "Authentication Required." struct cipher_data { uint8_t length; uint8_t key[8]; uint8_t bytes[128];.. 더보기
[CodeGate_2013] pwn500 kpop_music UAF 문제를 공부하려고 풀어본 문제 헥스레이로 흐름을 확인해보니.. 2종류의 구조체가 정의되어있는듯했다.첫번째 구조체는 구조체 배열의 주소와 갯수를 나타내고두번째 구조체는 함수포인터, 제목(문자열), url 길이, url 의 주소를 나타낸다.함수 포인터가 존재하는 구조체 -> 이런경우 대개 UAF문제인듯 문제를 풀면서 여러가지로 이상한 부분이 많았다. 2번째 구조체의 초기화부분 함수 포인터 주소 밑에는 공격가능한 함수 이 문제의 취약점은 저부분이다unsinged int를 signed int로 형변환하므로 음수값을 넣으면 조건절이 참이된다.그리고, song_info의 주소를 계산하는과정에서 4*number + a1->song_info_addr 으로 계산한다.아무리봐도 계산하는 방식이 이상하다.만약 num.. 더보기