-
[Pwnkr] Lotto Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 3. 18:36
이번 문제는 Lotto이다!!
이번 문제를 푸는 열쇠는 바로 Logic Bug를 찾아내는 것이다.
lotto buffer가 랜덤값으로 바뀌기 때문에
Brute force 공격을 이용해야했다.
우선 코드를 보도록 하자!!
< main 함수 >
< play 함수와 help 함수 >
이 문제의 열쇠는 빨간 산자의 play함수 내의 이중 for문이다.
취약점이라기 보다는 logic bug이다.
match라는 변수의 값이 6이되면 FLAG를 볼 수 있게되는데
랜덤 값인 lotto와 우리가 입력할 수 있는 submit를 비교해서
같으면 match값이 증가한다. 하지만 이 부분의 logic bug는
다음과 같다. 언뜻 보기에는 배열(1Byte) 하나씩 값이 같은지
비교하는 것 같지만 사실은 하나만 같아도 match를 6으로 만들 수 있다.
< 예시 >
예를 들어 lotto 버퍼가 "abcdef"일 때
submit 버퍼가 "aaaaaa"라면 코드 logic 상
하나만 맞더라도 6번 비교하면서 match가 6이된다.
그러므로 첫 Byte만 Brute Force하는 Payload를 구성했다.
12345678910111213from pwn import *s = ssh("lotto","pwnable.kr",port=2222,password="guest")for i in range (1, 45):p = s.process("./lotto")p.recvuntil("3. Exit")p.sendline(str(1))p.recvuntil("Submit your 6 lotto bytes : ")payload = chr(i)*6p.send(payload)p.interactive()cs Payload를 진행하니 FLAG를 볼 수 있었다.~
반응형'표튜터와 함께하는 Pwnable > Pwnable.kr Write-up' 카테고리의 다른 글
[Pwnkr] Black Jack Write-up (0) 2019.04.15 [Pwnkr] Cmd1 Write-up (0) 2019.04.04 [Pwnkr] Leg Write-up (0) 2019.04.02 [Pwnkr] Shellshock Write-up (0) 2019.04.01 [Pwnkr] Mistake Write-up (0) 2019.04.01 댓글