Java pwn_8月9日pwn学习

ldd

要看一个一个程序依赖的so文件可以用ldd命令,ldd命令后面必须跟上这个程序的绝对命令,一般先用which找到这个程序的绝对路径

然后再用ldd命令查看。

ldd结果分为三列

第一列:程序依赖库的名字

第二列:系统提供库的名字

第三列:库加载的开始地址

而在pwn中可以多次用ldd命令查看,来判断该程序是否提供了ASLR保护

fbb0d29adf8043db9dba2cbd14b1b3da.png

如图所示

gdb插件peda

在安装插件之前是需要安装gdb的,gdb的安装教程,没有找到国内的源镜像地址,所以很慢

这是一个调试时必不可少的神器,先从github复制到自己的码云仓库再下载。

1.git clone https://gitee.com/sanmuforrest/peda.git ~/peda

2.echo "source ~/peda/peda.py">>~/.gdbinit

题目:int_overflow

题目描述:菜鸡感觉这题无法溢出,真的么?

题目分析:

1.checksec

129068f26095de6453a202363a90160a.png

2.file查看文件

0007cca850fc998fca3c5b706d5fb843.png

3.ida分析文件

首先查看程序各层级内容

f3ba79fd93513f1e12d8f3636314850c.png

36e34b12af31e2805e5124a654f2ec63.png

bd6291cf5e82c8ba8495b124afe83668.png

在搜寻的时候我们发现了这个函数what is this(),发现其中包含flag

6872591b5825fadc53a1bc0ea6e1b20b.png

ee9f763e22f59d0f098ed98ccd2f1691.png

这里写两个c语言库函数

read():ssize_t read(int fd,void*buf,size_t count)fd为文件描述符,通常为0,每次读出count字节数到缓冲区buf中

write():ssize_t write(int fd,void*buf,size_t count)fad为文件描述符,通常为1,每次写入count字节,需要写入的数据为buf。

strcpy():char *strcpy(char *dest, const char *src) 把src指向的字符串复制到dest中。

可现在的问题是如何调出这个函数,整个函数看起来好像都没有一个合适的注入点。在查看了函数的各层级函数后,发现只有login()里的check_passwd()中的strcpy函数适合作为溢出点,这里将输入的密码s复制到dest中,而s的长度为0x200,dest还有0x14到栈底,满足溢出条件。也就是说为了满足栈溢出(上个随笔),输入的密码s的长度至少为0x14,加上要覆盖栈底的要调用另一个函数的ebp指针0x04,再加上我们需要的函数地址0x04作为返回地址。但这个时候长度是超出if条件距离要求的长度在0x3和0x8之间,但是我们再看在定义passwr_length的时候

079833c085adf06cacd25257873da71a.png

用的是_int8类型的变量,而这个变量最多存储256大小的数字,如果这个数字为257,那么其大小就变为1,称为整数溢出。也就是说我们输入passwd的长度在区间256+4~256+8为好,那么这个时候我们的passwd还需要260-(0x18+0x04)——264-(0x18+0x04)长度。

利用上面这些,就可以写我们的payload了,我们取还需要260-(0x18+0x04)长度的passwd。payload=‘a’*(0x14+0x04)+p32(hanshuadd)+'a'*(256+0x4-0x18-0x04)

4.写exp

58fe55f6952c00de11b1cc317d3f1e1f.png

5.得到结果

80ce1b52c6f846c37e94663c7cf55bf7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值