글
버퍼오버플로우 02 - 해쿨 핸드북
{리눅스 명령어}
파일 목록 보기 : ls –al
디렉토리 이동 : cd [디렉토리명]
상위 디렉토리로 이동 : cd ..
현재 디렉토리명 확인 : pwd
파일 내용 확인하기 : cat [파일명]
파일 내용 편집하기 : vi [파일명]
입력모드 - i
명령모드 - esc
저장 - esc입력 후 :w
종료 - esc 입력 후 :q
소스 코드 컴파일하기 : gcc -o [프로그램명] [소스코드명]
프로그램 실행하기 : ./[프로그램명]
프로그램에 인자 전달하기 : ./[프로그램명] [인자1] [인자2] ...
현재 자신의 권한 확인하기 : whoami 혹은 id
IP 확인하기 : /sbin/ifconfig IP 변경하기 : /usr/sbin/netconfig (root 권한 필요)
지금까지 입력한 명령목록 보기 : history
실행중인 프로그램(프로세스) 목록 보기 : ps -aux
시스템 리부팅 : reboot (root 권한 필요)
시스템 종료 : halt (root 권한 필요)
관리자 권한으로 명령 실행 : sudo [명령어]
*Segmentation faul
main()안에 있으면 생기는 문제점
1. 내용이 점점 길고 복잡해지면서 소스코드를 이해하기 힘들어진다
2. 같은 기능을 하는 코드가 반복적으로 필요할 때 매번 입력을 해줘야한다
3. 재활용하여 프로그램을 만들기로했다면 기존 코드에서 어렵게 찾아내야한다
4. 기존의 다른 변수와 중복되거나 헷갈릴 수 있는 이름을 피해야 하므로 관리가 점점 복잡해진다.
=> 하지만 특정한 기능을 하는 소스코드를 따로 빼내어 묶어놓은 함수를 사용하면 문제가 해결된다.
수학에서 나오는 함수와 프로그래밍 언어에서의 함수
공통점: 정해진 기능을 하고 그 결과를 돌려주는 공식이다
차이점: 프로그래밍에서는 필요에따라 결과를 돌려줄 수 도 있고 돌려주지 않을 수도 있다
C언어로 만든 프로그램의 시작점은 main()함수이다.
●버퍼 오버플로우 공격의 원리는 이 함수의 호출, 복귀 과정과 아주 밀접한 관계를 가지고 있다
복귀할 때 참조할 위치를 메모리에 저장해두지 않으면 무한루프돌수가있다.
리턴 어드레스(Return Address) 복귀할 때 참조할 위치
메모리 주소 할당
#자식 함수 내의 변수들 < ??? < 자식 함수의 인자들 < 부모 함수 내의 변수들
리턴어드레스가 저장되는 메모리 주소에는 항상 고정된 값이 들어가지 않음.
함수가 호출될 때마다 그에 적합한 값이 들어간다.
호출된 함수의 지역변수를 시작으로 버퍼오버플로우가 발생하는 취약점이 존재한다면, 리턴 어드레스를 덮어씌울 수 있다.
'포너블' 카테고리의 다른 글
| Pwnable study 1주차[함수 프롤로그 & 에필로그] (0) | 2020.01.30 |
|---|---|
| 버퍼오버플로우 05- 해쿨핸드북 (0) | 2020.01.01 |
| 버퍼오버플로우 04- 해쿨핸드북 (0) | 2020.01.01 |
| 버퍼오버플로우 03 - 해쿨 핸드북 (0) | 2020.01.01 |
| 버퍼오버플로우 01 - 해쿨 핸드북 (0) | 2020.01.01 |