HanJeouk의 개인공부 블로그

#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

Stack7의 코드를 보면 필터가 걸려있다. 그래서 ROP(ppr)기법을 쓰기로 했다. 우선 환경변수를 설정하고 주소를 알아내자.


환경변수의 주소는 0xbffffdcf 다.

이제 ret 주소를 알아내자.

8048492!

이제 페이로드를 짜자.








'Wargame > Protostar' 카테고리의 다른 글

Protostar Heap1  (0) 2017.12.31
Protostar Heap0  (0) 2017.12.31
Protostar Stack6  (0) 2017.04.05
Protostar Stack5  (0) 2017.04.05
Protostar Stack4  (0) 2017.04.02

사실 Stack6는 Stack5랑 똑같이 RTL을 써서 풀면 아주 쉽게 풀린다. 넘어가고 싶지만 그냥 하기로 했다.

자 RTL을 쓰자 시스템 주소와 /bin/sh의 주소는 저번에 구했던 것과 같을테니 과정은 생략한다.

버퍼 크기를 보면

버퍼의 크기가 76byte라는 걸 알 수 있다.


이제 페이로드를 만들어보면



'Wargame > Protostar' 카테고리의 다른 글

Protostar Heap0  (0) 2017.12.31
Protostar Stack7  (0) 2017.04.06
Protostar Stack5  (0) 2017.04.05
Protostar Stack4  (0) 2017.04.02
Protostar Stack3  (0) 2017.04.01

Stack5 코드를 보면 아~주 간단하게 나온다. 나는 여기에 RTL 기법을 쓰기로 했다.

버퍼의 크기를 구하는 건 저번에 설명했기 때문에 생략한다. 버퍼의 크기는 dummy를 포함해 72byte다.


이제 여기에 RTL 기법을 쓸건데 우선 필요한게 두 가지다.


바로 시스템주소와 /bin/sh의 주소다. 지금부터 구하겠다.


우선 시스템주소다. 

시스템주소는 gdb로 브레이크 포인트를 걸고 실행시킨 다음 p system 명령어를 이용하여 구할 수 있다.

시스템 주소는 0xb7ecffb0이다.

이제 /bin/sh의 주소를 구하면 된다.


/bin/sh는 코드를 구현해서 짰다.

/bin/sh의 주소는 0xb7fb63bf다.


자 이제 페이로드를 짠다.

페이로드는 버퍼+더미+sfp를 포함해 76을 채우고 시스템 주소 그 다음에는 인자값으로 4바이트 마지막으로는

/bin/sh의 주소를 넣어주면 될 것이다.




'Wargame > Protostar' 카테고리의 다른 글

Protostar Stack7  (0) 2017.04.06
Protostar Stack6  (0) 2017.04.05
Protostar Stack4  (0) 2017.04.02
Protostar Stack3  (0) 2017.04.01
Protostar Stack2  (0) 2017.03.29


gets 함수의 취약점을 이용하면 풀 수 있을 것 같다.

gdb로 main 함수를 보니 이렇게 나와있다 main+21에 브레이크 포인트를 걸고 실행시킨 후 버퍼의 시작부분과 sfp의 시작부분을 빼줘서 버퍼의 크기를 구하면?

72라고 보니 더미가 있는듯? 그럼 버퍼(64byte)+더미(8byte)+sfp(4byte)+ret(4byte)로 되어 있는게 아닐까 싶다.

이제 win 함수의 주소를 구하면

시작주소를 쓰자 리틀엔디안이니까 \xf4\x83\x04\x08이 되시겠다.

이제 페이로드를 짜자.


'Wargame > Protostar' 카테고리의 다른 글

Protostar Stack6  (0) 2017.04.05
Protostar Stack5  (0) 2017.04.05
Protostar Stack3  (0) 2017.04.01
Protostar Stack2  (0) 2017.03.29
Protostar Stack1  (0) 2017.03.22

Stack3는 fp에  win함수의 주소값을 넣어서 푸는 문제다.


먼저 win 함수의 주소값을 알아내기 위해여 GDB를 사용했다.

win 함수의 시작주소는 0x08048424이다.

버퍼의 크기를 알아보니 64바이트였다. 그래서 64개의 값을 넣은 다음 win 함수의 주소를 넣는다면 fp에 win 함수의 주소가 들어갈 것이다.


'Wargame > Protostar' 카테고리의 다른 글

Protostar Stack5  (0) 2017.04.05
Protostar Stack4  (0) 2017.04.02
Protostar Stack2  (0) 2017.03.29
Protostar Stack1  (0) 2017.03.22
Protostar Stack0  (0) 2017.03.20