System Hacking/FSB(Format String Bug) 6

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 함수를 통해 구한 라이브러리 함수의 절대 주소가 저장되어 있는 테..

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

참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) 32bit FSB 시리즈 : 32bit에서 FSB (Format String Bug) 이해하기 -(1),(2),(3) 지난 10월... 32bit에서 FSB를 이해했었다. 이제 드디어..! 64bit에서 FSB를 제대로! 이해해보려 한다.(이때까지 문제 푼거는 야매로 문제 푼 것 .. .. ....) 사실 32bit FSB 열심히 공부해놨는데, 정작 문제들은 다 64bit에서의 FSB라서 슬펐다..ㅠ 아무튼~ 시작해 봅시당~ tmi 더보기 초반에는 단순 FSB 개념이기 때문에 32bit에서와 겹친다. 하지만 64bit에서의 특별한 FSB 설명도 있을 수도.. 64bit 함수 호출 규약 함수 호출 규약 : 함수를..

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를 통해 메모리를 유출할 수 있..