HanJeouk의 개인공부 블로그

Wargame/Load Of Buffer overflow +6

#LOB 문제를 풀 때는 bash2 명령어를 꼭 입력해야한다. LOB는 더미가 없다.


코드를 보면

argv[1]의 길이를 확인하는 필터가 추가되었다.

하지만 나는 argv[1]을 초과하는 일이 없으니 똑같이 풀면 된다.

strcpy하는 부분에 브레이크 포인트를 걸고 실행하여 argv[2]의 주소를 얻고 페이로드를 작성하여 실행하면 쉘이 따진다.

만약 실패했다면 생성된 core 파일을 gdb로 열어 argv[2]의 주소를 재설정해주면 된다.



'Wargame > Load Of Buffer overflow' 카테고리의 다른 글

LOB 5번 orc  (0) 2017.05.10
LOB 4번 goblin  (0) 2017.05.07
LOB 3번 cobolt  (0) 2017.05.02
LOB 2번 gremlin  (0) 2017.05.02
LOB 1번 gate  (0) 2017.05.02

#LOB 문제를 풀 때는 bash2 명령어를 꼭 입력해야한다. LOB는 더미가 없다.


코드를 보면

저번 문제와 크게 다르지 않다.

빠르게 풀겠다. argv[2] 주소를 알러 ㄱㄱ

strcpy 부분에 브레이크 포인트를 설정하고

이런식으로 실행한다.

nop 가 보이는 부분부터 argv[2]가 시작하는 걸 볼 수 있다.

그래서 주소로 설정하고 했다.



'Wargame > Load Of Buffer overflow' 카테고리의 다른 글

LOB 6번 wolfman  (0) 2017.05.11
LOB 4번 goblin  (0) 2017.05.07
LOB 3번 cobolt  (0) 2017.05.02
LOB 2번 gremlin  (0) 2017.05.02
LOB 1번 gate  (0) 2017.05.02

#LOB 문제를 풀 때는 bash2 명령어를 꼭 입력해야한다. LOB는 더미가 없다.


코드를 보면

길다.


이전과는 다르게 에그헌터라는 환경변수를 비워주는 코드가 적용되어있고

argv[1][47]이 \xbf가 아니라면 stack is still your friend라는 문구가 나오게 되어있다.

환경변수에 쉘 코드를 넣는 풀이는 이제 안 된다.

그래서 argv[2]를 이용하여 문제를 풀기로 했다.

argv[2]의 주소를 알아야한다. argv[2]의 주소는 ebp 기준 8byte+argv[1]의 길이라고 한다.

그러니 ebp의 주소를 알아야한다. ebp 주소는 gdb 명령어를 이용하여 알아낼 수 있다.

지금부터 알아내보자.



strcpy 부분에 break를 걸고 stack is still your friend 문구가 뜨지않게 하기 위하여 48바이트 때는 \xbf를 채우고 

그 뒤에는 nop와 쉘코드를 넣었다.


ebp 주소를 알아냈다. 이제 이 주소에 56파이트를 더하면 argv[2]의 주소가 나올 것 같다. 56은 16진수로 \x38이니 더하면



argv[2]의 주소가 나왔다. 이제 페이로드를 작성할 수 있겠다.


페이로드는 [버퍼 크기+sfp] + argv[2] 주소 + argv[2]에 들어갈 nop * 50 + shellcode + nop *50 으로 했다.






'Wargame > Load Of Buffer overflow' 카테고리의 다른 글

LOB 6번 wolfman  (0) 2017.05.11
LOB 5번 orc  (0) 2017.05.10
LOB 3번 cobolt  (0) 2017.05.02
LOB 2번 gremlin  (0) 2017.05.02
LOB 1번 gate  (0) 2017.05.02

#LOB 문제를 풀 때는 bash2 명령어를 꼭 입력해야한다. LOB는 더미가 없다.

문제 코드를 보면

이번에는 gets 함수의 취약점을 이용하는 문제다.

이 문제 역시 환경변수를 이용하여 풀면 쉽게 풀린다. 같은 기법이라 페이로드만 짜겠다.


'Wargame > Load Of Buffer overflow' 카테고리의 다른 글

LOB 6번 wolfman  (0) 2017.05.11
LOB 5번 orc  (0) 2017.05.10
LOB 4번 goblin  (0) 2017.05.07
LOB 2번 gremlin  (0) 2017.05.02
LOB 1번 gate  (0) 2017.05.02

#LOB 문제를 풀 때는 bash2 명령어를 꼭 입력해야한다. LOB는 더미가 없다.

우선 문제 코드를 보면

전 문제와 버퍼 크기 빼고는 똑같다.

gate 때와 똑같이 환경변수를 이용하여 풀면 되기 때문에 과정은 생략하고 페이로드만 짜겠다.

gdb로 확인했을 때 버퍼의 크기는 16 바이트였다. 그렇기 때문에 sfp까지 값을 넣어 총 20바이트를 채운 뒤

쉘코드가 들어있는 환경변수를 이용해 답을 얻을 수 있다.


'Wargame > Load Of Buffer overflow' 카테고리의 다른 글

LOB 6번 wolfman  (0) 2017.05.11
LOB 5번 orc  (0) 2017.05.10
LOB 4번 goblin  (0) 2017.05.07
LOB 3번 cobolt  (0) 2017.05.02
LOB 1번 gate  (0) 2017.05.02

오늘부터 LOB 풀이를 올리기 시작했다.

#LOB 문제를 풀 때는 bash2 명령어를 꼭 입력해야한다. LOB는 더미가 없다.

문제 코드를 보면


strcpy 함수가 무한대로 받아진다는 것을 이용하여 문제를 풀 수 있을 것 같다. 나는 sfp까지 값을 넣고 ret에 쉘코드 주소를 

넣어 문제를 풀 것이다.

우선 gdb로 버퍼의 크기를 봤다.

0x100 = 256

즉 버퍼의 크기는 256 바이트다. 그럼 sfp를 포함한 260바이트를 채워야 함을 알 수 있다. 


이제 환경변수를 설정해준다.

NOP로 50바이트 만큼 채워주고 25 바이트짜리 쉘코드를 넣었다.


이제 이 환경변수의 주소값을 알아내자.  주소값은 코드를 짜서 구했다.

구한 주소값은

이제 페이로드를 짜자.

버퍼(256 byte) + sfp (4byte) + 환경변수(Little Endian) 식으로 짜주면 될 것 같다.


'Wargame > Load Of Buffer overflow' 카테고리의 다른 글

LOB 6번 wolfman  (0) 2017.05.11
LOB 5번 orc  (0) 2017.05.10
LOB 4번 goblin  (0) 2017.05.07
LOB 3번 cobolt  (0) 2017.05.02
LOB 2번 gremlin  (0) 2017.05.02