课程分类:
web安全应用
实验等级:
中级
任务场景:
【任务场景】
小王接到磐石公司的邀请,对该公司旗下的网站进行安全检测,经过一番检查发现该论坛的后台登录页面上可能存在万能密码漏洞,导致不知道账号密码也能登录后台,造成用户的隐私信息的泄露、网页被篡改、网页被挂马、服务器被远程控制,服务器被安装后门等风险。为了让公司管理人员更好的理解并修补漏洞,小王用DVWA情景再现。
任务分析:
【任务分析】
登录是先通过表单获取到值,再对应到数据库里去查询,如果有对应的值则登录成功,如果没有则登录失败。但是如果Web管理员在设计上没有对一些关键字进行过滤的话,就会导致'且'运算或者'或'运算带入到数据库里查询,那么当php语言执行为真的时候,就会绕过验证程序直接进入后台。
预备知识:
【预备知识】
And逻辑运算结果:真-真=真、假-真=假、真-假=假、假-假=假
Or逻辑运算结果:真-真=假、假-真=真、真-假=真、假-假=假
任务实施:
E053-web安全应用-Brute force暴力破解初级
任务环境说明:
服务器场景:p9_kali-2(用户名:root;密码:toor)
服务器场景操作系统:Kali Linux 192.168.32.123
服务器场景:p9_ws03-3(用户名:administrator;密码:123456)
服务器场景操作系统:Microsoft Windows2003 Server 192.168.32.190
网络结构

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
实战复现:
打开火狐浏览器,在地址栏输入靶机的地址访问网页,使用默认用户名admin密码password登录:

在DVWA页面点击"DVWA Security" 选择难易程度为"Low" ,然后点击"Submit" 提交:

在导航栏点击Brute Force进入登陆框页面:

查看登录框的源代码:
select * from user where username='username' and password ='password'
可以看到Username登录点的参数会传输到$username
Password登录点的参数会传输到$password

那么我们可以构造一个简单的Payload语句进行注入,在账号里输入:admin' and 1=1 #,密码为空:

显示登录成功:

登录成功了,为什么不需要输入密码就能登录?
把Payload语句放到这段代码分析
$sql = select * from user where username|'and password='$password';
在账号地方输入admin' and 1=1 #后SQL语句变成
$sql = select * from user where username='admin' and 1=1 #|' and password='$password';
输入admin'使用单引号闭合让admin成一个字符串,后面跟一个逻辑运算把admin判断为真,再用一个"#"号注释掉后面的代码,也就是接收密码的那一段代码,就达到万能密码绕过程序验证的效果了。
那么根据运算符,再测试几组
And逻辑运算符,真-假=假
admin' and 1=2#

And逻辑运算符,假-真=假
admin' and 2=1#

Or逻辑运算符,真-假=真
admin' or 1=2 #

Or逻辑运算,假-真=假
admin' or 2=1 #

实验结束,关闭虚拟机。