Be myself :: Be myself

달력

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

struct 관련

Python 2014. 9. 18. 23:10

일단 struct.pack은 파이썬 변수를 c와 같이 변환해서 조작하기 위해 사용된다. 반대로 struct.unpack 은 c와 관련된 hex값을 변환한다. 

여기서 주의할 점은 소켓 프로그래밍 시 서버에서 char이나 int값을 주고 받을 때 unpack을 해서 받고 pack으로 보내주어야 인식이 된다. 근데 char형 배열이나 포인터와 같은 string이라면, 굳이 변환이 필요 없는 듯 하다. 왜 그런진 잘 모르겠다.. 그냥 그런 것 같다. (정확하지 않은 추측이다. 혹시나 정확히 아는 분은 설명좀 ㅠㅠ)

'Python' 카테고리의 다른 글

os.execve 주의  (0) 2015.03.31
str과 repr의 차이  (0) 2015.02.22
with~as 구문  (0) 2015.02.22
개발 시 팁  (0) 2015.02.18
string처리, 관련 메소드  (0) 2014.10.01
Posted by flack3r
|

Double free exploit

Exploit 2014. 9. 17. 15:33

fake chunk 만들 시 PREV_SIZE 와 SIZE값이 과연 무엇을 의미 하는지 이제 약간 감이 잡히는 듯 ? 물론 커널버전마다 약간씩 달라질 것 같긴 한데. 일단 써본다.

exploit-exercises 에서 protostar heap3번 문제가 double free bug 관련 문제다. 이 때, fake chunk를 구성 하는데 만약 [chunk 1 ][chunk 2 ] 이런식으로 되어 있고 여기서 fake chunk를 구성 할 때, 보통 [A * chunk 1 크기][0xfffffc][0xffffffff][fake fd][fake bk] 이런 식으로 페이로드를 구성한다. 근데 이 때 앞의 PREV_SIZE(0xfffffffc) 부분은 fd와 bk의 부분의 오프셋값을 결정하고 size값은 말 그대로 PREV_SUS의 값으로 써 0의 값을 가지는 음수가 위치하게 된다. 

따라서 이 문제에서 답을 얻기 위한 페이로드는 [A * chunk 1 크기][0xfffffc][0xfffffffc]+[AAAA]+[fake fd][fake bk] 이런식으로 A가 dummy 로 들어가는게 핵심인듯.


'Exploit' 카테고리의 다른 글

메타스플로잇을 이용한 쉘코드 작성  (0) 2014.10.03
스택 보호기법  (2) 2014.09.22
RTL을 이용한 쉘코드 작성  (3) 2014.08.02
유니코드 익스플로잇  (0) 2014.07.21
SEH overwrite 실습  (0) 2014.07.16
Posted by flack3r
|

Fc3 dark_eyes

Wargame 2014. 8. 22. 22:53

문제파악

Fake ebp가 먹히지 않는다. 일단 문제를 풀기 전에 https://research.hackerschool.org:8080/Datas/Research_Lecture/FC%203,4,5%20stack%20overflow.txt 여기서 bof의 기법들을 알고 오자. 보고 왔는가? 그렇다면 이 문제는 간단한 ret sleding문제임을 알 수 있을 것이다.

Ebp를 조절하는 대신 esp를 조절해 execv의 인자들을 스택상에 맞춰 주는 기법이다. Execv는 첫 번째 인자에 실행할 파일의 경로가 담긴 주소 값이 들어간다. 두 번째 인자는 argv[]가 들어가는데 null을 넣어줘도 된다. 그렇다는 것은 익스플로잇으로 스택을 구성 할 때 첫 번째 인자가 될 만한 곳을 스택에서 찾아서 그 부분의 값으로 쉘을 주는 프로그램을 ln 링크걸면 실행된다는 것이다. 자 다음과 같이 따라와 보자.

문제풀이

일단 A를 버퍼에 264개 넣었을 때 스택의 모습이다. 스택을 보면 우리가 구성할 인자 부분이 저렇게 보기 좋게 구성되어 있다. 첫 번째 인자부분의 값을 살펴보자.

ㅎㅎ 값도 작고 좋다. 심볼릭 링크의 이름을 \x3c\xed\x83으로 지정하면 된다.(null 까지 읽히므로) 자 그럼 ret를 3번 sleding하고 execv의 주소를 넣으면 쉘이 떨어질 것이다. ^^

페이로드 구성 = "A"*268 + "ret"*3 + &execv

자 다음과 같이 프로그램을 만들고 심볼릭 링크를 걸자.

자 이제 공격!!

아힝흥행~! 깔끔하다.

'Wargame' 카테고리의 다른 글

exploit-exercise ssh 접속방법  (0) 2014.09.24
wargame.kr 올클  (0) 2014.09.21
Suninatas all clear  (3) 2014.07.25
워게임 현황  (0) 2014.07.01
CodeEngn 베이직 올클  (0) 2014.05.14
Posted by flack3r
|