十三年专注于网站建设与互联网应用开发,低调、有情怀的网络应用服务商!
南昌百恒科技微信公众号 扫一扫关注
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒科技微信公众号

常规SQL注入检测

百恒 2017-05-04 17:43:55 3415
       在南昌网站建设中,SQL注入攻击可以根据bug的不同分为不同类别。通常来说,可以按照HTTP响应返回的数据种类来区分注入。如果返回的是类似下面这样的SQL错误,就可以实施基于错误的SQLi:
       You have an error in your SQL syntax; check the
       manual that corresponds to your MySQL server version
       for the right syntax to use near ''' at line 1
       某些情况下,即使SQL语句中包含错误,Web应用也根本不会返回错误。这种类型的SQLi通常叫作Blind SQLi,因为从数据库或应用得不到任何错误。
此时,通过对比正常请求和恶意请求的HTTP响应之间的区别,也可以检测到SQLi是否会影响某些资源。前述区别可以分为两种。一种是内容长度不同,也就是返回的响应体的内容不同。另一种是响应时间不同,比如常规响应时间是1秒,而恶意响应却需要5秒。下面来看一段Ruby代码,这段代码是可以被SQL注入的:
       get "/" do
       @config = ConfigReader.instance.config
       # 从GET请求中取得book_id参数
       book_id = params[:book_id]
       # MySQL连接池
       pool = Mysql2::Client.new(
       :host => @config['db_host'],
       :username => @config['restricted_db_user'],
       :password => @config['restricted_db_userpasswd'],
       :database => @config['db_name']
       )
       begin
       if book_id == nil
       @rs = pool.query "SELECT * FROM books;"
       else
       # 若找到一个特定的book_id参数
       # 就执行以下未加密查询
       query = "SELECT * FROM books WHERE id=" + book_id + ";"
       @rs = pool.query query
       end
       erb :"sqlinjection"
       rescue Exception => e
       @rs = {}
       @error_message = e.message
       erb :"sqlinjection"
       end
       end
       如果将一个类似/page?book_id=1'的GET请求发送给这段代码中的处理程序,那么数据库就会返回类似前面的错误信息。只要发送像下面这样检索MySQL数据库版本的查询,就可以利用这种基于错误的SQLi:
       /page?book_id=1+UNION+ALL+SELECT+NULL%2C%40%40VERSION%2CNULL%23
       最终的SQL语句会被攻击者在SELECT * FROM books WHERE id=1后面追加上UNION ALL SELECT NULL, @@VERSION, NULL。Web应用的那个拼接的查询(query = "SELECT * FROM books WHERE id=" + book_id + ";")之所以不安全,是因为参数值book_id未经输入验证就被用于字符串拼接。这种[没有预处理语句(Prepared Statements)18]的查询结果,会使应用面临SQL注入的风险。
       再考虑一种情况。假设前面存在漏洞的代码除了把底部的一行(@error_message =e.message)删除之外,其余都相同,那么此时仍然可以被SQL注入攻击,只不过变成了Blind。
       假设你事先并不知道这一点,而想要检测某个资源是否可以实施SQLi。可以发送下面这个GET请求:
       /page?book_id=1+AND+SLEEP(5)
       然后,经过大约5秒钟,你才会收到HTTP响应。这么长的响应时间意味着该资源存在SQL注入漏洞,因为SLEEP语句被成功执行了。
       以上只是比较浅显的SQL注入检测。如果你觉得这些内容不好理解,随时可以来电咨询百恒网络,本公司专业从事南昌网站建设、微信开发、手机APP开发等服务,经验丰富,实力强,南昌做网站,就选百恒网络!
400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
备案专线 备案专线
 
售后服务 售后服务
 
×