WAR GAME/HackCTF 43

[HackCTF : Pwnable] RTC 풀이 (64bit, ROP)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro RTC 기법 공부해보려고 이 문제 풀었는데 호옥시나..?! 하는 마음에 풀어봤더니 성공했다. 주어진 파일은 문제파일 바이너리 and libc Analsysis 일단 실행 그냥 종료된다. IDA main을 살펴보자. BOF가 터진다. RET를 건들 수 있다. How to exploit 보호기법 plt, got 다 살아있지만 스택에 shellcode 쓰기와 실행은 불가능하다. ROP하는 쪽으로 방향을 잡아보자. ROP 1. read함수 got를 leak 2. libc base 획득! 3. system('/bin/sh\x00') 실행 write함수를 이용하여 read함수의 got를 leak해보자. 그럴려면 3개의 가젯이 필요하다. p..

WAR GAME/HackCTF 2021.04.19

[HackCTF : Pwnable] SysROP 풀이 (64bit, SROP)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro syscall rop는 할 줄 알지만.. syscall 가젯을 못찾겠어서 롸업보고 풀었다 ㅠㅠ 주어진 파일은 문제파일 바이너리 and libc Analsysis 일단 실행 그냥 입력받고 종료한다. IDA read함수 ... bof 발생한다. stripped 된 파일이라서 사용자 정의 함수들이 sub_* 이런식으로 되어있다. 그래서 심볼도 없다. 참고로 stripped 되었다는 것은 실행에 필요한 부분을 제외한 다른부분이 없는 것이다. 컴파일/링크되어 생성된 실행파일에는 symbol table과 section, 컴파일러/링커 관련 내용 등등... 여러가지 실행에는 필요없는 부분이 포함되어 있다. strip은 실행파일의 크기를 줄이..

WAR GAME/HackCTF 2021.04.16

[HackCTF : Pwnable] Unexploitable #2 풀이 (64bit, system)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 이런 시리즈류의 문제는 잘 모르겠으면 그 다음 문제와 비교하여 뭐가 달라졌는지 확인하면 큰 힌트가 될 수 있다. 아 그리고 system함수로 leak을 할 수 있는 걸 처음 알았다. 주어진 파일은 문제파일 바이너리 Analysis 일단 실행 귀신같이 fflush로 문제푼건 어떻게 알고...ㅎ IDA 1이랑 코드가 거의 똑같다. 대신 fflush가 없다. 사실 이 문제 시리즈 3을 봤는데, 거기엔 system@plt가 없다고 했다. 그래서 system함수를 이용하여 문제를 푸는구나~라고 생각하고 system함수에 집중하였다. How to exploit system 함수의 인자로는 명령어가 들어간다. 근데... 평범한 문자열..? ..

WAR GAME/HackCTF 2021.04.15

[HackCTF : Pwnable] Unexploitable #1 풀이 (64bit, sh)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 이제 sh 문자열만 보면 흥분할 것 같다 wish.. fish.. 주어진 파일은 문제파일 바이너리 Analysis 일단 실행 system 함수의 plt를 가지고 있단다. IDA 오호 정말 선물처럼 system함수가 있다. main을 살펴보면 bof가 발생한다. How to exploit system 함수를 줘서 친절하게 /bin/sh 문자열도 어디 숨겨놨나~ 하고 찾아봤다. sh 명령으로도 익스할 수 있다. (jiravvit.tistory.com/entry/HackingCamp-CTF-2021-pwn-Secure-Test-%ED%92%80%EC%9D%B4-%EC%96%B8%EC%9D%B8%ED%85%90?category=9023..

WAR GAME/HackCTF 2021.04.15

[HackCTF : Pwnable] j0n9hyun's secret 풀이 (64bit, fd overwrite)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro JSec님이 문제 내신거다. 주어진 파일은 문제파일 바이너리 Analysis 일단 실행 음 이름을 입력받는다... 뭐지 실행 후 파일을 살펴보면, flag와 top_secret 파일이 생성된다. IDA 함수 이름이 저런 것이 보아 ... static으로 컴파일 한 것 같다. main함수를 찾아보자. 프로그램이 시작하면 start함수를 젤 먼저 실행한다. 여기서 main을 호출하는 구조이다. 그래서 먼저 start를 함수를 찾아서 저기 안에 있는 함수들을 보면서 main을 찾으면 된다. (현재 사진은 내가 main을 찾고 rename해놓은 것이다.) 저기 출력된 문자열을 보고 이 함수가 main임을 확신하고 rename시켜주었다...

WAR GAME/HackCTF 2021.04.15

[HackCTF : Pwnable] uaf 풀이 (32bit, uaf, 힙알못)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 힙알못의 uaf 문제 풀이입니당 힙알못이라 푸는데 오래 걸렸음 주어진 파일은 문제파일 바이너리 Analysis 일단 실행 종현님이랑 엉덩이 공부를 할 수 있다. 느낌상, uaf를 이용해야하고 힙에 원하는 바이트만큼 쓸수도 있고 삭제도 되고 출력도 되는 것 같다. 솔직히 여기까지 개쉽겠다라고 생각했다. (사실 개쉬운 문제 맞다.) 암튼.. uaf라고 함은... use after free... free된 후 사용하는건데 malloc하고 free한 후, 방금 free된 바이트 수? 만큼 똑같이 malloc하면 똑같은 자리에 위치된다? 이거를 이용하는 것이다. IDA main에서 봐야할 것은 4가지 함수이다. add_note del_n..

WAR GAME/HackCTF 2021.04.15

[HackCTF : Pwnable] pwning풀이 (32bit, underflow)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 하마터면 못풀뻔했다. 주어진 파일은 문제파일 바이너리 Analysis 일단 실행 쓰고싶은 바이트 수를 쓰고 그 바이트만큼 쓸 수 있다. IDA main은 간단하다. vuln 함수 하나 있다. 여기서 주목해야할 건 v2 변수가 int라는 것이다. 그래서 -1을 입력하게되면 언더플로우가 발생해서 겁나 큰 수가 되게 된다. get_n 함수는.. getchar()함수를 이용해서 '\n' 오기 전까지 입력받는 거다. (사실 저런 수 입력하는거 보면 -1 입력하고 싶은 욕구(?)가 생겨서 코드보기전에 일단 -1부터 눌러봤다 ㅋㅋ) How to exploit -1를 입력하여 BOF를 트리거 하여 ROP해주면 될 듯하다. 리모트로 익스하려면 ..

WAR GAME/HackCTF 2021.04.15

[HackCTF : Pwnable] gift 풀이 (32bit, ROP)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 250점 짜리 문제인데 이정도는 껌이지 후훗 주어진 파일은 문제파일 바이너리 Analysis IDA로 열어보자. binsh 는 bss영역의 변수다. binsh와 system 함수의 주소를 출력해준다. printf 함수를 통해서 fsb가 트리거될 수 있는데 쓸만한거 주소들 다 출력해주니 딱히 leak할 것이 없어보였다. 실행중인 함수의 주소를 출력해주니깐... 마지막으로 gets 함수에서는 bof가 트리거된다. 여기서 RET를 system함수 주소로 바꾸고 인자를 '/bin/sh'로 주면 될 것 같다. 그래서 줘봤는데... 안되어서 보니깐 binsh 주소에 아무것도 저장되어 있지 않았다.. ㅠㅠ...! 그래서 먼저 gets 함수를..

WAR GAME/HackCTF 2021.04.10

[HackCTF : Pwnable] look at me 풀이 (32bit, mprotect)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 롸업 구글링해보니 다른 풀이도 있길래 그 방법으로 한번 풀어보려고 한다. 주어진 파일은 문제 파일 바이너리 Analysis [HackCTF : Pwnable] look at me 풀이 (32bit, syscall) 참고참고 ~~ How to exploit system 함수가 없어서 mprotect 함수를 이용하려고 한다. mprotect(원하는 주소, 사이즈, 권한) mprotect 함수는 원하는 코드 영역의 권한을 변경할 수 있는 함수이다. 지금 nx가 걸려있어서 쉘코드 실행이 안되는데 이 함수를 이용하여 bss 영역의 권한을 7로 바꿔주고 쉘코드를 집어넣어 실행시킬 것이다. mprotect의 인자값을 넣을 때 주의해야 할 점..

WAR GAME/HackCTF 2021.04.09