Be myself :: FSB공격 정리

달력

42024  이전 다음

  • 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

FSB공격 정리

Exploit 2014. 5. 4. 01:59

사실 포맷스트링 취약점이 존재하는 프로그램으로, 기본적으로 쓰기가 가능하고 프로그램 실행 흐름을 바꿀 수 잇는 주소라면 어디든지 공격 가능하다. 그 중, 셸을 획득하는 몇가지 기본적인 방법을 소개한다.

1. GOT(전역 오프셋 테이블)

프로그램은 실행될때 공유 라이브러리 항목이 같이 stack 에 올라가는데, 이 공유 라이브러리를 읽을때 테이블을 참조하게 된다. 이 테이블을 PTL(Procedure Linkage Table)이라 한다. 어떤 프로그램을 objdump로

이 섹션을 분석해보면 아래와 같다.




 

위에 보이는 0x8048308 주소에 보면 이 exit이 호출될때 0x8049784로 점프하는것을 볼 수 있다. 이 jump 명령을 조작해 셸코드를 실행 시키는 것 이다.

 

2. ret주소 덮기.

이는 버퍼 오버플로 공격에서도 많이 해왔던 공격이다. 이 ret주소값에 셸코드 주소를 올리면 되는데 보편적인 방법이 2가지 존재한다.

 

2-1. 환경변수

환경변수에 셸코드를 올리고 그 주소값을 계산한 후 ret에 덮는 공격이다.

2-2. 직접 셸코드 올리기

프로그램을 실행 시키고 그 관련된 변수에 셸코드를 올린 후 그 주소값을 ret에 덮는 방법이다.

이 방법은 NOP를 많이 넣을 수 없는 경우가 생기고 gdb에서 빠져나와 실제 실행 했을시 주소값이 바뀔경우 공격이 정확히 들어가지 않는다.. 역시 환경변수가 최고.

 

3. 소멸자 이용

GNU C 컴파일러를 이용해 컴파일된 프로그램에선 소멸자와 생성자를 위한 특수 테이블 섹션 .dtors 와 .ctors 를 생성한다. 소멸자는 (nm 파일이름)이나 (objdump -h 파일) 으로 주소값을 확인 가능하다.  소멸자는 쓰기가 가능하기 때문에 이 주소에 셸코드 주소를 입력하면 된다.

 

흠.. 이정도?

'Exploit' 카테고리의 다른 글

C++에서 VTable  (0) 2014.07.12
여러 보호기법  (0) 2014.07.11
SEH overwriting  (0) 2014.07.10
윈도우 BOF  (2) 2014.05.28
간단한 Shellcode 만들기  (0) 2014.05.05
Posted by flack3r
|