본문 바로가기

전체 글345

LOB - darkelf 1. 환경 변수 안 됨 2. argv[1] 안 됨 3. 심볼릭 링크를 쓴다면 파일 이름 길이가 77이어야 함. 4. buffer에 쉘코드 안됨 strlen(argv[0])을 정확히 파악해보고 싶다. 이렇게 짜서 결과값을 확인해봤다. gcc -o test test.c 만약 ./test로 실행시켰다면, 결과는 6이 나왔다. 또한, mkdir tmp; cp test tmp/; ./tmp/test로 실행시켰다면, 결과는 10이 나왔다. 실행시킬 때 쓰이는 글자수(agrv[1] 제외하고) 인가보다! 그렇다면, 여기서 꼼수를 생각할 수 있다. strlen("./폴더/쉘코드") == 77 이어야 하는 거니까, ./(2) 폴더 /(1) 쉘코드(35) **** 여기서 쉘코드는 슬래시(0x2f) 없는 걸로 ☞ 구글링하면 .. 2021. 7. 31.
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.
ASLR 확인하기 자꾸 까먹어서 적어놓는다.. ASLR? 메모리에 대한 공격을 어렵게 하려고 스택, 힙, 라이브러리 주소를 프로그램 실행 때마다 바꾸는 방어기법. -> 이 기법을 우회할 수 있는 것이 ROP ASLR 걸려있는지 확인하는 방법 "정석" 는 cat /proc/sys/kernel/randomize_va_space 명령어로 파악할 수 있다. randomize_va_space=0 ☞ ASLR 해제되어있음 randomize_va_space=1 ☞ 랜덤 스택 & 라이브러리 활성화 randomize_va_space=2 ☞ 랜덤 스택 & 라이브러리 & 힙 활성화 [출처: https://lastcard.tistory.com/70]' "FTZ & LOB" 는 버전이 예전 것이라 그런지 위의 방법으로 알 수 없다. 여기서는 c.. 2021. 7. 30.
[풀이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.