문제 설명
int main(void) {
int fd;
char *flag;
initialize();
srand(time(NULL));
flag = (char *)malloc(FLAG_SIZE);
fd = open("./flag", O_RDONLY);
read(fd, flag, FLAG_SIZE);
close(fd);
int num1 = 0;
int num2 = 0;
int inpt = 0;
for (int i = 0; i < 50; i++){
alarm(1);
num1 = rand() % 10000;
num2 = rand() % 10000;
printf("%d+%d=?\n", num1, num2);
scanf("%d", &inpt);
if(inpt != num1 + num2){
printf("Wrong...\n");
return 0;
}
}
puts("Nice!");
puts(flag);
return 0;
}
이런 코드다...
문제에서 말한 거랑 똑같이 랜덤한 두 수끼리 50번 더한다.
그냥 코드 짜서 풀어야 되는 문제 같음.
문제 힌트에 pwntools 쓰라고 하니까 저걸 써야 확실히 문제 풀이가 편해질 것 같다.
분명 전에 이런 거 한 번 풀어봤던 것 같은데 까먹어서 다시 검색해 봤음
Pwntools 기본 사용법
Pwntools 소개 Pwntools 는 리눅스 환경에서 익스플로잇을 짜는 것을 쉽게 할 수 있게 해주는 파이썬 라이브러리다. 공식 Github 주소 : https://github.com/Gallopsled/pwntools 공식 문서 주소 : http://docs.pwntools.com
tekiter.tistory.com
이 블로그를 참고해서 pwntools 사용법을 공부했다.
pwntools 다운로드 완료.
사실 이 다음부터는 그냥 랜덤한 두 수를 뽑아 50번 계산하는 코드를 짜는 게 끝이다.
pwntools를 사용하는 것이기 때문에, 코드의 첫 줄에는
'form pwn import *' 라는 걸 꼭 써 줘야 한다.
그 다음에는 그냥 드림핵 환경에서 생성된 서버와 포트 번호를 입력해 문제 자체에서 제공하는 코드를 가져오고,
총 50번 반복하는 코드를 짠다.
split을 이용해 +을 기준으로 num1과 num2를 나누고, 해당 두 수를 더한 값을 result로 넣는 것이다.
pwntools를 활용해 본다는 데에 의의가 있는 문제라서, 코드는 그냥 단순 덧셈이라 별로 어려울 건 없는 것 같당
코드 실행하려면
python3 "내가 생성한 코드 이름" << 형식으로 명령어 입력해 주면 되고,
그 뒤로는 저절로 문제 코드 따라서 큰 수 덧셈을 50번 반복한다.
코드만 제대로 짰으면 큰 무리 없이 계산에 성공하고 플래그를 얻을 수 있다 ~.~
풀이 성공!
'SWUFORCE > 워게임 풀이' 카테고리의 다른 글
[Dreamhack] rev-basic-0 (reversing) (0) | 2024.08.27 |
---|---|
[Dreamhack] file-special-bit (misc) (0) | 2024.08.20 |
[Dreamhack] whatsdifferent (misc) (0) | 2024.08.06 |
[Dreamhack] littlevsbig (misc) (0) | 2024.08.06 |
[Dreamhack] image-storage (web) (1) | 2024.07.22 |