목록CTF/Pwnable (11)
안 쓰던 블로그
스택 영역(스택 프레임) 프로그램 실행 중 만들어지는 지역변수나 매개변수가 쌓이는 메모리 공간 (참고: 메모리 구조 foxtrotin.tistory.com/312 ) 특징 리틀 엔디안 방식으로 저장되므로 하위 바이트부터 먼저 들어간다 스택 기본 구조 Buffer + sfp[4byte] + ret[4byte] 1) 버퍼는 데이터가 저장되는 공간이다 2) sfp는 스택 베이스값을 뜻한다 sfp는 스택 주소값을 계산할 때 현재 스택값의 기준을 잡을 때 필요한 프레임 포인터 값을 저장한다. 크기는 4바이트이다 sfp가 필요한 이유 ebp레지스터는 한 개이기 때문에 함수가 시작할 때마다 ebp값이 바뀌는데 그 전의 ebp값을 스택에다가 저장해야 하기 때문이다 3) ret 은 return의 약자로 반환 주소값을 뜻..

double pistol 프로그램을 실행하면 0이나 1을 입력하라는 문구가 나온다 0을 입력하면 xor연산 문제가 나오고 1을 입력하면 정답을 입력할 수 있다 2초 안에 10번을 입력해야 한다 문제를 봐야 정답을 입력하던가 할 텐데, remote하고 1을 입력하면 0을 볼 수 없으니까 remote 두 개를 동시에 해야 했다 그리고 10번 돌면서 문제를 풀어야 한다 0번을 입력한 연결(문제)에서 숫자 두 개를 뽑아야 한다 split으로 나누고 [9]와 [11]번째 가져와서 xor한다 문제에서 base64인코딩 결과를 보내라 했으니까 base64로 인코딩도 한다 연산 결과를 1번을 입력한 연결에 보낸다 이걸 10번 반복 전체 코드

pwntool 기본 사용법: foxtrotin.tistory.com/289 덧셈 문제 실행하면 20개 문제를 풀라는 문장과 함께 문제가 시작된다 기본 사용법 글에서 다뤘던 것처럼 풀면 된다 #!/usr/bin/env python from pwn import * r=remote("-", 1234) r.recvline() for i in range(20): first=r.recvuntil('+')[:-1] a=int(first) second=r.recvuntil('=')[:-1] b=int(second) res=a+b print(res) r.sendline(str(res)) r.interactive() 처음 한 줄 받아서 questions 문장 넘기고 +까지 받고 공백제거 =까지 받고 공백제거 계산 후 출력한다
pwntools pwntools는 CTF 프레임워크이자 익스플로잇을 쉽게 짤 수 있게 해주는 라이브러리이다 공식 깃허브: github.com/Gallopsled/pwntools 공식 문서: docs.pwntools.com/en/stable/# 설치 apt-get update apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential python3 -m pip install --upgrade pip python3 -m pip install --upgrade pwntools 기본 사용법 from pwn import * #임포트 r = precess("파일") #파일 실행 r.sendline("hello") ..