Pwnable

Pwnable/LOB

[LOB] 6. DARKELF

passcode : kernel crashed (NO DRAG, NO PASSCODE) bash2 입력. 슬슬 코드가 길어진다. 분석해보자. here is changed 라고 친절히 알려주었다. argv[0]의 길이를 77bytes로 만들어주어야 한다. 프로그램을 실행할 때 argv[0]는 프로그램의 이름에 해당한다. gdb로 분석한 메모리 구조는 다음과 같다. —————————— High Address | ret(4) | —————————— | sfp(4) | —————————— ← ebp | buffer(40) | —————————— | int(4) | —————————— Low Address 이제 buffer 의 주소를 구해보자. 따라서 buffer의 주소는 0xbffffbf1 이..

Pwnable/LOB

[LOB] 5. WOLFMAN

passcode : love eyuna (NO DRAG, NO PASSCODE) bash2. 바로 소스코드 분석하자. 이번에는 orc 문제와 다르게 buffer 에 값을 넣을 때 길이 검사도 한다. strcpy는 공백도 복사하기 때문에 이를 이용하여 문제를 해결할 수 있다. argv[1] 뒤에 NOP Sled 와 shellcode 를 이어붙이지 못하니 argv[1] 뒤에 공백을 두어 argv[2], 즉 인자를 추가로 하나 더 부여하여 buffer와는 다른 메모리 영역에 NOP Sled 와 shellcode가 존재하도록 하자. 우선 gdb를 이용하여 분석한 메모리 영역은 다음과 같다. —————————— High Address | ret(4) | —————————— | sfp(4) | —————————— ..

Pwnable/LOB

[LOB] 4. ORC

passcode : cantana (NO DRAG, NO PASSCODE) bash2 입력후 파일들을 살펴보자. 소스코드 분석 해보자. 이전 문제였던 goblin과 매우 동일하나 buffer의 값이 모두 0으로 채워져 있다. 따라서 buffer를 사용하지 못한다. 이럴 때는 어떻게 해야 할까? 일단 buffer 안에는 shellcode를 못 넣으므로, buffer + sfp 을 넘어서 ret 뒤에 NOP와 함께 shellcode를 붙여야겠다. 그러면 NOP Sled 를 타고 쉘이 실행될 것이다. 먼저 gdb로 메모리 구조를 분석하자. 메모리 구조는 다음과 같다. —————————— High Address | ret(4) | —————————— | sfp(4) | —————————— ← ebp | buff..

Pwnable/LOB

[LOB] 3. GOBLIN

passcode : hackers proof (NO DRAG, NO PASSCODE) bash2 조심. orc 프로그램과 소스코드가 있다. 분석하자. 중간에는 크게 의미없는 코드인줄 알았지만 환경변수를 모두 0으로 만들어서 환경변수를 쓰지 못하게 만들고 있다. 즉 전에 썼던 export를 사용하지 못한다. 또 egghunter 라는 것을 보니 환경변수는 못 쓸 것 같다. 우리는 argv[1][47]을 ‘\bf’로 만들어주어야 한다. 이제 gdb를 통하여 메모리 구조를 살펴보자. 메모리 구조는 다음과 같다. —————————— High Address | ret(4) | —————————— | sfp(4) | —————————— ← ebp | buffer(40) | —————————— | int(4..

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