
채팅에서 owned!가 오타로 o -> p가 되어서 밈이됨
시스템을 own(소유, 장악)한다 해서
시스템 해킹 -> pwnable이라 부른다
/bin/sh(쉘)를 실행하는 것이다
프로그램이 메모리의 임시 저장 공간 버퍼에 할당된 용량보다
더 많은 데이터를 입력하여 인접한 메모리 공간을 덮어쓰는 현상
스택에서 일어나면 이렇게 부른다
버퍼 오버플로우 공격 탐지와 방어용으로 메모리 스택에 카나리값을 때려박는 보호기법이다

buf와 SFP 사이에 랜덤한 8바이트
버퍼 오버플로우시 이 랜덤한 8바이트가 바뀐다
-> 이걸 확인해 canary가 바뀌면 종료해버린다
예시 카나리
0x8f3a91c27b46d000
근데 0x8f3a91c27b46d000 첫바이트가 왜 null일까?
공격자는 canary를 읽어서 cananry 부분만 알맞게 덮어씌우려 할 수 있다
이것을 방지하기위해 읽으려 하면 바로 null을 만나게 한 것이다
옛날 광산에서 이산화 탄소가 너무 많으면 카나리아새가 사람보다는 빨리 주님 곁으로 떠남

가둬서 들고 들어가고 새가 죽으면 run을 했다고 한다

일단 이렇게 생겼다
디버거로 열어서 스택이 어떻게 생겨먹었는지 한번 감상해보자

일단 center_name는 rbp-0x130
cmd_ip는 rbp-0x110에 위치함을 확인할 수 있다
어 잠만
char center_name[24];
read(0, center_name, 100);
분명 버퍼는 24인데
입력을 100이나 받네?
입력과 우리가 바뀌길 원하는 타겟의 사이 0x20을 메꿔준다

*작성자가 저능한 관계로 폰툴을 사용하지 못한다
32글자 아무거나와 조건문 앞 8바이트가 ifconfig와 일치하는지 확인 그리고 /bin/sh를 잘 요리해서
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaifconfig;/bin/sh
ifconfig후 쉘을 실행하게 한다





name은 epb-0x24
age는 ebp-0x4
read_str은 다음주소에\0을 넣으니 0x24-0x4 = 0x20
name[20]이니까 꽉차게 아무거나 20번 입력하면 age가 0이되고 if문을 충족시켜서 get_shell()이 실행된다

