๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ ๋ณด์•ˆ·์ทจ์•ฝ์ /๐Ÿ”ธ์‹œ์Šคํ…œ·์šด์˜์ฒด์ œ

[ubuntu] pwntools ์‚ฌ์šฉ ์‹ค์Šต

by Jenny:! 2022. 8. 11.

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 '์ถœ๋ ฅ ํŒŒ์ผ๋ช…' '์ปดํŒŒ์ผํ•  ํŒŒ์ผ๋ช…'