#20145336张子扬 《网络对抗技术》 PC平台逆向破解
##Shellcode注入
**基础知识**

Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址。

**实践过程**

1. 设置环境为:堆栈可执行、地址随机化关闭。指令如下。
2. 用`execstack -s pwn20145336`命令来将堆栈设为可执行状态
3. 用`execstack -q pwn20145336`命令来查看文件的堆栈是否是可执行状态
4. 用`more /proc/sys/kernel/randomize_va_space`命令来查看地址随机化的状态
5. 用`echo "0" > /proc/sys/kernel/randomize_va_space`命令来关闭地址随机化
6. 以anything+retaddr+nops+shellcode的结构来构造,先估计返回地址所在位置,并且找到 shellcode 所在地址。
7. 运行pwn20145336可执行文件。
8. 打开另一个终端,用`ps -ef | grep pwn20145336`查看pwn20145336的进程号,随后在该终端下进入gdb调试模式。
9. 由上图知,pwn20145336的进程号为14831
10. gdb调试:打开gdb,用attach指令对该进程进行调试,对foo函数进行反汇编并在ret处设置断点。
11. 继续运行到断点处,显示当前esp的值并依照此位置显示接下来的内存地址内容,来分析我们之前猜测的返回地址位置是否正确以及shellcode的地址。(推算出 shellcode 地址为`\x31\xd3\xff\xff`)
12. 将返回地址修改为`0xffffd331`,执行pwn20145336,成功注入 shellcode。

##Return-to-libc攻击深入
**实践过程**

1. 先配置环境。输入如下指令,创建32位C语言可编译的环境。

sudo apt-get update
        sudo apt-get install lib32z1 libc6-dev-i386

2. 输入命令“linux32”进入 32 位 linux 环境。输入“/bin/bash”使用 bash。
3. 用以下指令关闭地址随机化

sudo sysctl -w kernel.randomize_va_space=0

4. 为了不让/bin/bash的防护程序起作用(为了防止shell攻击,程序被调用时会自动弃权),我们使用zsh来代替:

sudo su
        cd /bin
        rm sh
        ln -s zsh sh
        exit
5. 在tmp文件夹下创建“retlib.c”文件,并编译设置SET-UID
 
 
        #include <stdlib.h>
        #include <stdio.h>
        #include <string.h>
        int bof(FILE *badfile)
        {
        char buffer[12];
        fread(buffer, sizeof(char), 40, badfile);
        return 1;
        }
        int main(int argc, char **argv)
        {
        FILE *badfile;
        badfile = fopen("badfile", "r");
        bof(badfile);
        printf("Returned Properly\n");
        fclose(badfile);
        return 1;
        }

6. GCC 编译器有一种栈保护机制来阻止缓冲区溢出,所以我们在编译代码时需要用 “–fno-stack-protector” 关闭这种机制。

sudo su
         gcc -m32 -g -z noexecstack -fno-stack-protector -o retlib retlib.c
         chmod u+s retlib
         exit

7. .在tmp文件夹下准备“getenvaddr.c”文件用于读取环境变量,并编译。
8. gcc -m32 -o getenvaddr getenvaddr.c。
9. 在tmp文件夹下准备“exploit.c”文件用于攻击。
10. 获取地址

获取BIN_SH地址

export BIN_SH=“/bin/sh”
        echo $BIN_SH
        ./getenvaddr BIN_SH ./retlib

进入gdb设置断点,调试运行获取system和exit的地址。

11. 修改 exploit.c 文件。
12. 删除刚才调试编译的 exploit 程序和 badfile 文件,重新编译修改后的 exploit.c,然后先运行攻击程序 exploit,再运行漏洞程序 retlib,可见攻击成功,获得了 root 权限。

20145336张子扬 《网络对抗技术》 PC平台逆向破解的更多相关文章

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

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

  2. 2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解

    2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解 目录 一.逆向及Bof基础实践说明 二.直接修改程序机器指令,改变程序执行流程 三.通过构造输入参数,造成BOF攻击,改变程 ...

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

    20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...

  4. 20155305《网络对抗》PC平台逆向破解(二)

    20155305<网络对抗>PC平台逆向破解(二) shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 ...

  5. 20155311《网络对抗》PC平台逆向破解(二)

    20155311<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...

  6. 20145221《网络对抗》PC平台逆向破解

    20145221<网络对抗>PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户 ...

  7. 20155307《网络对抗》PC平台逆向破解(二)

    20155307<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...

  8. 20145201李子璇《网络对抗》PC平台逆向破解

    20145201<网络对抗>PC平台逆向破解 准备阶段 下载安装execstack. 获取shellcode的c语言代码 设置堆栈可执行 将环境设置为:堆栈可执行.地址随机化关闭(2开启, ...

  9. 20145219《网络对抗》PC平台逆向破解

    20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ...

  10. 20145240《网络对抗》PC平台逆向破解_advanced

    PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...

随机推荐

  1. HDU 3091 - Necklace - [状压DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3091 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  2. Indexes (also called “keys” in MySQL)

    High Performance MySQL, Third Edition by Baron Schwartz, Peter Zaitsev, and Vadim Tkachenko   Is an ...

  3. HashMap 的工作原理及代码实现,什么时候用到红黑树

    HashMap工作原理及什么时候用到的红黑树: 在jdk 1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即has ...

  4. 分块学习笔记qwq

    我没想到居然就学到分块了...哇我还一直觉得分块听起来挺牛逼的一直想学的来着qwq(其实之前好像vjudge上有道题是用分块做的?等下放链接qwq 所以想着就写个学习笔记趴qwq 首先知道分块的时间复 ...

  5. sql server 基本问题解决思路

    1.数据库故障排查步骤,如何处理紧急数据库问题;首先根据报错信息找到故障原因.然后实施对应的解决方案.2.SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题:可以建立一个Pe ...

  6. Rufus 制作 USB 启动盘简单教程

    制作 Windows 10 启动盘 U盘 / USB 安装盘图文教程  http://rufus.akeo.ie/downloads/rufus-2.2p.exe 1.将U盘连接到电脑,以管理员身份运 ...

  7. [GDAL]写入shp

    C#通过Wkt码构建shp,记录写不进去! static void WriteVectorFile() { string strVectorFile = "E:\\"; // 注册 ...

  8. vertx连接mysql数据库

    1:创建一个verticle组件 package jdbcConnection; import io.vertx.core.AbstractVerticle; import io.vertx.core ...

  9. 去掉IntelliJ IDEA 中 mybatis 对应的 xml 文件警告

    https://blog.csdn.net/aubdiy/article/details/68485336 IntelliJ IDEA 打开 mybatis 的 xml 文件时,对应的 xml 文件中 ...

  10. 使用Python2.7 POST 数据到 onenet 平台

    功能 发送数据名称为SENSORID(这里用TEST测试),数值为VALUE(这里用49值做测试)的数据,发送到自己的onenet对应设备 效果发送成功 代码 # -*- coding: utf-8 ...