
500문제 그냥 직접 풀고 싶었지만... 1000초, 약 16분 안에 푸는 거 아니면 순위권에도 못 들어가는 슬픈...
정말 몇 시간 동안 삽질을 해서 짠 코드인지 모르겠다. 파이썬으로 했다가 C로 했다가 결국 다시 파이썬 ㅎㅎ..
from pwn import *
r = remote('152.70.238.188', 3005) #nc접속
r.sendlineafter('enter your student numder : ', '10201');
r.sendlineafter('Check your ranking : 2\n', '1');
for i in range(500):
t=r.recvuntil("=")
tu=str(t.split()[1]).replace('=','').replace('b','').replace("'",'')
res=int(eval(tu))
print(res)
r.sendline(str(res))
r.interactive()
pwntools?
: python으로 작성된 exploit 작성을 간단하게 하기 위해 만든 CTF framework, exploit 개발 라이브러리
remote
: local이나 원격 서버에 있는 프로그램에 연결하는 함수. 실제로 exploit함
r = remote('호스트 명 or IP 주소', '포트 번호') 외에도 다양한 형태로 연결 가능
≒ process : local 함수로 exploit 코드를 테스트하기 위해 사용됨.
sendlineafter
: r.sendlineafter('enter your students number : ', '10201')
'enter your students number : '을 출력하면 '10201'을 입력
recvuntil
: t = r.recvuntil("=")
"="라는 문자열을 출력할 때까지 받아서 데이터를 t에 저장
tu=str(t.split()[1]). replace('=', ''). replace('b', ''). replace("'", '')
: split을 이용해서 공백을 기준으로 t에 저장된 문자열을 나누고, 1번째 문자열만 남긴다.
replace를 이용해서 문자 " b, ', = "를 제거한다.
사실 처음에 짰던 코드는 tu=str(t.split()[1]). replace('=', '')
recvuntil으로 받은 데이터가 (001/500) 9/2= 와 같은 형식이라
- t.split()[1]하면 → 9/2= 라고 생각해서
- .replace('=','')로 "="만 제거해 줬는데
실행시키니까 다음과 같은 에러가 뜸

그래서 결국 .replace로 문자 " b, ' "까지 제거해줬음
eval 함수
매개변수로 받은 expression(식)을 문자열로 받아서 실행하는 함수.
sendline
: r.sendline(str(res))
문자열로 변환한 res 값을 입력하고 \n까지 입력
interactive
: 쉘을 획득한 경우이거나, exploit의 특정 경우에 직접 입력을 주면서 디버깅을 해보고 싶을 때 사용하는 함수. exploit 코드의 맨 마지막에 붙임
'Layer7' 카테고리의 다른 글
| HackCTF : basic_BOF #2 (0) | 2021.06.16 |
|---|---|
| HackCTF : basic_BOF #1 (0) | 2021.06.16 |
| C socket (0) | 2021.06.12 |
| ELF file (0) | 2021.06.02 |
| 코드 분석 하기 (0) | 2021.05.30 |