前言
继SQL注入(一)对数据库注入的详细内容介绍及相关学习测试之后,本篇博文将对medium级别以及high级别进行分享学习测试结果。
medium级别sql注入
在low级别的测试里面,因为常见的注入点测试有报错和布尔检测,当时是使用一个单引号进行测试,而除了注入点的这两种测试方法还需要知道是存在数字型注入还是字符型注入,而low级别的正是字符型注入,同样在medium级别下进行注入点测试:
1.将安全级别设置为medium之后,发现sql注入页面发生变化:
原先的输入窗口提交页面变成下拉选项,没有办法输入就不能按照之前的方式进行注入测试,这时需要对数据提交的请求内容进行截断修改,我使用burp的截断功能来处理。
从截获的http请求可以看到请求方式是post,这也导致我们不能像low等级时一样在url位置进行代码语句输入
2.注入点测试:
选择下拉选项1得到原先输入1的结果,此时在请求内容修改参数id内容为
'
,页面返回错误,,看到输入内容单引号被转义了,这可能是服务器对输入内容进行一些字符的过滤导致的,那就意味着不能利用单引号进行注入,此时改为数字测试是否存在数字型注入,,,可以看到前者是输入1 and 1=1
后者是输入1 and 1=2
,前者正常显示而后者没有结果显示是正确的且没有报错,可以判断存在数字型注入。3.猜解字段数长度
1 order by 2
进行字段猜解,当猜测字段数为3时报错,2时正常显示,则字段是两个,即当前表有两个字段即显示的firstname和surname,,。4.数据库信息收集
对数据库版本、所在库等信息收集:
1 union select concat(user(),0x2c,version()),database()
得到数据库相关信息,。5.查找数据库为dvwa的表
1 union select table_name,table_schema from information_schema.tables where table_schema=database()
,dvwa数据库中只有两个表,,其中users是我比较关注的,对其进行表字段查找。6.对users表字段进行查找
1 union select column_name,table_name from information_schema.columns where table_schema=database() and table_name='users'
,注入这段之后页面报错,,又是转义的问题,所以改为十六进制,1 union select column_name,table_name from information_schema.columns where table_schema=database() and table_name=0x27757365727327
,,没有得到搜索结果,改为1 union select column_name,table_name from information_schema.columns where table_schema=database() and table_name=0x7573657273
,,得到表字段。Q:为什么改为十六进制表示的表名带有单引号仍得不到表内字段
A:可能还是过滤包含单引号在内的符号原因即使转换为十六进制但是显示的表名应该是
'users'
而不是users
所以找不到有这个表名的结果。7.查询user和password字段信息
1 union select user,password from users
,得到所有帐号及密码,,进行查找MD5库解密即可得到明文密码。
high级别sql注入
测试完成low和medium级别的测试之后,便是对high级别的sql漏洞进行测试,同样是按照相似的sql注入步骤进行测试,不过high级别的测试页面又发生变化,,,输入页面和结果显示界面是两个页面,分别为
DVWA-master-v1.1/vulnerabilities/sqli
和DVWA-master-v1.1/vulnerabilities/sqli/session-input.php
,这和low级别与medium级别都不一样,所以在测试时需要观察显示结果页面来判断注入情况。1.注入点判断:
进行字符型的测试,输入
1'
,,页面出错,输入1
,,进行数字型测试,,不符合布尔测试,应该不存在数字型注入,接着测试字符型,,可是不管怎么测试符号都会显示有错误,但是不是sql语句上的错误,联系通过布尔判断不是数字型注入以及测试low级别时对字符的注释,进一步测试,数入1' and '1'='2'--
对比1' and '1'='1'--
,,布尔结果和页面显示正常,说明是字符型注入,同时存在对字符的某种限制导致之前正常的字符型注入测试报错。2.猜解字段数
1' order by 2--
,,大于2个字段数时报错,字段数是2.之后的步骤和low级别是一样的,所以输入
1' union select user,password from users--
,,成功得到想要的敏感信息。
——————
小结
OWASP的sql injection部分均已分享完成,但是这只是sql 注入的冰山一角,但是在服务端后台与数据库开发时需要怎样去避免sql注入却是较好的学,共勉,希望对安全感兴趣且有所收获的朋友一起分享学习。