玖叶教程网

前端编程开发入门

数字型注入和UNION注入2

“limit 1,1”是一个条件限定,作用是取查询结果第1条记录后的1条记录。又如,指定id=-1或者一个很大的值,使得图9中的第一行记录无法被查询到(见图12),这样结果就只有一行记录了(见图13)。



通常采用图13所示的方法,访问http://192.168.20.133/sql1.php?id=-1 union select user,pwd from wp_user,结果见图14,通过数字型注入,成功地获得了用户表的账号和密码。

通常把使用UNION语句将数据展示到页面上的注入办法称为UNION(联合查询)注入。

刚才的例子是因为我们已经知道了数据库结构,那么在测试情况下,如何知道数据表的字段名pwd和表名wp_user呢?

MySQL 5.0版本后,默认自带一个数据库information_schema,MySQL的所有数据库名、表名、字段名都可以从中查询到。虽然引入这个库是为了方便数据库信息的查询,但客观上大大方便了SQL注入的利用。

下面开始注入实战。假设我们不知道数据库的相关信息,先通过id=3-1和id=2的回显页面一致(即图7与图8的内容一致)判断这里存在一个数字型注入,然后通过联合查询,查到本数据库的其他所有表名。访问http://192.168.20.133/sql1.php?id=-1 union select 1,group_concat(table_name)from information_schema.tables where table_schema=database(),结果见图15。

table_name字段是information_schema库的tables表的表名字段。表中还有数据库名字段table_schema。而database()函数返回的内容是当前数据库的名称,group_concat是用“,”联合多行记录的函数。也就是说,该语句可以联合查询当前库的所有(事实上有一定的长度限制)表名并显示在一个字段中。而图15与图16的结果一致也证明了该语句的有效性。这样就可以得到存在数据表wp_user。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言