티스토리 뷰
1포인트 짜리 mistake 문제입니다.
힌트는 연산자 우선순위 입니다.
여기는 fd가 0보다 작으면 끝내버리는 부분이고,
여긴 pw_buf2 배열을 선언하고 입력 받은 후 xor 하는 부분입니다.
여기가 이제 pw_buf랑 pw_buf2를 비교해서 같으면 flag를 출력하는 부분입니다.
여기가 xor 해주는 부분인데, XORKEY가 1 이므로 넘겨받은 인자를 1 xor 함을 알 수 있습니다.
이제 대충 어떤 프로그램인지 알았으니 어디가 취약한지 보겠습니다.
이 부분들을 보면 fd에 open과 read의 반환값을 넣고 그걸 0과 비교하려고 한 것이지만,
연산자 우선순위가 비교 연산자(>,<) 가 대입 연산자(=) 보다 높기 때문에 read, open의 fd와 0 을 비교한 후
그 값이 fd에 들어가게 되는 것이죠.
우리가 중요하게 볼 부분은 위의 부분인데, 저기서 fd의 값이 결정됩니다,
open의 반환형은 fd의 양의 정수값인데 0보다 작을 수 없겠죠? 그렇기 때문에 fd에는 0이 들어갑니다,
그럼 fd의 값이 0으로 맞춰지니깐 pw_buf에 입력을 받을 수 있습니다.
그러면 pw_buf에 길이 10짜리 입력 받고 그냥 그걸 1로 xor 한걸 pw_buf2에 입력받으면 되겠네요!
굿
'Pwnable > pwnable.kr' 카테고리의 다른 글
[Toddler's Bottle] blackjack (0) | 2018.05.17 |
---|---|
[Toddler's Bottle] random (0) | 2018.05.09 |
[Toddler's Bottle] flag (0) | 2018.05.03 |
[Toddler's Bottle] bof (0) | 2018.04.29 |
[Toddler's Bottle] collision (0) | 2018.04.28 |
댓글