来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] sql注入是代码注入的一种,也是最流行、破坏性较高的一种。前几年sql注入很流行,现在的网站一般都是直接基于框架搭建,参数传递,sql注入一般很隐蔽了,不容易找;但是一些学校...
sql注入是代码注入的一种,也是最流行、破坏性较高的一种。前几年sql注入很流行,现在的网站一般都是直接基于框架搭建,参数传递,sql注入一般很隐蔽了,不容易找;但是一些学校、政府和小型网站sql注入漏洞还是很常见的。 sql是一种解释性语言,即它在运行时由另外一个运行的组件解释其语言并执行其中的代码。现在的web网站都使用数据库来保存各种信息。数据库中的信息通过sql语句来访问,执行查询、插入、删除、更新等操作。 如果服务器端处理sql语句不安全,应用程序很容易受到sql注入攻击,读取甚至修改数据库数据,严重时可能会控制运行数据库的主机。现在最常见的三种数据库是oracle、ms-sql、mysql,其对应的sql语法也大同小异。 1、 最简单的sql注入的例子,select * from user wherer username= ‘youthflies’ ,这条sql语句是从user表里查询youthflies这个用户的所有信息,通常这个youthflies字符串是由用户输入的,如果我们输入youth’flies呢,那么服务器接收到用户的查询后,拼装sql,成为select * from user where username= ‘youth’flies’, 这条语句会产生语法错误,如果服务器端没有对错误页面进行处理,我们就可以直接看到后台爆出的异常。 修改我们的输入,输入youthflies’ or ’1′=’1 , 这样服务器端的sql就会变成 select * from user where username=’youthflies’ or ’1′=’1′, 正好产生有效的sql语句,这样服务器端就会给我们返回数据库中所有的用户信息。另外也可以这样输入 youthflies’ or 1=1–,“–”是数据库的注释字符,其后面的字符串会被当成注释处理,服务器端变成 select * from user where username=’youthflies’ or 1=1–’, 效果一样。 PS: mysql中–之后要有一个空格, 或者用#制定后面的字符时注释。 2、 前面的例子只是查询时sql注入,如果用户登录时候产生sql注入,那就可以绕够密码验证了。假如用户登录时,服务器端的sql语句为 select * from user where username=’youthflies’ and password=’passwd’, 我们用户名填写 admin’ or 1=1– ,这样服务器端的sql拼装为select * from user where username=’admin’ or 1=1 –’ and password =’passwd’, 这样如果管理员的用户名是admin,那我们就可以直接以管理员身份登录了。但是如果猜不出管理员的用户名,用户名可以这样 ‘ or 1=1– ,管理员一般是数据库中的第一个用户,这样就很有可能返回管理员的权限。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com