본문 바로가기

워게임200

LOB - wolfman (심볼릭 링크) 내가 익스해왔던 모든 방법을 막아버렸군... 1. 환경 변수 안 됨 2. argv 안 됨 3. buffer에 넣기 안 됨.... 남은 방법은 심볼릭 링크 사용하는 것... 어떻게 사용할 것인가? 파일 이름을 쉘코드로 만들고, 48byte는 "더미 char"*44 + "파일이름(쉘코드)으로 리턴주소" 로 구성하면 될 것 같다. 먼저, 쉘코드 이름으로 심볼릭 링크를 생성했다. ln -s darkelf `python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'` -> 여태 쓰던 쉘코드 이렇게 하면, no such file or directory가 뜰 것.. 2021. 7. 31.
LOB - orc (1) 환경변수를 0으로 만들어버린다.... (2) buffer를 0으로 만들어버린다... golbin의 첫 번째 풀이로 풀면 되겠다. -> buffer에 쉘 코드를 담지 않고, 환경변수에 쉘 코드를 담지 않는 방식으로.. 즉, argv[1]에 기이이이이인 nop와 쉘 코드를 담는 방식으로.. argv[1] -> [ebp+12]에 argv 시작 주소를 담고 있고, 거기서 +4를 하면 argv[1]의 주소이다. buffer -> [ebp-40] buffer[40] --------------- ebp --------------- ret --------------- argc --------------- argv --------------- dummy.... --------------- env ---------.. 2021. 7. 31.
LOB - goblin extern? c언어의 외부 변수 즉, 외부에 있는 변수를 사용하기 위한 키워드 extern char **environ 은 외부에 있는 environ이라는 변수를 가져오겠단 말이군!! 근데 environ이 환경변수를 뜻하는 것 같아서 "c언어 environ"을 찾아봤다. - [출처 : https://badayak.com/4378] extern char **environ; ☞ 외부 참조 변수로 선언 이라고 한다.... 그렇다면 저 //egghunter 부분은 환경변수를 모두 호출해 0으로 바꿔버리는 놈이군... 내가 여태 했던 방식이 안 먹히겠다ㅜ [gdb로 파악할 수 있는 것] 스택 구조를 파악할 수 있다. ------------------------ buffer[40] 2021. 7. 31.
[풀이X흐름O]LOB - gate 쉽게 푼 건 풀이를 쓰지 않습니다 cat gremlin.c 쉘코드를 포함한 환경변수를 등록해서 그 주소로 ret을 덮어쓰도록 익스플로잇했다. (과정 생략) 가장 헷갈렸던 부분은 gdb로 까서 set disas intel하면 intel 어셈으로 바뀌어야 하는데 at&t의 '%'가 나오던 부분... >> AT&T 어셈블리 https://kldp.org/node/19144 assembly 에서 lea 명령어가 뭔가요..? | KLDP 0x804854d mov 0x804971c,%eax 0x8048552 push %eax 0x8048553 push $0x3ff 0x8048558 lea 0xfffffbf4(%ebp),%eax 0x804855e push %eax 0x804855f call 0x80483e4 0x80.. 2021. 7. 30.
FTZ - level20 hint 일단 포맷스트링 버그구나... 드림핵 강의 정독하고 푸는 게 좋다. https://dreamhack.io/learn/3#23 로그인 | Dreamhack dreamhack.io 환경변수에 쉘 코드를 등록해놓고,(export MYSHELL=$(python -c 'print "\x90"*0x1000 + "쉘코드"') 그 주소를 구해서 ☞ 나의 경우 0xC0000000 - 0x1000 = 0xBFFFF000 포맷스트링 버그를 이용해 attackme의 ret에 덮어씌우면 되겠다, 라고 생각했다. 하지만 gdb attackme - disas main 이 작동하지 않았다. 그래서 일단, 덮어씌울 주소를 (addr)으로 가정했다. 그렇다면 드림핵 강의에서처럼 쉘코드가 있는 환경변수의 주소가 bfff(=491.. 2021. 7. 28.
FTZ - level19 hint 이전에 환경변수로 푼 것과 동일하게 풀면 된다. 다만, 쉘코드를 삽입할 때 "setreuid(geteuid(), geteuid()) 까지 포함시킨 쉘 코드" 를 찾아서 넣어야 한다. 문제 풀이는 이전 것과 같으므로 생략하고.. 리눅스 Permission $ id 사용자 정보, uid, gid, 소속 그룹 확인 $ whoami 사용자 아이디 출력. current effective user id ruid - Real User ID - uid에 따른 읽기, 쓰기, 실행 권한을 설정함으로써 프로세스에 대해 소유자별로 권한을 줄 수 있으며 - 이 값은 변하지 않는다. euid - Effective User ID - setuid 권한이 설정된 실행 파일에 의해 변경된다. - 일시적으로 다른 계정의 uid를.. 2021. 7. 28.