티스토리 뷰

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함