hackctf basic_bof
오늘부터 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는 재밋다~