20145329 《网络对抗技术》PC平台逆向破解

shellcode注入

实践是在非常简单的一个预设条件下完成的:

(1)关闭堆栈保护

(2)关闭堆栈执行保护

(3)关闭地址随机化

(4)在x32环境下

(5)在Linux实践环境

shellcode概念:

shellcode是一段用来获取交互式shell的机器指令

  • 设置堆栈可执行并关闭地址随机化
    886473-20170330220504649-509050370.jpg
  • 构造要注入的shellcode
    'print "\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x4\x3\x2\x1\x00"' > input_shellcode

\x4\x3\x2\x1为大致估计的数据溢出并将覆盖到堆栈上的返回地址的位置,此处用\x4\x3\x2\x1做标识后面可以据此方便找到并它改为这段shellcode的地址。

  • 打开一个终端注入这段shellcode,此处执行时限不按下回车,等后面调试时再按运行
    886473-20170330221304961-718776415.jpg

  • 打开另一终端,ps -ef | grep pwn1:将上一步骤中运行的进程信息显示出来
    886473-20170330221705320-665856611.png

  • 使用GDB调试进程,用foo函数进行反汇编,查看汇编代码,找到ret
    886473-20170330221833055-506068859.png

  • 设置断点,继续执行,在另一终端按下回车
    886473-20170330222207461-88515467.png

  • 查看ESP寄存器的情况
    886473-20170330222420586-1171918296.png
    (从图中可以看出esp的值为0x01020304,是我们构造的shellcode中的一部分,此位置即是执行完foo函数后的返回地址,后面是我们注入的shellcode代码,我们需修改0x01020304的值使它指向shellcode的首地址,shellcode地址为紧挨着的地址0xffffd330)

  • 接着执行gdb,发生溢出
    886473-20170330223233727-1012736852.png

  • 根据上面调试得出的shellcode地址,重新注入shellcode,成功
    886473-20170330223412227-2142817240.png

体会

指导里面设置了一个坑,让我在实验过程中思考了更多,看指导书,让后阅读别人的博客,最后自己对整个过程的目的、过程、以及为什么掌握了以后,实验就变成了一个结果的学习结果的呈现而不再是学习的过程。

Return-to-lib攻击深入

介绍

return-to-libc 攻击是一种缓冲区溢出的变体攻击。它不需要一个栈可以执行,甚至不需要一个 shellcode。而是我们让漏洞程序调转到现存的代码(如库函数)来实现攻击。

  • 进入32位linux环境,将地址随机化关闭,并且把/bin/sh指向zsh:解除/bin/bash通过使shell程序放弃自己的root权限来防范缓冲区溢出攻击及其他利用shell程序的攻击的防护措施。
    886473-20170330224545867-515425064.jpg

  • 编辑漏洞程序“20145329retlib.c”文件,保存在/tmp 目录下
    886473-20170330224707820-792567607.jpg

  • 编译“20145329retlib.c”文件,编译时使用–fno-stack-protector 关闭gcc编译器中阻止缓冲区溢出的保护机制。并chmod设置 SET-UID。
    886473-20170330225159774-1477007627.jpg

  • 编辑读取环境变量的程序“20145329getenvaddr.c”文件
    886473-20170330225736945-194982393.jpg

  • 编译
    886473-20170330225848305-1623615627.jpg

  • 编辑攻击程序“20145329exploit.c”文件,保存到/tmp目录下,0x11111111、0x22222222、0x33333333分别是BIN_SH、system、exit的地址,下面具体执行指令获得实际地址
    886473-20170330225925414-1525304662.jpg

  • getenvaddr 程序获得 BIN_SH 地址(0xffffde21)
    886473-20170330230020383-84824320.jpg

  • gdb获得system(0xf7e33850)和exit(0xf7e276c0)地址
    886473-20170330231314305-291173387.jpg

  • 修改攻击程序代码里面的BIN_SH、system、exit的地址,修改为上一步中获得的内存地址
    886473-20170330231346680-893512487.jpg

  • 删除刚才编译的 20145329exploit 程序和 badfile 文件,重新编译修改后的 20145329exploit.c
    886473-20170330231417774-1132272691.jpg

  • 运行攻击程序,生成badfile文件,再运行漏洞程序,获得root权限,攻击成功
    886473-20170330231459336-1281072003.jpg
    886473-20170330231519195-1790288533.jpg

  • bin文件夹下删除sh,并将/bin/sh 重新指向/bin/bash,运行攻击程序和漏洞程序,攻击成功,获得 root 权限
    886473-20170330231204774-1115928088.jpg

转载于:https://www.cnblogs.com/jdy1453/p/6648906.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值