20145223 杨梦云 《网络对抗》shellcode实验+return-to-libc实验

shellcode注入实践

Shellcode基础知识

·Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限

·Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,一般会和系统里的漏洞相关,因此shellcode只对没有打补丁的主机有用武之地。

·漏洞利用中最关键的是Shellcode的编写。由于漏洞发现者在漏洞发现之初并不会给出完整Shellcode,因此掌握Shellcode编写技术就显得尤为重要。

实践过程:

(一)实践中的shellcode代码如下:

(二)设置环境
为了防止注入,程序在编译时,编译器在每次函数调用前后都会加入一定的代码,用来设置和检测堆栈上设置的特定数字,以确认是否有bof攻击发生。同时GCC中的编译器有堆栈保护技术也会适使得注入到堆栈上的shellcode无法执行而达到保护的目的。因此要想实验成功进行,须对环境进行手工设置。(x32环境)

apt-cache search execstack
apt-get install execstack

execstack --help

/proc/sys/kernel/randomize_va_space=0  //关闭地址随机化
execstack -s pwn1    //设置堆栈可执行
execstack -q pwn1    //查询文件的堆栈是否可执行

(三)输入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构造攻击buf(最后一个字符不能是\x0a,因为相当于回车,这样接下来的实验就做不了)

(四)重新打开一个新的终端窗口注入这段攻击buf(但是输入指令回车后先不要回车,之前因为手贱不小心点了回车以至于做了好几次才成功= =。)

(cat input_shellcode;cat) | ./5223pwn1

(五)再打开第一个终端,查找进程5223pwn1的id号:

可以看见进程ID是3937,打开gdb进行调试,foo反汇编:

(六)在ret函数这里设置断点,查看注入buf的内存地址,分析之前猜测的返回地址位置是否正确以及shellcode的地址

最后可以看到应该将地址修改为0xffffd310

(七)将返回地址修改为重新注入,失败了,重复之前的步骤,查看进程id,进行gdb调试:

(八)重新注入,成功:

Retuen-to-libc实践

基础知识:

·缓冲区溢出攻击的原理使得我们在实施时通常首先要将恶意代码注入目标漏洞程序中,通常攻击者需要将此攻击代码置于堆栈中。于是为了阻止此种类型的攻击,缓冲区溢出防御机制采用了非执行堆栈技术,这种技术使得堆栈上的恶意代码不可执行。

·为了避开非执行堆栈技术,出现了 return-into-libc 攻击,这种攻击是缓冲区溢出的变体,它的实施不需要栈就可以执行,甚至不需要注入新的代码,取而代之的是重用漏洞程序中已有的函数完成攻击,让漏洞程序跳转到已有的代码序列。实施攻击时攻击者仍然可以用恶意代码的地址来覆盖程序函数调用的返回地址,并传递重新设定好的参数使其能够按攻击者的期望运行。

实践过程:

(一)首先在kali虚拟机上添加一个新的用户:

(二)环境需要32位,因此需要事先进行安装,安装好后进入32位环境,进入bash,关闭地址随机化,并且把/bin/sh指向zsh:

(三)漏洞程序代码如下,并且将c文件保存在/tmp目录下:

(四)编译代码,fno-stack-protector关闭阻止缓冲区溢出的栈保护机制,并设置给该程序的所有者以suid权限,可以像root用户一样操作:

(五)getenvaddr.c代码如下,该程序用于读取环境变量:

(六)exploit程序代码如下,通过修改该程序里的地址,结合5223retlib程序产生漏洞来实现攻击:

(七)获取 BIN_SH 地址为0xffffdf2a

(八)在root下编译运行程序:

(九)gdb调试exploit程序获取systemexit地址,分别为0xf7e338500xf7e276c0

(十)将上述获取到的三个地址对exploit程序进行修改:

(十一)成功:

转载于:https://www.cnblogs.com/20145223ymy/p/6649253.html

20145223 杨梦云 《网络对抗》shellcode实验+return-to-libc实验相关推荐

  1. php web 登陆验证和页面控制,# 2019-2020-2 20175308杨元 《网络对抗技术》Exp8 Web基础...

    2019-2020-2 20175308杨元 <网络对抗技术>Exp8 Web基础 实践目标及内容 实践内容 (1)Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTM ...

  2. 20145227鄢曼君《网络对抗》Web安全基础实践

    20145227鄢曼君<网络对抗>Web安全基础实践 实验后回答问题 1.SQL注入攻击原理,如何防御? SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是 ...

  3. 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验

    20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...

  4. 20145317《网络对抗》shellcode注入Return-to-libc攻击深入

    20145317<网络对抗>shellcode注入&Return-to-libc攻击深入 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻 ...

  5. 2017-2018-2 20155228 《网络对抗技术》 实验四:恶意代码分析

    2017-2018-2 20155228 <网络对抗技术> 实验四:恶意代码分析 1. 实践内容 1.1 系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部 ...

  6. 网络对抗技术—-网络对抗实验四

    学   号:201421430008   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术   ...

  7. 20145236《网络对抗》进阶实验——64位Ubuntu 17.10.1 ROP攻击

    20145236<网络对抗>进阶实验--64位Ubuntu 17.10.1 ROP攻击 基础知识 ROP攻击 ROP全称为Retrun-oriented Programmming(面向返回 ...

  8. 20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击

    20145203盖泽双<网络对抗技术>拓展:注入:shellcode及return-into-libc攻击 一.注入:shellcode 1.编写一段用于获取Shellcode的C语言代码 ...

  9. 网络对抗技术 实验五

    学号:201521430027 中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验五 综合渗透     学生姓名 ...

最新文章

  1. 系统集成资质培训 - 教学方式与效果研究
  2. k8s部署nginx集群
  3. 在IT的路上,我在成长
  4. 《数字孪生体技术白皮书》
  5. JAVA Linux 排查CPU 过高的方法
  6. 最短路计数(松弛操作处理)
  7. “他们”将变身为全国最大的房屋租赁供应商
  8. SQL 从入门到精通
  9. C++取地址符用在函数的形参的优势
  10. 布莱克曼哈尔窗matlab,基于matlab的布莱克曼窗函数法设计的低通滤波器
  11. UFS系列十:UFS电源管理
  12. ubuntu 串口调试助手
  13. 半监督分类算法简述,self-trainning,co-trainning
  14. 使用yagmail模块群发工资条
  15. Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5
  16. kernel .config优化
  17. 自己给自己找一份工作
  18. android aar编程,Android Studio模块化编程实践之aar
  19. 苹果手机调试(ios)
  20. python提取文件中特定字符串

热门文章

  1. sliverlight3 学习 2, 布局
  2. 业内指路共享软件:更多机会在移动和海外市场(三)
  3. 选择日期保存报错Invalid JSON input: Cannot deserialize value of type `java.util.Date` from String......
  4. Vue入门 ---- 组件式开发
  5. 怎么在oracle中使用for循环
  6. 不连续曲线 highcharts_什么是正则曲线和正则曲面
  7. java中System类、String Builder类简介
  8. springmvc通过@Value注解读取Properties配置文件的值,junit测试可以取到值,但是在业务中无法读取
  9. 支付结算之路由系统设计
  10. 除夕快乐 | 2月11日 星期四 | B站发文回应热搜风波;美团上线“团好货”独立App;国内首家自动驾驶企业获网约车运营许可...