이번엔 메모리가 변하는 것을 확인하기 위해, 취약 프로그램에 dumpcode 헤더를 추가하여 실행해보자. 일단 root에서 dumpcode 헤더가 탑재되어 있다고 가정, 코드는 다음과 같다.실행시켜보면 다음과 같다.우선 vul1 파일을 실행시키고 AAAA를 입력하고 값을 받아보면 AAAA의 값은 네 번째에 위치하고, 조작하기 전의 값은 00 00 00 00 이다. 이제 이 값을 조작하기 위해서 코드를 입력해 보자.(printf "\x41\x41\x41\x41\xa0\xf0\xff\xbf%%8x%%8x%%8x%%c%%n";cat)|./vul1코드를 보면 우선 AAAA와 주소를 입력하고 자릿수를 맞춰주기 위해 %8x를 넣어주는데 네 번째에 AAAA가 들어가므로 8x는 세 개만 쓰고 그 다음 %c를 넣어준 다..
FSB(Format String Bug)란 BOF와 함께 대표적인 시스템 해킹으로 꼽히는 기술이다. C언어가 탄생했을 때 같이 존재 했던 취약점임에도 불구하고 BOF가 나온 지 20여 년 후에 기술이 발견되었다. FSB는 Format String(%s와 같은 C언어의 변환 명세)의 Bug를 이용해 메모리를 변조하는 기술이라고 볼 수 있다. 그렇다면 우선 Format String부터 알아보자. 다음과 같다.위의 표에 있는 Format String들은 흔히 쓰이는 것이다. 모른다면 알아두기를.자 그러면 이제 FSB에 취약한 코드와 그렇지 않은 코드를 우선적으로 비교해 보겠다.위의 사진은 Format String이 들어가지 않은 취약점이 존재하는 코드, 아래 사진은 Format String이 들어간 취약점이 ..
FSB 공부를 할 때 덤프코드 헤더가 필요하므로 올리겠다.
간만에 포스팅하는 거지만 암튼 오늘은 GOT Overwrite를 해 보겠다. 일단 아래와 같은 파일을 만들어보자. 보면 일단 print.c 파일은 root로 SetUID로 고정되어 있다는 것을 알 수 있다. 그리고 print.c 내용을 보면 scanf 함수와 printf 함수가 있는데, 위에 있는 h.c로 만든 h 파일을 이용하여 scanf 함수를 root로 권한을 따고 system 함수의 주소로 조작할 수 있다. 그리고 첫번째 인자로 "%s"인 것을 "./h;"로 바꾸어서 실행하면 system("./h;", buf);가 실행되어 쉘 실행 프로그램인 h를 실행하게 되는 것이다. 그러면 일단 .plt Section의 시작주소를 알아보기 위해서 readelf -S를 사용해보자. readelf를 사용할 때, ..
리눅스를 공부하는 데 있어서 필요한 기초적인 명령어 정리 파일이다.부끄럽지만 직접 정리한 것들...
PLT와 GOT의 구조를 알아보기 위해 간단한 덧셈 소스코드를 만들어보자.만든 다음, Section header만 띄우기 위해 readelf -S을 쳐보면 다음과 같다.여기서 .plt와 .got.plt section을 볼 수 있다..plt 섹션은 Procedure Linkage Table의 약자로써 함수를 링크가능한 테이블로 프로그램이 호출하는 모든 함수가 나열되어 있다..got.plt 섹션은 Global Offset Table의 약자로 전역 offset을 가지는 테이블이다.이제 gdb로 파일을 둘러보자.main을 disassem 했을 경우 다음과 같다.main을 보았을 때 첫 부분에서 printf가 호출되는 것을 볼 수 있다. 한 번 내용을 들여다보자.어딘가로 점프를 하는 것을 볼 수 있다. 계속 따라..
동적, 정적 라이브러리 차이점에 대해서 알아보기로 하자. 정적 라이브러리는 프로그램과 같이 컴파일 & 링크 되어 실제 오브젝트 파일 내에 포함 되어서 실행 되는 라이브러리이다. 라이브러리와 프로그램이 합체되기 때문에 정적 라이브러리와 링크 하면 프로그램 용량이 늘어나는 현상을 볼 수 있다. 프로그램과 합체가 되면 속도는 빨라지지만 단점도 생기는데 라이브러리가 업데이트 되었을 때 그 라이브러리를 사용한 프로그램의 업데이트가 쉽지 않다. 이래서 DLL이라고 불리우는 동적 라이브러리가 탄생하게 되었는데 프로그램에 합체 된 정적 라이브러리를 밖으로 꺼내 놓기 시작했다. 이게 바로 동적 라이브러리이다. 이러면 아주 편하게 수정 & 배포를 할 수 있으리라 생각 했겠지만 속도가 느려지는 단점이 있다. 아래 프로그램으..
PLT PLT는 "Procedure Linkage Table"의 약자 입니다. Procedure들을 연결해 주는 Table이라는 것이다. PLT는 Procedure를 연결하지만 외부 Procedure를 대상으로 연결을 한다. 즉 프로그램코드를 짰는데 모두 직접 같은 화일 안에서 구현한 Procedure들이라면 이것들은 따로 PLT가 필요없이 직접적으로 호출이 가능하다. 그런데 이런 Procedure가 아닌 다른 라이브러리에 위치해 있는 Procedure를 호출 할 때에는 PLT를 사용해서 그 Procedure를 호출하게 된다. GOT GOT는 "Global Offset Table" 이다. 이 Table은 Procedure들의 주소를 가지고 있다. 이 Table의 중요성은 바로 PLT가 참조하는 Table..
- Total
- Today
- Yesterday
- #010 Editor
- ethereum
- blockchain
- #캐시
- #ReKall
- #Forensic
- #FTK
- #Forensic Tools
- #tool
- #크롬
- #WinHex
- #수정
- ethereumj
- #포렌식
- 이더리움
- 4차 산업혁명
- #Chrome
- Fin Tech
- #WinPmem
- #이미지 수정
- #Volatility
- #WireShark
- #GRR
- #DEFT
- #Security
- #Pmem
- #메모리
- #tcpdump
- #디지털 포렌식
- #EnCase
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |