level 15
2020. 9. 1. 23:21
전 문제와 거의 똑같지만, 한 가지 다른 점은 check 변수가 포인터 변수라는 점입니다.
따라서, check 변수에 0xdeadbeef를 넣는다고 해도 0xdeadbeef에 해당하는 위치의 메모리에 값을 가져오기 때문에 절대 if 문 조건을 만족시킬 수 없습니다.
하지만, 소스코드에서 아예 0xdeadbeef의 값을 써놓고 대놓고 비교하고 있기 때문에 우리는 0xdeadbeef의 값이 있는 곳을 가리키게만 하면 됩니다.
제 예상으로는 0xdeadbeef의 값을 가지고 있는 메모리 주소는 0x080484b0 ~ 0x080484b6 사이에 있을 것입니다.
2바이트 밀려서 나오네요.
자 이것으로 0xdeadbeef의 위치는 0x80484b2인걸 알았으니, check에 이 주소를 넣읍시다.
buf는 $ebp-0x38에, *check는 $ebp-0x10에 있네요.
buf(20) + bufdummy(20) + address(4)
성공적으로 쉘을 획득했습니다.