1
在分析Metasploit的linux/x64/shell/reverse_tcp負載時,我意識到它使用值0x1007作爲mmap()系統調用的prot參數。mmap()系統調用的prot參數如何成爲0x1007?
mmap()手冊頁說,prot參數是PROT_NONE或一個或多個以下標誌的按位或:PROT_EXEC,PROT_READ,PROT_WRITE PROT_NONE。根據/usr/include/x86_64-linux-gnu/bits/mman.h文件,上述標誌分別具有值0x4,0x1,0x2和0x0。這怎麼能加起來到0x1007?
的系統調用的簽名是:
無效* MMAP(無效*地址,爲size_t長度,INT PROT,整數標記,INT FD,off_t偏移);
我指的是代碼的部分是:
global _start
section .text
_start:
xor rdi,rdi
push byte +0x9
pop rax
cdq
mov dh,0x10
mov rsi,rdx
xor r9,r9
push byte +0x22
pop r10
mov dl,0x7
loadall286
您提到的值包含三個位:內核可能只是忽略了其他位的值。 – gsg
該位對MMAP沒有任何意義,但是如果您查看代碼'cdq',則將_RDX_設置爲零。那麼'mov dh,0x10'將_DH_設置爲0x10,這使得_RDX_ = 0x1000(4096),當_RDX_被複制到_RSI_時,它被用作長度參數。它在國旗參數中設定的事實是沒有意義的。值7(最低3位)是內核知道的位,內核忽略它不關心的位。這不是我會這樣做的方式。 –
當我編譯並運行此代碼時,它返回_RAX_中的一個地址,這正是我所期望的(此評論是爲了響應已恢復的編輯) –