오래 못 할 짓 하지 않기
[ 워게임 ] 39. Pwnable 25 : sint 본문
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() 함수에서 인자로 받는 것에 대해서 이렇게 되는 걸 보면서
평소에 접하는 함수들에 대해 더 자세히 알아야겠다는 생각이 들었다.
'보안_모의해킹 > CTF (Capture The Flag)' 카테고리의 다른 글
[ 워게임 ] 41. Pwnable 32 : ssp_000 (0) | 2025.02.14 |
---|---|
[ 워게임 ] 40. Crypto 517 : Basic_Crypto1 (0) | 2025.02.14 |
[ 워게임 ] 38. Forensics 518 : Basic_Forensics_1 (0) | 2025.02.13 |
[ 워게임 ] 37. Pwnable 34 : oneshot (20% 못 풀었음) (0) | 2025.02.09 |
[ 워게임 ] 36. Reversing 22 : Reversing Basic Challenge #8 (0) | 2025.02.08 |