보안공부/pwnable.kr

[pwnable.kr] bof

아놀드금자 2020. 7. 12. 17:49
728x90

이번엔 넷캣


칼리 리눅스 켰음

bof랑 bof.c 다운
bof.c 파일 확인



이 선생님께서 어셈블리어 명령어부터 숙지하라고 하셨다... 넵
출처: https://webstone.tistory.com/123

 

pwnable-Bof write up

이번 시간에는 pwnable.kr에서 bof문제에 대해 write up해보겠다. 해당 bof writeup을 하기 전 간단하게 assembly 언어의 기본 명령어 부터 숙지하자. opcode(CPU에서 실행할 수 있는 단일 명령어) push -스택에..

webstone.tistory.com

opcode(CPU에서 실행할 수 있는 단일 명령어)

push 스택에 값을 넣음
pop 스택에 값을 뺀다
add 값을 더함
sub 값을 뺀다
mov 값을 넣음 ex) a=b ebp=esp
lea 값 대신 주소를 넣음
cmp 두 값을 비교
call 함수를 호출
ret call로 호출된 함수를 종료하고 그 다음 명령줄로 이동

 

operand(피연산자)

eax 함수의 리턴값이 여기에 들어감(+,- 연산)
edx eax와 역할은 같지만 함수의 리턴값이 없음
ecx 카운터 역할(ex for문에서 ++같은 역할임)
esi 복사할 데이터의 주소가 저장
edi 데이터를 복사할때 목적지 주소가 저장
esp 스택 프레임의 끝지점 주소가 저장
ebp 스택 프레임의 시작지점 주소가 저장

 


gdb bof 입력함

disas main이 뭔데... 
disas main (disassemble main) : 메인 함수에 대해 어셈블리어로 표현해줌


그 다음 disas func 입력해봄
disas func (disassemble function) : function에 대해 disassemble 수행


흠... c 코드의
if (key == 0xcafebabe)에 해당하는 부분
-> cmpl $0xcafebabe,0x8(%ebp)
key를 뜻하는게 0x8(%ebp)인가봄...ㅡㅡ

c의 gets(overflowme) :입력받는함수임
-> lea -0x2c(%ebp), %eax에 해당

두 위치를 차이를 알아내기

윈도우계산기 쓰면 편리함

10진수로는 52가 나옴 52byte 만큼 떨어져있다.
입력받는 값을 52만큼 밀어내기 위해서 다른 값으로 채워야 한다.


이번에도 역시 리틀엔디안 방식
ca fe ba be 아니고 be ba fe ca
이산수학이랑 컴구때 배운 내용들 나오니까 신기함 강의 좀 더 열심히 들을걸

파이썬 버전 변경

코드 입력했는데 안먹혀서 보니까 python3은 print에 괄호를 붙여야 한다고.... 저번에 3으로 설정한거 다시 2로 바꿨다

(python -c 'print "A" * 52 + "\xbe\xba\xfe\xca"';cat ) | nc pwnable.kr 9000 입력
파이프 라인은 왼쪽명령의 결과가 오른쪽의 입력이 됨

ㅜㅜ 할 수 있다!

 

728x90

'보안공부 > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] passcode  (0) 2020.07.12
(수정중)[pwnable.kr] flag  (0) 2020.07.12
[pwnable.kr] collision  (0) 2020.07.12
[pwnable.kr] fd  (0) 2020.06.30