卢纳黍的想疗院


一个不务正业,爱纹身、爱金属乐、玩乐队、Bug制造专业的前端程序猿~


web端攻击基础

web端攻击基础

我们在这里不讨论攻击手段,而是只是谈谈基本的攻击预防,想当初寡人也想尝试着去做一些黑客入侵,然而现今的防御手段已经大大升级,目前网上的大多数攻击教程都基本失效了。。。

之所以会想到写这个博文不是说凑文章数、炒冷饭,而是最近在公司的一个业务中发现了这样的bug,我自己成功的对公司的产品进行了 ==Form表单注入==,虽然是个比较低级的bug,但是难保在繁重的开发任务中会每一个环节都那么仔细,总会有疏漏。

常规的攻击方法baidu一下你就知道,啊呸,不对,常规的攻击方法 baidu一下你确实就能知道,无非就以下几种

* url注入

* form注入

* 等(卧槽 这个“等”是什么鬼)

参考链接: szhshp的第三边境研究所Web端脚本攻击基础

首先我们开看看URL注入

##URL注入

URL注入一般用于asp或者php页面。

相较之下==URL注入==很简单,有些页面为了方便直接将必要参数(例如ID等数据)通过URL参数传过去

懒得自己截图了,于是从友链的博客里偷一张

对应这样的后台SQL也许是这样的

SELECT ... FROM employer WHERE jopid = [URL.jobid]

甚至我们可以输入一些特定的数据库操作语句, 例如我们将URL后方的参数改为

   xxx.cfm?jobid=1; delete from employer

后台的SQL就会变为

SELECT ... FROM employer WHERE jopid = 1; delete from employer;

虽然格式有些混乱但是依然没有运行错误, 结果就是表中所有数据都被意外删除了.

在我们刚开始攻击的时候可能不清楚对应服务器的数据库系统以及后台语言, 但如果没有对错误进行catch而是直接抛给用户的话, 那么Attacker就可以了解到对应配置(数据库系统及服务器系统等), 更加方便其进行攻击。

常用的URL注入:

* 1' or '1'='1  判断是否有注入点

* 根据页面返回情况,对有注入点的页面进行深层次的 注入判断 和 SQL注入

具体细节我就不说了,有兴趣的可以去baidu、google、bing

##form表单注入

继续盗图  

这样一个登陆页面\n\n后台SQL代码假设是:

SELECT ... FROM user WHERE name=xxx and password=xxx

正常情况我们会输入合法的账号和密码并提交, 但是Attacker会在输入框中使用各种SQL使得后台的SQL出现异常, 比如:\n\n> 用户名随意输入  

 密码输入xxx' or 'a'='a

那么结果就是 后台SQL语句被篡改

SELECT ... FROM user WHERE name='abcdef' and password='xxx' or 'a'='a'

显然上述SQL是绝对成立的, 因此可以顺利进行后方的业务逻辑, 如此Attacker在不知道密码的情况下就可以使用任何用户的身份登录

##SQL注入的预防

1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双”-“进行转换等.  
2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取.\n3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接.\n4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息.\n5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中.

##常现的bug

* ` <input />`

* `<textarea>`

* `<div contenteditable="true"></div>`

以上三个是最容易导致SQL注入的情况,简单的说就是 凡是页面上 允许用户输入的 都有可能成为 Attacker的攻击处\n\n比如 以下情况:

* <input style="width:100%" type="text" value="<script>alert(1)</script>" />

* <textarea style="width:100%;"><script>alert(1)</script></textarea>

* <div contenteditable="true"><script>alert(1)</script></div>

如果此时有个提交按钮让我们把以上内容提交到后台

如果后台没有进行过滤特殊字符, 或者对不可预料的输入进行编码的话\n后果就会是这样  

###所以如何预防 [XSS] [1]?

1. 和SQL Injection类似, 永远不要相信用户的输入. 过滤特殊字符, 对不可预料的输入进行编码  

(我在写这篇博文的时候 在 可编辑的`<div contenteditable="true"></div>`就使用了编码`<script>alert(1)</script>` 不然 你现在看到的文章就会有 `alert`弹窗)

2. 使用HTTP头指定类型

3. 对于用户

* 尽可能使用最新版的浏览器, 以保证安全性

[1]:https://www.baidu.com/s?wd=xss&rsv_spt=1&rsv_iqid=0xfb6ad1d600000310&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=4&rsv_sug1=4&rsv_sug7=100&rsv_sug2=0&inputT=832&rsv_sug4=833

建议打赏金额1-10元

支付宝打赏

微信打赏

最近的文章

ascii图像,无BUG,码农专用😂

coding地址 预览: 草泥马…

ascii 继续阅读
更早的文章

canvas黑客帝国效果

这个动画效果,就如标题所示,是一个绝对的酷炫动画效果原文来自 前端圈效果图  代码<!DOCTYPE html> <html lang="en">…

Canvas 继续阅读
comments powered by Disqus