본문 바로가기

전체 글

(71)
input 실행 입력 잘하면 flag 준단다. 소스 코드 확인 main 크게1. argv 2. stdio 3. env 4. file 5. network 로 나눌 수 있다. argv 조건1. argc가 100 2. argv['A']가 "\x00" 3. argv['B']가 "\x20\x0a\x0d" ord() : 문자의 아스키코드값 반환하는 함수 이렇게 코드를 작성하고 process함수의 argv인자에 ch를 설정해주면 된다. stdio 조건1. 표준입력으로 4byte 읽은 문자열이 "\x00\x0a\x00\xff"2. 표준에러로 4byte 읽은 문자열이 "\x00\x0a\x02\xff" 표준 에러 : one.txt파일을 a(all)모드로 open, "\x00\x0a\x00\xff"을 write한 후 바로 close하..
random 실행해보자 음ㅁ..? 소스 코드 확인아마 seed값을 따로 설정하지 않는 이상 random값은 같을 것이다. 그럼,1. random값 확인2. key값 입력 random값 확인 random값 : 0x6b8b4567 0xdeadbeef ^ 0x6b8b4567 = 0xb526fb88십진수 : 3039230856 key값 입력 꿀
flag flag format 64bit elf파일stripped -> 디버깅 불가 디스어셈블 해보려 하니안된단다. 일단 실행 가능하게 만든 후 실행 malloc이후 flag를 strcpy할거란다. 일단 뭔 파일인지 알아보면패킹된 파일이라고 한다. 언패킹 언패킹 후 디버깅malloc 이후 main+32에 flag표시된 값이 rdx로 들어가는 거 발견 main+32에 break 걸어놓고 실행 꿀
bof bof.c func 디버깅(굳이 안해도 된다) func의 인자 0xdeadbeef를 0xcafebabe로 교체하면 끝 솔직히 대충 때려치기 하면 된다. 틀렸을 때 맞았을 때 하지만 쉘이 바로 끝난다. 어떤 명령어도 입력할 수 없다.여기서 cat을 써줘야 한다.왜? cat은 입력받은 문장을 다시 출력해 주는 명령어다.python 부분으로 앞의 출력이 끝나고 cat으로 stdout파이핑 하도록 해야하기 때문만약 cat 해주지 않으면 stdin이 close되기 때문에 쉘이 종료되서 flag파일을 열어볼 수 없다. 쉽게 말해,쉘을 열고 cat 실행 -> 원하는 명령 입력(ex. cat flag) -> 출력이 되기 때문에 파이프라인 넘겨서 전달됨-> cat flag가 처음엔 cat으로 입력됐다가 cat의 출력으로..
collision 소스 코드 check_password를 디버깅 해보면 간단한 문제다.argv[1]로 입력한 문자를 dword(4byte)씩 잘라내 각 자릿수를 더한 최종 문자열이 0x21DD09EC가 되면 된다.
hackerschool FTZ : level 11 풀이 디렉토리 확인 hint 여기서 setreuid는 다시 ruid, euid를 각각 원하는 대로 변경가능한 함수ruid : 프로세스 실제 소유자 euid: SetUID 권한이 설정된 실행 파일에 의해 변경된다. euid는 일시적으로 다른 계정의 uid 저장하고, euid에 저장된 uid에 따라 프로세스의 권한이 결정된다. 여튼 내용보니 strcpy를 이용해 bof 하면 될 것 같다. argv[1]에 넣을 쉘 코드 만들기 1. 쉘을 만들 간단한 C코드 2. 컴파일 후 objdump를 이용해 어셈코드 확인 main execve 여기서 중요한 어셈블리만 뽑아서위 메인함수의 execve(sh[0],sh,NULL); 에 필요한 최소한의 어셈코드를 작성 컴파일 후 확인 밑에 보면 이 쉘코드는 NULL이 포함된 쉘코드 ..
시작 시작을 하며...블로그를 시작해야지 시작해야지 하다가.. 드디어 운영?해본다나의 인생을 녹아내리겠다ㅋㅋ(뻥)