web安全-SQL注入

本篇为web安全第一篇,例子是掌控安全提供的供学员实践用的。

通过第一题,学习SQL注入,总结记录在此。

下面,对靶场进行SQL注入。

点击查看新闻后发现网址为http://117.41.229.122:8003/?id=1

1、首先判断该网址是否存在SQL注入漏洞。
在网址后拼接and 1=1,即结果为http://117.41.229.122:8003/?id=1 and 1=1。发现页面可以正常显示,则说明页面存在漏洞。

2、猜测注入点有多少个(就是表的字段数是多少)。
在网址后拼接order by 10,意思就是以第10个字段进行升序排序。默认的ASC可不写。DESC是降序。如果页面正常显示,则表明,所查的表中的字段数大于等于10。如果返回异常,则表明,所查的表中的字段数小于10,然后通过二分法,改变数字。通过多次测试,最终可找到一个最大的数字,使得页面返回正常。该靶场的注入点为2。

3、查数据库版本。
在网址后拼接and 1=2 union select 1,2,3...n-1, version()。其中n为注入点个数。前面的查询语句与上一个false查询出一个空表,然后在联合查询,由于第二步得到注入点为2,则查询语句为select 1,version()

4.查出数据库名。
在网址后拼接and 1=2 union select 1,database()。可查出当前正在使用的数据库的名称。该靶场的数据库名为maoshe

5.查出表名。
在网址后拼接and 1=2 union select 1,table_name from information_schema.tables where table_schema=database()
该靶场数据库中,第一张表则显示在页面上,为admin

information_schema.png

information_schema数据库是MySQL系统自带的数据库,它提供了数据库元数据的访问方式。感觉information_schema就像是MySQL实例的一个百科全书,记录了数据库当中大部分我们需要了结的信息,比如字符集,权限相关,数据库实体对象信息,外检约束,分区,压缩表,表信息,索引信息,参数,优化,锁和事物等等。通过information_schema我们可以窥透整个MySQL实例的运行情况,可以了结MySQL实例的基本信息,甚至优化调优,维护数据库等。

6、查询密码。
由于表名为admin,我们可以猜测有密码,字段一般为password。可尝试在网址后拼接and 1=2 union select 1,password from admin
即可拿到管理员密码。

问题:

  • 如果第五步中查出的第一张表不为admin,则这种方法就无法获得我们想要的表名。
  • 如果第六步我们猜测字段名错误,不为password则这种方法也无法获得密码。

附上查询字段名的语句。
and 1=2 union select column_name from information_schema.columns where table_name='table_name' and table_schema='db_name'

columns.png

你可能感兴趣的:(web安全-SQL注入)