博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
逆向与BOF基础——注入shellcode并执行&Return-to-libc
阅读量:5297 次
发布时间:2019-06-14

本文共 1022 字,大约阅读时间需要 3 分钟。

逆向与BOF基础——注入shellcode并执行

准备阶段

  • 下载安装execstack.

    885278-20170310180247217-1937249164.png

  • 本次实验实验的shellcode是心远的文章中生成的代码,即\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\
  • 为减少实验难度,设置堆栈可执行,并关闭地址随机化。

    885278-20170310180107248-680329537.png

实验过程

1.构造注入的payload,格式为nop(即\x90)+shellcode+返回地址。

885278-20170310180333951-1407078391.png

885278-20170310180430717-174272343.png

2.gdb调试该段代码,判断返回地址应在哪里。

885278-20170310180440139-406466492.png

885278-20170310180449514-155308478.png

885278-20170310180516951-56271656.png

3.跳坑,进去体验一下。

885278-20170310180534857-1843168512.png

885278-20170312221653873-1900427619.png

885278-20170312221811639-473392143.png

885278-20170312221826248-1808464439.png

4.重新开始时,使用了另一种构造注入payload的方法,anything+retaddr+nops+shellcode,只要返回地址在该范围内,最终都会滑行到shellcode上。

885278-20170310180639514-1473682909.png

885278-20170310180708498-513108725.png

5.成功。

885278-20170310180738904-559683504.png

Return-to-libc

准备工作

  • 执行安装可用于编译32位程序的东西的命令。
sudo apt-get updatesudo apt-get install lib32z1 libc6-dev-i386sudo apt-get install lib32readline-gplv2-dev
  • 进入32位Linux环境,使用bash。
    885278-20170329223737795-1548162518.png

攻击漏洞程序并获得root权限

  • 关闭堆和栈初始地址的随机化。
  • 用zsh代替/bin/bash

    885278-20170329223859529-1900763430.png

  • 编写漏洞程序,保存在/tmp目录下

    885278-20170329224021295-273192457.png

  • 编译该程序,使用“栈不可执行”,设置SET-UID

    885278-20170329224056936-79545316.png

  • 编写读取环境变量的程序并编译

    885278-20170329224448076-365211196.png

885278-20170329224534811-847155789.png

  • 编写攻击程序,将其放在/tmp下

    885278-20170329224827092-885281275.png

  • 使用获取环境变量的程序取得BIN_SH 的地址

    885278-20170329224641233-1100777861.png

  • 使用GDB获取system和exit的地址

    885278-20170329224947623-1721956280.png

  • 修改攻击程序,将取得的地址填入相应的位置,重新编译。

    885278-20170329225702154-645960320.png

  • 运行攻击程序和漏洞程序,获得root权限。

    885278-20170329225718498-557247496.png

将/bin/sh 重新指向/bin/bash(或/bin/dash)

  • 指向/bin/bash

    885278-20170329225730186-1472937620.png

  • 指向/bin/dash

    885278-20170329225739420-25506517.png

与缓冲区溢出漏洞实验的异同

  • 相同之处:利用漏洞来获得对被攻击者的权限,都需关闭地址随机化。
  • 不同之处:缓冲区溢出需用shellcode的地址来覆盖程序的返回地址,使漏洞程序去执行栈中的shellcode;而return-to-libc是漏洞程序调转已编好的代码实现攻击。

转载于:https://www.cnblogs.com/LLLLLLQL/p/6531998.html

你可能感兴趣的文章
mongodb 简单使用说明
查看>>
eclipse的调试方法的简单介绍
查看>>
OneAPM 云监控部署与试用体验
查看>>
加固linux
查看>>
wget 升级
查看>>
为什么需要大数据安全分析?
查看>>
day13.字典复习
查看>>
IPSP问题
查看>>
(转)Java中的String为什么是不可变的? -- String源码分析
查看>>
HNU 10362 A+B for Input-Output Practice (II)
查看>>
iOS——UIButton响应传参数
查看>>
【转帖】关于'eh vector constructor/destructor iterator'的讨论及类的内存分布模型
查看>>
十. 图形界面(GUI)设计9.列表和组合框
查看>>
10.17动手动脑
查看>>
操作系统实验一:并发程序设计
查看>>
互联网协议入门(一)
查看>>
Air Max 1 Men's Shoe Black/Team Red [NIKE-NO.12030]
查看>>
16_Python变量作用域_Python编程之路
查看>>
js 数组,字符串,json互相转换(在select实现多个输入的时候与后台交互常使用)...
查看>>
js index of()用法
查看>>