20145311 王亦徐《网络对抗技术》 逆向及BOF进阶实践
20145311《网络对抗技术》逆向及BOF进阶实践
学习目的
- shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode 的地址。
- Return-to-libc 攻击实验:即使栈有不可执行的能力,无法将shellcode放入堆栈中运行,但我们却可以直接让漏洞程序调转到现存的代码来实现我们的攻击。(本次实验所用的是已经载入内存的 libc 库中的 system()函数等)
基础知识
- ps 命令:用于查看进程号,结合参数管道
- (gdb) disassemble foo: 反汇编一段内存地址
- (gdb) x/16x : 使用x命令(examine的简写)来查看内存地址中的值。
- x命令的语法:x/<n/f/u>
实践过程
shellcode的注入
最开始需要设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上可以执行

关闭地址随机化,避免每次执行分配的内存地址不同

采取anything+retaddr++nopshellcode来构造payload

找到进程号进行gbb调试

先不要回车,等待后面的调试

在ret处设置断点,接着运行到断点处,显示当前esp的值并依照此位置显示接下来的内存地址内容,并由此分析出返回地址位置的正确性以及shellcode的地址

将作为输入的 input_shellcode 处的 “\x1\x2\x3\x4” 换为上面所找到的 shellcode 地址 “\x30\xd3\xff\xff”

修改完之后在运行,程序的返回地址就已经被修改成了shellcode的地址,从而执行shellcode获得主机的权限

Return-to-libc 攻击实验
进入linux32的环境,将地址随机化关闭,同时使用ln命令,让 /bin/sh 指向另一个shell程序(这里是zsh)(因为原 /bin/bash 有保护措施,即使能调用一个shell,也不能在这个shell中保持root权限)
编写retlib文件并进行编译


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


编写攻击代码


读取环境变量

调试攻击程序得到system与exit的地址


将攻击程序中的buf换为获得的3个地址
重新编译攻击程序会生成badfile文件,再次运行漏洞程序retlib,可见攻击成功
再次执行便能够成功获取到主机的shell
实验体会
这次实验主要是在开启了堆栈可执行、关闭了地址随机化的条件下去完成的,可见在实际环境中进行攻击时会遇到更多更麻烦的情况在注入shellcode的时候还是遇到一些困难,尤其是如何构造payload,一开始采用的构造方式怎么尝试也没能成功,后来改成了anything+retaddr+nops+shellcode之后顺利成功了,说明自己在理解堆栈这一块还是有点问题,关于bof攻击如何正确将自己的攻击代码覆盖到缓冲区从而执行是非常关键的
20145311 王亦徐《网络对抗技术》 逆向及BOF进阶实践的更多相关文章
- 20145216史婧瑶《网络对抗》逆向及Bof进阶实践
20145216史婧瑶<网络对抗>逆向及Bof进阶实践 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢 ...
- #20145238荆玉茗《网络对抗》-逆向及Bof进阶实践
20145238荆玉茗<网络对抗>-逆向及Bof进阶实践 实践目的:注入shellcode 准备一段shellcode代码 Shellcode实际是一段代码(也可以是填充数据),是用来发送 ...
- 《网络对抗》 逆向及Bof进阶实践
<网络对抗> 逆向及Bof进阶实践 实践目标 注入一个自己制作的shellcode并运行这段shellcode: 实践步骤 准备工作 root@5224:~# apt-get instal ...
- 20145304 网络对抗技术 逆向与Bof基础
20145304 网络对抗技术 逆向与Bof基础 实践目标 学习以下两种方法,运行正常情况下不会被运行的代码: 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的 ...
- 20145317 网络对抗技术 逆向与Bof基础
20145317 网络对抗技术 逆向与Bof基础 实践要求 1. 掌握NOP,JNE,JE,JMP,CMP汇编指令的机器码 2. 掌握反汇编与十六进制编程器 3. 能正确修改机器指令改变程序执行流程 ...
- 20145312《网络对抗》 逆向及Bof基础实践
20145312 <网络对抗> 逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...
- 20145308 《网络对抗》 逆向及BOF基础实践 学习总结
20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...
- 20145206邹京儒《网络对抗》逆向及Bof基础实践
20145206邹京儒<网络对抗>逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:ma ...
- 20145216《网络对抗》逆向及BOF基础实践
20145216<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函 ...
- 20145327 《网络对抗》逆向及BOF基础实践
20145327 <网络对抗>逆向及BOF基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
随机推荐
- cocos2dx 3.x(加载网络自定义头像)
// // Connection.h // XXDemo // // Created by LeeHonGee on 14-9-4. // // #ifndef __XXDemo__Connec ...
- Response.Redirect & window.location.href
对接中信的微信H5支付时,对方(其实是微信)需要对我们的域名进行授权,即,我方需向渠道报备支付域名,微信只认可由此域名发起的支付交易. 支付中心只提供了一套支付接口供下游系统访问.因为给渠道报备的域名 ...
- linux telnet命令
telnet命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户 ...
- 源码解读 Laravel PHP artisan config:cache
来源 https://laravel-china.org/articles/5101/source-code-reading-laravel-php-artisan-configcache 源码在哪 ...
- java基础练习2
1, 写一段代码, 可以取出任意qq邮箱地址中的qq号码 public class Test { public static void main(String[] args) { String str ...
- Widget Factory (高斯消元解线性方程组)
The widget factory produces several different kinds of widgets. Each widget is carefully built by a ...
- codeforces 980E The Number Games
题意: 给出一棵树,要求去掉k个点,使得剩下的还是一棵树,并且要求Σ(2^i)最大,i是剩下的节点的编号. 思路: 要使得剩下的点的2的幂的和最大,那么肯定要保住大的点,这是贪心. 考虑去掉哪些点的话 ...
- 转:获得数据库自增长ID(ACCESS)与(SQLSERVER)
转载自:http://www.cnblogs.com/chinahnzl/articles/968649.html 问题CSDN 里面不时有初学者疑惑:如何获取自增长列(标识列)的ID,并写入另一张表 ...
- Anaconda下载及安装及查看安装的Python库用法
Anaconda下载及安装及查看安装的Python库用法 Anaconda 是一个用于科学计算的 Python 发行版,提供了包管理与环境管理的功能.Anaconda 利用 conda 来进行 pac ...
- inux 驱动程序开发中输入子系统总共能产生哪些事件类型(EV_KEY,EV_ABS,EV_REL)
inux 驱动程序开发中, 输入子系统总共能产生哪些事件类型?,以及分别是什么意思?详见如下: Linux中输入设备的事件类型有EV_SYN 0x00 同步事件EV_KEY 0x01 按键事件,如KE ...