728x90
반응형
1. intro
2. code 및 분석
2.1. C code
/*
* phoenix/net-one, by https://exploit.education
*
* Why aren't octal jokes funny?
* Because 7 10 11
*/
#include <err.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/random.h>
#include <sys/types.h>
#include <unistd.h>
#define BANNER \
"Welcome to " LEVELNAME ", brought to you by https://exploit.education"
int main(int argc, char **argv) {
uint32_t i;
char buf[12], fub[12], *q;
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
printf("%s\n", BANNER);
if (getrandom((void *)&i, sizeof(i), 0) != sizeof(i)) {
errx(1, "unable to getrandom(%d bytes)", sizeof(i));
}
if (write(1, &i, sizeof(i)) != sizeof(i)) {
errx(1, "unable to write %d bytes", sizeof(i));
}
if (fgets(buf, sizeof(buf), stdin) == NULL) {
errx(1, "who knew that reading from stdin could be so difficult");
}
buf[sizeof(buf) - 1] = 0;
q = strchr(buf, '\r');
if (q) *q = 0;
q = strchr(buf, '\n');
if (q) *q = 0;
sprintf(fub, "%u", i);
if (strcmp(fub, buf) == 0) {
printf("Congratulations, you've passed this level!\n");
} else {
printf("Close, you sent \"%s\", and we wanted \"%s\"\n", buf, fub);
}
return 0;
}
2.2. 분석
buf와 fub라는 12 bytes의 변수를 선언하고
랜덤 값을 출력한 다음
fgets 함수로 buf에 값을 받아들인다.
이후 랜덤 값을 fub 변수에 uint형으로 삽입 후
둘을 비교해서 같으면 성공 메시지를 출력한다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
별도 취약점은 없다.
3.2. 공격 준비
앞선 문제와 동일하게 값을 받아들여 처리 후 출력해주면 된다.
다만, write 함수로 random 값을 출력하는데 제대로 출력되지 않는 것을 보아 아무래도 packing 된 hex 값인 것 같다.
user@phoenix-amd64:~$ nc localhost 64001
Welcome to phoenix/net-one, brought to you by https://exploit.education
▒U▒a
Close, you sent "a", and we wanted "3461712368"
이를 unpacking하여 전달해주면 될 것으로 보인다.
4. exploit
from pwn import *
p = remote ('localhost', 64001)
p.recvline()
i = u32(p.recv(4))
print(i)
p.sendline(str(i))
print(p.recvline())
user@phoenix-amd64:~$ python /tmp/a.py
[+] Opening connection to localhost on port 64001: Done
1247561533
Congratulations, you've passed this level!
[*] Closed connection to localhost port 64001
728x90
반응형
'Wargame > Exploit Education' 카테고리의 다른 글
[Phoenix] Final zero (0) | 2022.10.18 |
---|---|
[Phoenix] Net two (0) | 2022.10.13 |
[Phoenix] Net zero (0) | 2022.10.13 |
[Phoenix] Heap three (0) | 2022.10.06 |
[Phoenix] Heap two (0) | 2022.10.06 |