오래 못 할 짓 하지 않기

[ 워게임 ] 39. Pwnable 25 : sint 본문

보안_모의해킹/CTF (Capture The Flag)

[ 워게임 ] 39. Pwnable 25 : sint

쫑알bot 2025. 2. 13. 23:02
728x90

이런 거 보면 이제 감이 잡힌다.

buf[256]을 채워서 넘기고

int size를 채워서 넘겨서 ( + rbp 크기 ) 

get_shell() 함수 주소를 return 주소에 넣으면 될 것 같다.

 

36번줄 scanf에서 size를 입력하면서도

38번줄 조건도 충족시켜줘야 한다.

 

그리고  (size 값) -1 크기만큼 읽는다.

근데 if문에서 0도 통과인데, 여기에 0을 넣으면 크기가 -1만큼 되지 않나?

 

받는 크기는 unsigned로 되어 있다.

즉, 0보다 작아지면 integer overflow가 일어나면서

(현재 작동하는 시스템이 32비트이므로) (2^32) -1 크기로 바뀌게 된다.

 


 

get_shell()의 주소 08048659

13번 줄에서는 해당 명령어에서 보내는 건 text만 된다고 하여 입력값을 str으로 감쌌다.

아래는 실행결과다.

 


회고

BOF 방법이 정말 많은 것 같다.

Integer OverFlow가 처음인 것 같은데, Unsinged int를 다루는 법이나

read() 함수에서 인자로 받는 것에 대해서 이렇게 되는 걸 보면서

평소에 접하는 함수들에 대해 더 자세히 알아야겠다는 생각이 들었다.