pwntools ์ฌ์ฉ๋ฒ
pwn ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
pwntools๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ์ด์ฌ ํ์ผ ๋งจ ์ฒซ ์ค์ ์๋์ ๊ฐ์ด ์์ฑํ๋ค.
from pwn import *
๋ฌธ์ ๋ฅผ ์คํ์ํค๊ณ ๋ก๋ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํ๋ค.
p = process('์ฃผ์')
์์
๋๋ค์ผ๋ก ๋ ์๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ด๋ฅผ ๋ํ ๊ฐ์ 100๋ฒ ์ ๋ ฅํด์ผ ํ๋ค.
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, a, b, ans;
srand(time(0));
for (i = 0; i < 100; i++) {
a = rand() % 20000;
b = rand() % 20000;
printf("#%d: %d + %d = ?\n", i, a, b);
printf("> ");
scanf("%d", &ans);
if (a + b == ans) {
printf("Correct!\n");
}
else {
printf("Wrong!\n");
return 0;
}
}
printf("Congrats! flag{welcome_to_pwntools}");
}

์คํ์์ผ๋ณด๋ฉด ์ด๋ ๋ค.
์ด ์์ ๋ pwntools๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋ค.
ํ์ด์ฌ ํ์ผ์ ์์ฑํด์ผ ํ๋ค.
from pwn import *
p = process("./test")
for i in range(100):
#๋ฌธ์ ๋ฒํธ ํ์
print("Solving " + str(i))
#๋ฌธ์ ์ ์ซ์ ์๊น์ง ์ฝ์ด๋ค์
p.recvuntil(":")
#์ฒซ ๋ฒ์งธ ์ซ์ ์ฝ๊ธฐ
pa = p.recvuntil("+")[:-1]
a = int(pa)
#๋ ๋ฒ์งธ ์ซ์ ์ฝ๊ธฐ
pb = p.recvuntil("=")[:-1]
b = int(pb)
#๋ต ๊ตฌํ๊ธฐ
ans = a + b
#๋ต์ ํ๋ก๊ทธ๋จ์ ์
๋ ฅ์ํด
p.sendline(str(ans))
p.recvuntil("Correct!\n")
#์ ์ด๋ฅผ ๋๊ฒจ๋ฐ์
p.interactive()
'test_ans'๋ก ์ ์ฅํด์ฃผ์๋ค. ๊ฒฝ๋ก๋ '~/ '๋ค.
์ ์ด๋ฅผ ๋๊ฒจ๋ฐ๋ ๊ณผ์ ์ ๋ฌด์จ ์๋ฏธ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
c ํ์ผ์ ์คํ ํ์ผ๋ก ๋ณํํด์ค๋ค.
$ gcc -o '์ถ๋ ฅ ํ์ผ๋ช
' '์ปดํ์ผํ ํ์ผ๋ช
'



'๐ ๋ณด์ยท์ทจ์ฝ์ > ๐ธ์์คํ ยท์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ubuntu] SSH ์ ์ ์ค์ต (0) | 2022.08.12 |
|---|---|
| File Descriptor (0) | 2022.08.12 |
| quiz ํ์ผ ํ์ด (0) | 2022.08.11 |
| [dreamhack] Tool: gdb (0) | 2022.07.28 |
| [dreamhack] Background: Linux Memory Layout (0) | 2022.07.28 |