Pwnable

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를 작성하여 쉘을 따면 될 것 같다..

Pwnable/LOB

[LOB] 8. TROLL

passcode : aspirin (NO DRAG, NO PASSCODE) bash2. vampire 프로그램과 소스코드가 있다. 분석해보자. 이번 문제는 shellcode 를 export 해도 된다. shellcode의 주소를 ret 주소에 넣으면 될 것 같다. 하지만 argv[1][46] == '\xff' 이어야 한다. 지금까지의 buffer 주소 및 NOP의 주소는 0xbfffxxxx 의 형태였다. 하지만 이 문제는 그런 주소를 사용하지 못한다. 우선 메모리 구조는 다음과 같다. —————————— High Address | ret(4) | —————————— | sfp(4) | —————————— ← ebp | buffer(40) | —————————— Low Address 따라서 주소를..

Pwnable/LOB

[LOB] 7. ORGE

passcode : timewalker (NO DRAG, NO PASSCODE) bash2. 바로 소스코드를 살펴보자. 이번에는 argc 까지 제한되어 있다. buffer에 직접 shellcode를 박을 수도 없다. 또한 ret 주소에 shellcode를 export하여 주소를 넣고 싶어도 환경변수를 사용하지 못할 뿐더러 argv[1]이 0으로 초기화 되기 때문에 이는 적절한 방법이 아니다. 따라서 argv[1]는 건드릴 수 없다. 결국 우리는 argv[0]에 shellcode를 넣는 수밖에 없다. argv[0]에는 길이 제한이 없기 때문에 이 shellcode를 여기에 넣으면 될 것 같다. 우선 shellcode를 이용해야 한다. 하지만 지금까지 사용한 shellcode는 /bin/bash 를 기계어로..

Lucvs
'Pwnable' 카테고리의 글 목록 (8 Page)