먼저 quizmachine 파일을 실행했다. 20개의 덧셈 문제를 풀어야 플래그를 얻을 수 있는 것 같다.
좀 늦게 답했는지 타임아웃이 뜨면서 그냥 실행이 종료돼버렸다.
대충 어떤 식으로 실행되는지 파악했으니 코드를 보면서 어떤식으로 굴러가는지 제대로 파악해본다.
1부터 100까지 랜덤한 숫자를 출력해주는 것같고, scanf로 답을 입력받는다.
time(&t1)과 time(&t2)는 각각 문제가 출력될 때 시간, 답을 입력한 때의 시간을 의미하는 것 같다.
difftime() 함수를 찾아보니까 시간차를 계산하는 함수라고 한다.
위에 보면 DELAY를 5로 정해놨는데, 5초 안에 답을 적지 못하면 아까처럼 time out!이 뜨면서 종료되는 것 같다.
만약 틀렸다면 wrong!을 출력한다.
코드를 작성할 때 다른 사람들 어떤 식으로 했는지 구글링을 좀 했다.
두 개의 랜덤한 숫자를 어떻게 이용할 수 있을 까 고민했는데,
random1 + random2 =
이런 식으로 식이 이뤄지니까
+ 나오기 전까지 숫자를 pa에 저장하고, 슬라이싱으로 공백제거.
= 나오기 전까지 숫자를 pb에 저장하고, 마찬가지로 슬라이싱으로 공백을 제거해준다.
그리고 이 문자를 정수형으로 변환해준다.
왜 str(result)인걸까 고민해봤는데, 원래 식이 문자열 취급을 받는 것 같다. 그러니까 a, b도 정수형으로 변환해주는거 아닐까.
result는 정수끼리 더했으니 얘도 정수일거고, 출력은 그대로 했는데, 보내는 건 문자로 보내야 하는? 그런 식으로 이해했다.
근데 문제는 이 코드를 실행하면 계속 멈추고 답이 입력되지 않는다.
문제가 20번 반복되지도 않는다.
print(p.recvline())을 제거해보고 19번째코드를 추가했다. 처음에는 'a', 'b'로 입력했더니
이런식으로 나와서 변수를 변수로 안하고 그냥 문자로 출력해서 문제가 생겼구나 싶어 str(a)로 해서 다시 실행했더니
이런식으로 드디어 원하는 숫자식이 나왔다. 이제 문제는 Success!!! 출력이다. 원래 이 프로그램 자체가 20 문제를 다 맞추면 Success!!!를 출력하고 프로세스 종료하는 거니까 그대로 되게 만들어주어야 한다.
정말 짜증나게도, 이러면 반복을 안하고 딱 한 개의 식만 출력하고 멈춰버린다.
for문 바깥에 p.recvuntil을 해주니깐 Success!!!가 출력되긴 하는데 문제는 숫자 식들 바로 아래에 붙어나오지 않고 프로세스 멈춤 설명 다음에 나온다. 당황스럽,,다.. 왜 그런걸까...
일단 여기까지만 혼자 해보겠다.
'시스템 해킹' 카테고리의 다른 글
pwnable.kr collision (0) | 2022.08.12 |
---|---|
set UID (0) | 2022.08.10 |
질문 - 2주차 (0) | 2022.08.05 |
SSH, File Descriptor, nc 명령어 (0) | 2022.08.03 |
pwnable.kr fd 문제 풀이 (0) | 2022.08.02 |