System&Write up/Pwnable.kr

[pwnable.kr] Toddler's Bottle - random

Jubil 2017. 11. 28. 00:51
반응형

[pwnable.kr] Toddler’s Bottle – random

 


 


 


코드는 이렇습니다.

 

rand 함수는 난수를 생성하는 함수입니다. rand 함수는 seed표의 값에 따라 발생하는 난수의 값이 달라지는데, srand 함수로 seed 값을 정해줄 수 있습니다.

 

seed 값이 다르다면 rand 함수에서 발생시키는 난수 또한 달라지게 됩니다. 그래서 시간 값을 매개로 초기화하게 되면 불규칙적인 난수를 생성하게 됩니다. 하지만 위의 코드에서는 seed 값을 주지 않았기 때문에 매 프로그램 실행 시마다 같은 난수를 얻게 됩니다.

동일한 seed표에서 값을 참조했기 때문이죠.

 

, 랜덤이 아니라는 것입니다.

 

그럼 gdb에 올려서 random값을 확인한 다음에 random 값과 0xdeadbeefxor 한 결과를 10진수로 넣어주면 되겠네요.

 

 


rand 함수의 return 값이 rbp-0x4에 할당되는 모습과 rbp-0x80으로 초기화하는 걸 봤을 때, rbp-0x4random 변수, rbp-0x8key라는 것을 알 수 있습니다.

 


여기가 xor 하는 부분인데, *main+56break point를 걸고, randomkey 변수에 어떤 값이 들어가 있는 지 확인해봅시다.

 


(scanf에 전달한 값은 0x1111111110진수입니다.)

두 변수의 정확한 위치를 알았고, 저 둘을 xor해서 deadbeef가 나오면 됩니다.

random값과 0xdeadbeefxor 해보면,

 


이 값을 scanf에 전달하면 됩니다.

 


flag가 출력됩니다.

반응형