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函数会简单回显任 ...
随机推荐
- Redis:Sentinel哨兵
简介 Sentinel的作用就是主从切换:Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,R ...
- 用xshell 连接docker Linux服务器
用xshell 连接docker Linux服务器
- Linux 服务器配置网站以及绑定域名
Linux 服务器如何配置网站以及绑定域名 转载来源:http://www.xinnet.com/service/cjwt/idc/guanli/1424.html 以下列举一些 主机上常见的 Web ...
- InstallShield2015创建安装包
1.新建 InstallScript MSI Project工程 a)输入项目名称Project Name: XBS(例如) b)输入创建目录Location: C:\(例如) c)如果勾选“ ...
- HDU 2842 Chinese Rings(常数矩阵)
Chinese Rings 转载自:点这里 [题目链接]Chinese Rings [题目类型]常数矩阵 &题意: 一种中国环,解开第k个环需要先解开全部的前(k-2)个环,并留有第(k-1) ...
- 十二 总结JS原型
基本概念: 对象:属性和方法的集合(变量和函数的封装). 构造器函数:用于创建对象的函数,通过new关键字生成对象.函数名一般首字母大写的. 原型对象:每个函数都有一个prototype属性,它是一个 ...
- linux设置时间显示格式和系统版本
[修改显示日期格式] vim /etc/bashrc alias ll='ls -l --time-style="+%Y-%m-%d %H:%M:%S"' alias date=' ...
- scu 4439 Vertex Cover
题意: 给出n个点,m条边,将若干个点染色,使得每个边至少有一点染色,问至少染多少个点. 思路: 如果是二分图,那就是最小点覆盖,但是这是一般图. 一般图的最小覆盖是npc问题,但是这题有一个条件比较 ...
- arc 092D Two Sequences
题意: 给出两个长度N相同的整数序列A和B,有N^2种方式从A中选择一个数Ai,从B中选择一个数Bj,让两个数相加,求这N^2个数的XOR,即异或. 思路: 暴力的求显然是会超时的,因为是异或,就考虑 ...
- 变量为空代表false
name = ''#名字为空即代表False while not name:#not name=False即 真,将执行循环体 print('Enter your name:') name = inp ...