본문 바로가기

3. Pwnable (포너블)/2) 개념 정리

[2021.05.15] 7주차 : Bandit Level 12,13,14->15 | 달고나 문서 p.27 ~ ~ p.34

이번 시간에는 Bandit Level 12, 13, 14까지 문제 풀이 후, 달고나 문서 p.27 ~ 34까지 읽었습니다! 이전에는 다뤄본 적이 없었던 SSH, telnet, nc 등을 다루다 보니 굉장히 어려웠지만 우여곡절 끝에 이번 주도 잘 마무리하였습니다~~!

 

 

-> data.txt 파일 내에 있는 여러 번 압축된 파일을 풀어서 비밀번호 찾기

 

bzip2, gzip, tar 등 압축 명령어를 공부하는데 큰 도움이 되었다. 

 

 

 

 

 

-> bandit14만 접근할 수 있는 비밀번호 파일에 권한이 없으니 priavte SSH key를 이용해 localhost로 bandit15에 접속하기

 

 

localhost 내에서 port 30000인 네트워크에 접속하기

 

nc (netcat) : TCP, UDP 같은 프로토콜에서 데이터를 읽고 쓸 수 있는 유틸리티. cat이 리눅스에서 파일을 읽는데 쓰이니까 netcat은 네트워크를 읽거나 쓸 수 있다는 뜻이다.

 

telnet : 텔넷은 인터넷이나 로컬 영역 네트워크 연결에 쓰이는 네트워크 프로토콜로, 인터넷을 통해 원격지 호스트 컴퓨터에 접속할 때 지원되는 인터넷 표준 프로토콜이다.

 

 

 

 


달고나 문서 p.27 ~ p.34

 

 

前 기수 분들이 p.27 ~ p.44까지 진도를 나가셨길래 저희도 처음엔 그렇게 하려고 했는데 공부하는데 약 40분 정도의 시간밖에 남지 않았고, 앞부분 복습도 조금 필요해서 p.34까지만 진행하였습니다! 여기까지 읽는 것도 겨우 끝냈답니다,,

 

 

 

이번 주는 효주님이 정리하신 내용을 올립니다!

 

 

5. Buffer overflow의 이해 

버퍼(buffer) : 시스템이 연산 작업을 하는 데 있어 필요한 데이터를 일시적으로 저장하는 곳 

대부분의 프로그램에서 버퍼를 스택에 생성 

스택 -> 함수 내에서 선언한 지역변수 저장&함수 끝나면 반환 

malloc()과 같은 반영구적 데이터 저장공간과는 다른 것 

 

buffer overflow : 미리 준비된 버퍼의 크기 < 데이터 크기 일 때 발생

 

 

 

 

 

40바이트의 스택 준비 

40바이트 보다 큰 데이터를 쓰면 버퍼 넘침 

에러 발생 

 

 

 

버퍼오버플로우 공격은 공격자가 메모리 상의 임의의 위치에 원하는 코드 저장 

return address가 저장되어 있는 지점에 그 코드의 주소를 넣음 

EIP에 공격자의 코드가 있는 곳의 주소를 넣음 

 

공격자는 버퍼가 넘칠 때(=버퍼에 데이터를 쓸 때) 원하는 코드를 넣을 수 있음 


 

strncpy함수는 바이트저장할지정해줌 

strcpy함수는 길이 체크 X 

데이터에서 NULL을 만날 때까지 복사 

 

 


 

 

Byte order 

바이트 정렬 방식 : 데이터가 저장되는 순서가 바뀐 이유 

바이트 순서 

 

 

big endian 

: 낮은 메모리 주소 -> 높은 메모리 주소 

little endian 

: 높은 메모리 주소 -> 낮은 메모리 주소 

 

공격코드의 바이트를 정렬할 때 byte order의 문제 고려 

ex) little endian 시스템에 return address 값을 넣을 때는 바이트 순서를 뒤집어서 넣어야 함 

 

return address 위의 버퍼 공간이 쉘 코드를 넣을 만큼 충분하지 않을 때 

다른 공간을 찾아봐야 함 

return address 이후의 공간이 부족할 경우 return address 이전의 버퍼 공간 활용 

이 공간도 부족하다면 return address 부분만을 제외한 위아래 공간 활용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

다음 시간 준비 

→ bandit 15, 16, 17 풀어오기. 달고나 문서 p.34 ~ p.44까지 읽을 예정.