本篇为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数据库是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'
。
网友评论