전체 글

Department of Computer Science and Engineering, 21th, Sungkyunkwan University
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 를 기계어로..

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..

Lucvs
Lucvs