Pwnable/LOB

Pwnable/LOB

[LOB] 12. DARKKNIGHT

passcode : new attacker (NO DRAG, NO PASSCODE) bash2. 소스코드를 바로 분석해보자. 코드에서 argv[1][47] == '\xbf' 이면 프로세스가 종료되므로 우리가 사용한 일반적인 BOF로는 풀리지 않을 것 같다. 이 문제는 RTL(Rrturn To Library) 기법을 사용하는 문제인 것 같다. 우선 RTL 기법에 대해서 알아보자. RTL을 이해하였다면 이제 바로 문제를 풀어보자. bugbear 프로그램의 메모리 구조와 새로 추가해줄 dummy + parameter 의 구조는 다음과 같다. —————————— High Address | parameter | → "/bin/sh" 문자열의 주소 —————————— | dummy(4) | —————————— | ..

Pwnable/LOB

[LOB] 11. GOLEM

passcode : cup of coffee (NO DRAG, NO PASSCODE) bash2 까먹지 말자. 소스코드부터 분석해 보자. 우선 이전의 문제들과는 다르게 main 함수에서 problem_child 함수를 호출한다. 또한 41bytes만큼을 입력받기 때문에 RET을 우리가 원하는 주소로 변조할 수 없다. 하지만 41bytes를 입력받을 수 있어서 SFP의 마지막 1byte를 변조시킬 수 있다. SFP의 마지막 1byte를 변조시켜 프로그램의 흐름을 뒤바꾸는 기법을 FPO라고 한다. FPO 기법 SFP 영역에서 1byte 변조(오버플로우)가 가능해야 함 main 함수 외에 다른 sub 함수가 있어야 함 SFP의 마지막 1byte를 변조하면 코드의 흐름이 바뀌는 이유는 함수의 프롤로그와 에필로그..

Pwnable/LOB

[LOB] 10. SKELETON

passcode : shellcoder (NO DRAG, NO PASSCODE) bash2. 소스코드를 분석해보자. 따라서 우리가 사용할 수 있는 메모리 영역은 ret 영역(4bytes) 밖에 없다. 그렇다면 다른 메모리 영역을 사용해야 한다. 우리가 자주 쓰는 함수들(printf, scanf 등)은 프로그램을 실행할 때마다 함수에 대한 정보를 프로그램에 포함시키는 것은 매우 비효율적인 일이다. 따라서 공유 라이브러리를 사용하여 컴파일하는 시점에 공유 라이브러리와 연결만 하는 방법을 사용한다. 이를 위하여 존재하는 LD_PRELOAD 라는 환경변수가 존재하는데, 이 환경변수는 공유 라이브러리 영역에 올라가게 된다. LD_PRELOAD에 환경변수를 등록되면, 프로그램이 메모리에 올라가기 전에 환경변수에 등..

Pwnable/LOB

[LOB] 9. VAMPIRE

passcode : music world (NO DRAG, NO PASSCODE) bash2. skeleton 이다. 바로 소스코드를 분석해보자. 모든 인자가 0으로 초기화 된다. 문제를 풀기 위해서는 인자를 무조건 넣어야 한다. 아마 0으로 초기화 시켜도 바뀌지 않는 영역이 있을 것이다. 한번 프로그램의 이름이 저장되는 영역을 찾아보자. 이와 같이 메모리에 프로그램의 절대 경로와 이름이 남게 된다. 즉 argv[0]은 변화하지 않는 것 같다. argv[0]만 사용 가능했던 orge 문제와 아주 유사하다고 볼 수 있다. 우선 tmp 디렉토리를 만들고 skeleton 프로그램을 복사하자.여기서 core dump를 일으켜 정확한 argv[0] 주소를 찾은 뒤에 payload를 작성하여 쉘을 따면 될 것 같다..

Lucvs
'Pwnable/LOB' 카테고리의 글 목록 (3 Page)