Write-up

[pwnable.kr] random write-up

ch4rli3kop 2018. 1. 23. 00:54
반응형

문제를 봅시당.


딱히 뭔가 특별한 정보는 없는 듯 합니다. 접속해 봅시다.


평범한 구조네요. 소스 코드를 읽어 봅시당.


결국, 사용자가 입력한 값과 random 값이 XOR 연산을 한 값이 0xdeadbeef 가 되도록 하면 되겠습니다. XOR 연산의 특징 덕분에 random 과 0xdeadbeef 가 XOR 연산하면 사용자가 입력해야 하는 값을 알 수 있겠네요. random 값을 구하는게 핵심이군요!


random 값을 구해야 하는데, 위의 소스 코드에서 알 수 있는 사실하나는 rand() 함수의 시드 값이 없다는 점입니다. 컴퓨터는 기본적으로 난수를 생성하지 못합니다. 그래서 컴퓨터의 시간이나 마우스 포인터 같은 정보들에 기반한 값으로 시드 값을 생성하여, 특정 알고리즘에 넣은 뒤 난수를 구하는데요. 

이 문제에서는 그런 시드 값을 랜덤으로 생성해주는 코드가 보이지 않네요. 다시 말해, random 값은 일정하다는 소리입니다. 디버깅을 통해 random 값을 알아봅시다.



랜덤 값을 만들어주는 rand 함수를 call 하는 부분에 break point 를 걸고, 심호흡을 합니다.



제대로 브포가 걸렸군요! 살포시 ni 로 rand() 함수를 call 해 봅시다. rand() 함수가 call 된 직후의 eax 값은 rand() 함수의 리턴 값일 겁니다. 이 값이 즉 random 값이겠죠. rbp - 0x4 에 저장하기도 하는군요.


아무튼 eax 값을 확인해보면 random 값을 구할 수 있습니다. random 값은 0x6b8b4567 입니다.



이제 random ^ 0xdeadbeef 를 해보면 0xb526fb88(3,039,230,856)이라는 값을 얻을 수 있습니다.

구한 이 값을 입력줍시다.




반응형

'Write-up' 카테고리의 다른 글

[Harekaze CTF 2018] Harekaze Farm writeup  (0) 2018.02.12
[CODEGATE 2018] BaskinRobins31 write-up  (0) 2018.02.06
[pwnable.kr] blackjack write-up  (0) 2018.01.22
[pwnable.kr] cmd1 write-up  (0) 2018.01.17
[angr tutorial] ais3_crackme writeup  (0) 2018.01.14