pwnable Toddler`s Bottle - random
문제파악
코드가 매우 짧다. 코드의 흐름을 보면 랜덤 값을 생성한 후 입력받은 key값과 XOR 연산을 한 값이 0xdeadbeef과 같으면 flag를 읽는다는 것을 확인할 수 있다. 하지만 여기서 랜덤 값을 생성할 때 srand
함수로 시드값을 할당하는 부분이 없기 때문에 rand함수에 의해서 생성되는 값은 시드가 고정
되기 때문에 난수가 아닐 것으로 보인다.
srand
그럼 srand 함수가 호출되지 않을 때 시드값이 어떻게 되는지 살펴보려 한다.
위의 설명은 linux.die.net srand의 일부를 발췌한 것입니다. 빨간 박스를 보면 자동적으로 시드가 1로 할당된다는 것을 확인할 수 있습니다.
결론
시드가 1인 경우 생성되는 난수값과 XOR 연산시 0xdeadbeef값이 나오는 수를 입력하면 flag를 읽을 수 있게 된다.
위의 코드는 시드가 1인 경우 난수값과 XOR한 연산 결과를 보여준다. XOR 연산은 교환법칙이 성립하고 자기자신과의 연산을 하면 0이 되기 때문에 random ^ 0xdeadbeef
값을 넣어주면 된다.
댓글남기기