Hackctf

hackctf basic_bof

너cu 2020. 5. 21. 02:25

오늘부터 j0n9hyun ctf를 푼것을 이해한것을 토대로 풀이를 올려보려고 한다. 

 

가장 점수가 낮은 1번문제부터 풀어보자

 

필자는 IDA PRO로 분석을 하고 

실습 환경은 VMWARE 15 , Ubuntu 18.04.4 LTS 이다.

 

VMWARE나 Ubuntu 설치 과정은 구글링해서 직접 설치 해보는것을 권장한다.

 

필자가 쓸 gdb는 peda gdb를 사용하여 분석해보도록 하겠다.

 

1번 문제이다. nc ctf.j0n9hyun.xyz 3000 이 나와있는것을 보아하니 터미널에서 저렇게 실행하면 

파일을 볼 수 있다.

 

처음 시작할때 내가 골머리를 썩었던것은 파일 실행이 되지 않앗다.

아직 리눅스에 대한 기초지식이 부족하니 파일을 다운받고 chmod u+x 를 안해주니

파일이 읽혀지지가 않는데 user, excute 라는 의미로 유저에게 실행 권한을 준다는 의미이다.

그러니 아래의 파일이 실행된 후 123을 입력하니 [buf]: 123 , [check] 0x40302041이라는 글씨가 뜨고 종료된다.

 

 

 

가장 먼저 필자가 하는것은 어떤 보호 기법이 걸려있는가를 보는것이다.

만약 아래의 내용이 궁금하다면 "리눅스 보호기법" 이라고 구글링하여 검색한 후 보면 내용이해에 도움이 될것이다.

 

 

또 Exeinfo PE 로 어떤 파일인지 확인해준다. 

32bit elf 파일이라 나와있다. 우리는 아래의 파일을 IDA로 분석해볼것이다. 

IDA로 분석하면 아래의 그림이 나타난다.

V5 != 0x4030201 && v5 != 0xdeadbeef(맨 처음 클릭해서 h로 바꿔주면 deadbeef로 바뀜)

위의 문자들은 !=가 붙어있는것을 보니 만약 2 조건을 충족 못한다면 단지 you are on the right way!가 뜰뿐이지만

 

v5 == 0xdeadbeef 일시 아래에는 축하 문자를 출력하며 system("/bin/dash")로 우리를 안내할것이다.

 

그렇다면 우리는 v5 에다가 0xdeadbeef를 넣어주어야 한다. 

 

char s 와 int v5의 거리는 34 - c 이므로 16진수를 10진수로 변환시켜주면 40만큼의 거리차이가 난다.

 

40의 거리차이를 필요없는 문자로 채워주고 그 뒤에 deadbeef  를 채워준다면 간단한 오버플로우를 할 수 있다.

 

우리는 python 코드를 짜서 실행 시켜볼것이다.

 

 

 

pwntools를 가져와서 찾을 코드들을 입력하여 :wq를 해주고 실행하면

 

flag를  볼수있따~~~~

 

 

 

알아놓으면 좋은 잡 지 식

1. IDA는 H를 누르면 HEX 면환 가능

2. 만약 실행이 안될 시  Chmod u+x 설정

3. 그래도 실행이 안될시 64bit 기반으로 서버가 구축됬을 가능성이 있으니 32bit 파일도 실행 가능한 명령어를 써줘야함

--->>> "sudo apt-get install libc6-i386"

4. 모르는거 구글링하기

 

 

BOF는 재밋다~