FSB 11

[THC CTF 2021] 내가 푼 문제들 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro Pwn Babyrop (94 point, 59 solves) rop ? rtl ? 대놓고 BOF가 터진다. secret_func에서 execve 함수를 사용해준다. 그래서 굳이 libc leak할 필요가 없다. 0x402204 + 22 = 0x40201a from pwn import * p = process('./babyrop') e = ELF('./babyrop') pop_rdi = 0x4012c3 pop_rsi_r15 = 0x4012c1 payload = '' payload += 'A' * 0x28 payload += p64(pop_rdi) payload += p64(0x40201a) # /bin/sh payload += p..

CTF/Write UPs 2021.06.17

[pwnable.xyz] GrownUp 풀이 (64bit, fsb, strcpy)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro strcpy는 NULL까지 읽어서 복사 주어진 파일은 문제 파일 바이너리 Flag는 바이너리 파일 안에 있다고 한다. 셸을 따는 문제가 아닌 것 같다. Analysis mitigation execution N를 입력하면 프로그램이 종료된다. 그래서 y를 입력해야 한다. fsb 문제인가 하고 한번 입력해봤는데.. 그냥 그대로 출력해준다. 코드를 확인해보자. code 입력을 두 번한다. 처음에 y나 Y를 입력하지 않으면 종료된다. 한글자만 입력하면 되는데 신기하게 더 입력할 수 있다.. 16글자까지 입력이 가능하다. 그리고 read함수로 src에 입력을 받고 strcpy 함수로 usr에 복사를 한다. usr는 bss 영역에 있어 전..

64bit에서 FSB (Format String Bug) 이해하기 -(3)(완)

참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) 64bit FSB 시리즈 : 64bit에서 FSB (Format String Bug) 이해하기 -(1), (2) 32bit FSB 시리즈 : 32bit에서 FSB (Format String Bug) 이해하기 -(1),(2),(3) 지난번에 FSB 취약점을 이용하여 shell함수를 exit@got에 덮어보았다. 오늘은 shell함수가 없다..! * (2)을 보지 않았으면 (2)부터 꼭 보고 (3)번 글을 읽길 바랍니당. system('/bin/sh') system('/bin/sh')는 쉘을 실행하는 시스템 함수이다. 포너블 분야에서는 이 함수를 최종적으로 실행하여 익스플로잇에 성공하게 된다 이 함수를 실행시키기 ..

64bit에서 FSB (Format String Bug) 이해하기 -(2)

참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) 64bit FSB 시리즈 : 64bit에서 FSB (Format String Bug) 이해하기 -(1) 32bit FSB 시리즈 : 32bit에서 FSB (Format String Bug) 이해하기 -(1),(2),(3) 지난번에 간단하게.. fSB 취약점을 이용하여 변수의 값을 바꿔보았다. 오늘은 shell함수가 등장한다.. (1)을 보지 않았으면 (1)부터 꼭 보고 (2)번 글을 읽길 바랍니당. PLT와 GOT PLT : 외부 라이브러리 함수를 사용할 수 있도록 주소를 연결해주는 역할을 하는 테이블 GOT : PLT에서 호출하는 resolve 함수를 통해 구한 라이브러리 함수의 절대 주소가 저장되어 있는 테..

[HackCTF : Pwnable] You are silver 풀이 (64bit, FSB) (수정)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 64bit FSB 잘 몰라서 진짜 대충대충 인터넷에 떠도는 fsb 자료들 보고 야매로 풀었다... ㅎ 주어진 파일은 문제파일 바이너리 Analysis 일단 실행 이름을 입력하니까 입력했던게 출력이 되고, 나보고 silver라고 한다. 그리고 세폴이 뜨며 중지된다. 왜그런거지..?! IDA main을 살펴보자. 저기 대놓고 fsb가 터진다. bof도 터지는데, 쪼잔하게 터져서 RET를 건들수 없다. 문제풀 때 대충 그린건데.... 이해는 갈거라 생각한다. get_tier함수를 살펴보자. 요악하자면 인자가 a1인데, 인자로 들어온게 'K' 즉, 75보다 크면 4를 반환한다. (내가 왜 여기만 보여주는지는 밑에가서 알 수 있을 것) ..

WAR GAME/HackCTF 2021.04.20

32bit에서 FSB (Format String Bug) 이해하기 -(3) (완)

업데이트 : 2020.10.11 - 3번과정 계산법 추가 참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) 저번 (2)편에 이어서 32bit에서 FSB(Format String Bug)를 이해해보자. 이제 shell 함수 없이 쉘을 따보자. 쉘을 따려면 system("/bin/sh")를 실행시키면 된다. 이때 알아야 할 것은 system 함수의 주소이다. ASLR이 걸려있으면 system 함수의 주소는 실행할 때 마다 변하게 된다. (ASLR은 base 주소를 변경시키기 때문, 예시는 아래에 있음) 그래도 프로그램을 실행하는 동안에는 한 주소로 고정이 된다. 모든 라이브러리 함수는 고정된 offset 값을 가진다. offset값은.. 상대적 거리라고 생각하면 ..

32bit에서 FSB (Format String Bug) 이해하기 -(2)

참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) 저번 (1)편에 이어서 32bit에서 FSB(Format String Bug)를 이해해보자. 시스템 해킹의 주된 목적은 shell을 획득하여 임의의 명령을 실행하는 것이다. 흔히 system함수에 인자를 /bin/sh로 주어서 쉘을 획득한다. system("bin/sh") 저 함수를 어떻게 이용하여 쉘을 획득할까? GOT를 overwrite하여 획득한다. 이를 위해 먼저 PLT와 GOT를 이해하여야 한다. 간단하게 설명하면 PLT는 코드고, GOT는 주소 값이 저장된 공간이다. 함수를 호출하면 PLT 코드가 실행되고 PLT 코드에서 GOT에 적힌 주소로 이동을 하는 것이다. 특정 함수의 GOT를 변경하면 해당 ..

32bit에서 FSB (Format String Bug) 이해하기 -(1)

업데이트 : 2020.10.10 - 틀린 내용 수정 참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) FSB 저번 8월 말인가에 봤던 건데 오랜만에 보니까 까먹어서.. 정리해보려고 한다. printf(buf) 에서 흔히 FSB(포맷 스트링 버그) 취약점이 발견된다. printf의 인자 개수는 포맷 문자 개수로 결정된다. buf의 값을 우리가 마음대로 정할 수 있다면 포맷문자를 넣어버리면 우리가 원하는 값을 출력이 가능하다는 뜻이다. 예를 들어 인자로 %d만 넣었을 경우 main함수의 영역이 출력될 수도 있다. 사진 상 우측이 FSB 취약점이 발생한 경우이다. 이를 이용하여 main 함수 스택 내용을 모두 노출 시킬 수 있다. %p를 통해 메모리를 유출할 수 있..