본문 바로가기

Layer7

Socket misc

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