see also: one-gadget RCE in Ubuntu 16.04 libc - うさぎ小屋

environment

a libc for Ubuntu 16.04 or Ubuntu 16.10, x86_64

$ md5sum /lib/x86_64-linux-gnu/libc.so.6
a3e78b9d154d9d0936d3a1fda1743479  /lib/x86_64-linux-gnu/libc.so.6

$ /lib/x86_64-linux-gnu/libc.so.6
GNU C Library (Ubuntu GLIBC 2.23-0ubuntu5) stable release version 2.23, by Roland McGrath et al.
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 5.4.0 20160609.
Available extensions:
	crypt add-on version 2.1 by Michael Glad and others
	GNU Libidn by Simon Josefsson
	Native POSIX Threads Library by Ulrich Drepper et al
	BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>.

gadgets

0x4526a

  • [rsp+0x30] = NULL
   4526a:	48 8b 05 47 dc 37 00 	mov    rax,QWORD PTR [rip+0x37dc47]        # 3c2eb8 <environ>
   45271:	48 8d 3d ff 6e 14 00 	lea    rdi,[rip+0x146eff]        # 18c177 "/bin/sh"
   45278:	48 8d 74 24 30       	lea    rsi,[rsp+0x30]
   4527d:	c7 05 19 02 38 00 00 	mov    DWORD PTR [rip+0x380219],0x0        # 3c54a0 <__abort_msg@@GLIBC_PRIVATE+0x8c0>
   45284:	00 00 00 
   45287:	c7 05 13 02 38 00 00 	mov    DWORD PTR [rip+0x380213],0x0        # 3c54a4 <__abort_msg@@GLIBC_PRIVATE+0x8c4>
   4528e:	00 00 00 
   45291:	48 8b 10             	mov    rdx,QWORD PTR [rax]
   45294:	e8 27 69 08 00       	call   cbbc0 <execve@@GLIBC_2.2.5>

0x6f5a6

  • r12 = NULL
   6f5a6:	48 8d 3d ca cb 11 00 	lea    rdi,[rip+0x11cbca]        # 18c177 "/bin/sh"
   6f5ad:	48 8d 15 c0 cb 11 00 	lea    rdx,[rip+0x11cbc0]        # 18c174 "-c"
   6f5b4:	48 8d 35 c1 cb 11 00 	lea    rsi,[rip+0x11cbc1]        # 18c17c "sh"
   6f5bb:	45 31 c0             	xor    r8d,r8d
   6f5be:	4c 89 e1             	mov    rcx,r12
   6f5c1:	31 c0                	xor    eax,eax
   6f5c3:	e8 a8 c8 05 00       	call   cbe70 <execl@@GLIBC_2.2.5>

0xcc543

  • r12 = NULL
  • rcx = NULL
   cc543:	48 8d 3d 2d fc 0b 00 	lea    rdi,[rip+0xbfc2d]        # 18c177 "/bin/sh"
   cc54a:	e9 81 fd ff ff       	jmp    cc2d0 <execvpe@@GLIBC_2.11+0x120>
   ...
   cc2d0:	4c 89 e2             	mov    rdx,r12
   cc2d3:	48 89 ce             	mov    rsi,rcx
   cc2d6:	e8 e5 f8 ff ff       	call   cbbc0 <execve@@GLIBC_2.2.5>

0xcc618

  • rax = NULL
  • r12 = NULL
   cc618:	48 8d 3d 58 fb 0b 00 	lea    rdi,[rip+0xbfb58]        # 18c177 "/bin/sh"
   cc61f:	48 89 c6             	mov    rsi,rax
   cc622:	e9 38 fe ff ff       	jmp    cc45f <execvpe@@GLIBC_2.11+0x2af>
   ...
   cc45f:	4c 89 e2             	mov    rdx,r12
   cc462:	e8 59 f7 ff ff       	call   cbbc0 <execve@@GLIBC_2.2.5>

0xef6c4

  • [rsp+0x50] = NULL
   ef6c4:	48 8b 05 ed 37 2d 00 	mov    rax,QWORD PTR [rip+0x2d37ed]        # 3c2eb8 <environ>
   ef6cb:	48 8d 74 24 50       	lea    rsi,[rsp+0x50]
   ef6d0:	48 8d 3d a0 ca 09 00 	lea    rdi,[rip+0x9caa0]        # 18c177  "/bin/sh"
   ef6d7:	48 8b 10             	mov    rdx,QWORD PTR [rax]
   ef6da:	e8 e1 c4 fd ff       	call   cbbc0 <execve@@GLIBC_2.2.5>

0xf0567

  • [rsp+0x70] = NULL
   f0567:	48 8b 05 4a 29 2d 00 	mov    rax,QWORD PTR [rip+0x2d294a]        # 3c2eb8 <environ>
   f056e:	48 8d 74 24 70       	lea    rsi,[rsp+0x70]
   f0573:	48 8d 3d fd bb 09 00 	lea    rdi,[rip+0x9bbfd]        # 18c177  "/bin/sh"
   f057a:	48 8b 10             	mov    rdx,QWORD PTR [rax]
   f057d:	e8 3e b6 fd ff       	call   cbbc0 <execve@@GLIBC_2.2.5>

0xf5b10

  • [rbp-0xf8] = NULL
  • rcx = NULL
   f5b10:	48 8d 3d 60 66 09 00 	lea    rdi,[rip+0x96660]        # 18c177  "/bin/sh"
   f5b17:	eb bc                	jmp    f5ad5 <posix_spawnp@@GLIBC_2.15+0x725>
   ...
   f5ad5:	48 8b 95 08 ff ff ff 	mov    rdx,QWORD PTR [rbp-0xf8]
   f5adc:	48 89 ce             	mov    rsi,rcx
   f5adf:	e8 dc 60 fd ff       	call   cbbc0 <execve@@GLIBC_2.2.5>