20144303石宇森《网络对抗》PC平台逆向破解

实验1:shellcode注入

实验基础

1、Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcodenop+shellcode+retaddr。我们采用anything+retaddr+nops+shellcode的方法。

2、实验的目标是找到返回地址的位置和shellcode的地址。然后通过修改返回地址使其自动执行shellcode

3、实验前通过命令:apt-get install exestack安装exestack

4、修改一些设置:

root@KaliYL:~# execstack -s pwn1//设置堆栈可执行
root@KaliYL:~# execstack -q pwn1//查询文件的堆栈是否可执行
X pwn1
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space
2
root@KaliYL:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space
0

实验步骤

1、先用cp复制一个新的pwn1文件

2、修改设置

3、构造一个shellcode作为输入

4、打开一个新的端口,用命令:(cat input_shellcode; cat) > ./20145221pwn1注入这段攻击并执行文件

5、开启另一个终端,输入ps -ef | grep ./20144303,查看进程的UID

6、进入gdb模式,然后输入attach UID与进程进行连接

7、输入命令disassemble foo对foo函数进行反汇编

8、在ret处设置一个断点

9、在端口下按回车执行一下程序,在gdb中输入c

10、查看此时寄存器esp中的值,这个地址就是函数的返回地址

11、输入quit退出gdb模式

12、重新构造shellcode,将01020304修改为shellcode的首地址0xffffd340

13、用xxd input_shellcode查看输入

14、再次执行程序,完成攻击

实验2:Return-to-libc攻击

实验步骤:

1、输入sudo apt-get update来更新软件源

2、使用命令sudo apt-get install lib32z1 libc6-dev-i386安装软件

3、进入linux32位环境,然后将地址随机化关闭

4、进入bin目录下,通过命令ln -s zsh sh将zsh指向sh

5、在tmp目录下,编译20144303retlib.c。retlib是一个漏洞程序,在fread函数中把40字节的badfile中的数据读取到了buffer里。但buffer只有12字节。所以会造成缓冲区溢出。

在编译retlib.c时,把这个程序设置为 SET-ROOT-UID 程序,程序的所有者就拥有了root权限

6、编译20144303getenvaddr.c。这个程序是用来读取环境变量的

7、编译20144303exploit.c。该程序用来进行攻击

8、用读取环境变量的函数20144303getenvaddr来获得BIN_SH的地址

9、在gdb中获取system和exit的地址分别为0xf7e2eb300xf7e227e0

10、修改攻击函数20144303exploit.c中的三个地址的值。然后将之前编译生成的文件和运行生成的badfile文件删掉。重新编译执行。

11、先执行程序20144303exploit,再执行20144303retlib。完成攻击,获得了root权限。

实验过程中遇到的问题:

1、在安装lib32readline-gplv2-dev时,出现了错误。但是对后面的实验没有什么影响....

2、第一遍做实验时,通过getenvaddr函数获取BIN_SH的地址时出现了错误。得到的BIN_SH的地址为0x8,所以最后实验失败。

后来重新检查了代码,发现漏洞程序retlib中出现了错误,修改后再次编译,查看BIN_SH的值就正确了。

感想反思

本次两个实验都是在关闭了地址随机化的前提下完成的,比较好奇假如不能关闭计算机的地址随机化,又该怎样进行攻击呢?另外,虽然完成了实验,得到了实验结果,但是对三个程序的代码还不是很理解。接下来会对这些东西进行研究。路漫漫求修远兮吾将上下而求索

20144303石宇森《网络对抗》注入shellcode和Return-to-libc攻击的更多相关文章

  1. 20144303石宇森《网络对抗》Web安全基础实践

    20144303石宇森<网络对抗>Web安全基础实践 实验后问题回答 SQL注入攻击原理,如何防御: SQL攻击时通过在输入框中输入语句,构造出SQL命令,把这段命令注入到表单中,让后台的 ...

  2. 20144303石宇森 《网络对抗》 WEB基础实践

    20144303石宇森 <网络对抗> WEB基础实践 实验后回答问题 一.什么是表单 表单是一个包含表单元素的区域.用form来定义. HTML是静态显示网页的,无法跟服务器进行交互,所以 ...

  3. 20144303石宇森《网络对抗》MSF基础应用

    20144303石宇森<网络对抗>MSF基础应用 实验后回答问题 一.解释什么是exploit,payload,encode: 我认为exploit就是一个简单的攻击指令,就是对配置所有设 ...

  4. 20144303石宇森《网络对抗》逆向及Bof基础

    20144303石宇森<网络对抗>逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回 ...

  5. 20144303石宇森 《Java程序设计》第2周学习总结

    ---恢复内容开始--- 20144303 <Java程序设计>第2周学习总结 教材学习内容总结 一.类型: 1.Java可以区分为基本类型和类类型.类类型也称作参考类型. 2.Java中 ...

  6. 20145215《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145215<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻 ...

  7. 20145227鄢曼君《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145227鄢曼君<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode注入实践 shellcode基础知识 Shellcode实际是一段 ...

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

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

  9. 20145208 蔡野《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145208 蔡野<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode的获取代码 我使用了许心远同学博客中的代码 ...

随机推荐

  1. SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)

    SQL Fundamentals || Oracle SQL语言 一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查 ...

  2. python数据结构之动态数组

    数组列表:动态数组(Array List) 简介: 最基础简单的数据结构.最大的优点就是支持随机访问(O(1)),但是增加和删除操作效率就低一些(平均时间复杂度O(n)) 动态数组也称数组列表,在py ...

  3. Spring Data 介绍 (一)

    简介 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷 Spring Data JPA能干什么 可以极大的 ...

  4. PL/SQL常用表达式及举例(二)

    使用LOOP循环 declare v_i number:=1; begin loop dbms_output.put_line('v_i='||v_i); exit when v_i>=3; v ...

  5. web window pixel等笔记

    原文:http://www.w3cplus.com/css/viewports.html 屏幕尺寸 Screen size =显示器尺寸 screen.width 和 screen.height.这两 ...

  6. CentOS安装Jdk并配置环境变量

    环境 CentOS7.2 (安装镜像CentOS-7-x86_64-DVD-1611) 目标 在CentOS7.2上安装jdk1.8(tar.gz安装包),并配置环境变量 jdk安装在/home/so ...

  7. 高并发秒杀系统方案(JSR303参数校验)

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  8. sql优化 表连接join方式

        sql优化核心 是数据库中 解析器+优化器的工作,我觉得主要有以下几个大方面:1>扫表的方法(索引非索引.主键非主键.书签查.索引下推)2>关联表的方法(三种),关键是内存如何利用 ...

  9. mysql 内置功能 存储过程介绍

    存储过程介绍 就是mysql内置功能把逻辑写好 的功能给封装好,封装成一个接口名,把接口名丢给应用程序,应用程序直接调用接口名实现一系列增删改查功能 这个接口叫存储过程 基于存储过程封装成一个功能 存 ...

  10. [py]django模板继承

    参考 1.展示arr,d等数据类型 2.逻辑for if / url获取 3.获取内置变量 django模板继承 通过搞一个base.html 这个base.html可以包含两类 block片断 其他 ...