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-- ,管理员一般是数据库中的第一个用户,这样就很有可能返回管理员的权限。
本文是由youthflies发表在易踪网(yeetrack.com)上的原创文章,原文地址为:https://www.yeetrack.com/?p=20

sql注入解析(一)基本语法

 

sql注入解析(二)执行注入

 

sql注入解析(三)数据库类型

 

sql注入解析(四)避开过滤

版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=160