针对Web的攻击技术:
简单的 HTTP 协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用 HTTP 协议的服务器和客户端,以及运行在服务器上的 Web 应用等资源才是攻击目标。
在 Web 应用中,从浏览器那接收到的 HTTP 请求的全部内容,都可以在客户端自由地变更、篡改。所以 Web 应用可能会接收到与预期数据不相同的内容。
在 HTTP 请求报文内加载攻击代码,就能发起对 Web 应用的攻击。通过 URL 查询字段或表单、HTTP 首部、Cookie 等途径把攻击代码传入,若这时 Web 应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。
针对Web应用的攻击模式:
主动攻击/被动攻击
主动攻击:
主动攻击(active attack)是指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。
主动攻击模式里具有代表性的攻击是 SQL 注入攻击和 OS 命令注入攻击。
被动攻击:
被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访问发起攻击。
被动攻击通常的攻击模式如下所示。
步骤 1: 攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的 HTTP 请求。
步骤 2: 当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
步骤 3: 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发送给作为攻击目标的 Web 应用,运行攻击代码。
步骤 4: 执行完攻击代码,存在安全漏洞的 Web 应用会成为攻击者的跳板,可能导致用户所持的 Cookie 等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。
被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。
利用被动攻击,可发起对原本从互联网上无法直接访问的企业内网等网络的攻击。只要用户踏入攻击者预先设好的陷阱,在用户能够访问到的网络范围内,即使是企业内网也同样会受到攻击。
因输出值转义不完全应发的安全漏洞:
实施Web应用的安全对策可大致分为两个部分:
客户端的验证
web应用端(服务器端)的验证:输入值验证,输出值转义
跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进行的一种攻击。动态创建的 HTML 部分有可能隐藏着安全漏洞。就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。
跨站脚本攻击有可能造成以下影响:
利用虚假输入表单骗取用户个人信息。
利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下,
帮助攻击者发送恶意请求。
显示伪造的文章或图片。
跨站脚本攻击案例
在动态生成 HTML 处发生:
对用户 Cookie 的窃取攻击:
在存在可跨站脚本攻击安全漏洞的 Web 应用上执行上面这段JavaScript 程序,即可访问到该 Web 应用所处域名下的 Cookie 信息。然 后这些信息会发送至攻击者的 Web 网站(http://hackr.jp/),记录在他的登录日志中。结果,攻击者就这样窃取到用户的 Cookie 信息了。
再比如:
https://www.cnblogs.com/dolphinX/p/3391351.html
SQL注入攻击(SQL Injection)是指针对 Web 应用使用的数据库,通过运行非法的 SQL 而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。
SQL 注入攻击有可能会造成以下等影响:
非法查看或篡改数据库内的数据
规避认证
执行和数据库服务器业务关联的程序等
sql注入参考样例:https://www.jianshu.com/p/078df7a35671
select * from users where username='123' and password='123'
输入用户名和密码都为:123‘ or 1=1 #
select * from users where username='123' or 1=1 #' and password='123' or 1=1 #'
不要使用拼接来使用动态sql,要使用参数化查询。
注意mybatis中的#和$,
一句话:能用#就不用$,实在万不得已要用了,自己处理sql注入问题。
预编译 变量替换 列名,表名
参考链接:
https://blog.csdn.net/attack_breast/article/details/88039493
https://www.jianshu.com/p/0a70f957c750
https://www.cnblogs.com/mmzs/p/8398405.html
OS命令注入攻击(OS Command Injection)是指通过 Web 应用,执行非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地方就有存在被攻击的风险。
nodejs样例:
vscode写了例子。
https://imnerd.org/web-security-vulnerability-os-command-injection.html
java样例:
https://blog.csdn.net/Hollake/article/details/90633630
怎么防止:白名单,对入参进行各种分析,防止恶意攻击。
HTTP首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。向首部主体内添加内容的攻击称为 HTTP 响应截断攻击(HTTPResponse Splitting Attack)。
HTTP 首部注入攻击有可能会造成以下一些影响:
设置任何 Cookie 信息
重定向至任意 URL
显示任意的主体(HTTP 响应截断攻击)
HTTP 首部注入攻击案例:
保存用户访问信息时可能遭受到攻击: https://blog.csdn.net/wangyangzhizhou/article/details/51656846
各种获取到的参数保存前都要想下有没有被攻击的可能,是否需要处理。
目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击有时也称为路径遍历(Path Traversal)攻击。
https://blog.csdn.net/yuhk231/article/details/54988327
远程命令执行(RCE):
https://www.jianshu.com/p/16f4a473940a
因设置或设计上的缺陷引发的安全漏洞:
强制浏览(Forced Browsing):
定义:强制浏览安全漏洞是指,从安置在web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
这个感觉和目录遍历有点像。
不正确的错误消息处理:
不正确的错误消息处理(Error Handling Vulnerability)的安全漏洞是指,Web应用的错误消息内保安队攻击者有用的信息。与Web应用有关的主要错误信息如下所示:
Web应用抛出的错误消息
数据库等系统抛出的错误消息
开放重定向:
https://www.cnblogs.com/Erik_Xu/p/5497479.html?locationNum=15&fps=1
因会话管理疏忽引发的安全漏洞:
会话管理是用来管理用户状态的必备功能,但如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取。
会话劫持(Session Hijack):
会话劫持是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到供给的目的。
会话固定攻击(Session Fixation):
对以窃取目标会话ID为主动供给手段的会话劫持而言,会话固定攻击会强制用户使用攻击者指定的会话ID,属于被动攻击
跨站点请求伪造:
防止跨站请求伪造:
expressjs有提供相应的中间件(csurf):https://blog.csdn.net/prufeng/article/details/93316395
asp.net mvc中是通过,在razor引擎中添加:@Html.AntiForgeryToken(),同时,在后端请求的对应action方法上增加[ValidateAntiForgeryToken]注解来实现。本质上就是核对生成在cookie中的token和请求页面的token是否一致。
https://www.cnblogs.com/yechangzhong-826217795/p/7867611.html
java中:
自己写拦截器。
有spring security组件可以防止csrf攻击。
https://www.cnblogs.com/liuroy/p/7366859.html
大部分情况下,跨站请求伪造都是基于form提交的,但现在,很多时候我们是基于ajax提交的,这种情况下,再去验证cookie和表单中的token是否一致就不行了。需要使用http头中自定义token来解决:
https://www.cnblogs.com/hutuzhu/p/5919400.html
其他安全漏洞:
密码破解(Paasword Cracking):
密码破解攻击即算出密码,突破认证。攻击不仅限于web应用,还包括其他的系统(如FTP,SSH等)。
密码破解有以下两种手段:
通过网络的密码试错(穷举法,字典攻击)
对已加密的密码进行破解(穷举法、字典供给 彩虹表 拿到密钥 加密算法的漏洞)
彩虹表(Rainbow Table)是由明文密码以及相对应的散列值构成的一张数据库表,是一种事先制作的庞大的彩虹表,可在字典、穷举等算法的破解过程中缩短消耗时间的技巧,从彩虹表中搜索散列值就可以找到对应的明文密钥。
参考链接:https://freerainbowtables.com/
点击劫持:
https://blog.csdn.net/qq_32523587/article/details/79613768
DoS 攻击(Denial of service attack):
Dos攻击是一种让运行的服务呈停止状态的攻击,有时也叫服务停止攻击或拒绝服务攻击。DoS攻击的对象不仅仅限于web网站,网络设备,服务器等都可以成为攻击对象。
DDoS攻击(Distributed Denial of Service attack)。DDoS攻击经常利用那些防御能力弱,易感染病毒的计算机作为攻击者的攻击跳板。
后门程序:
一个开发埋后门,每年修bug赚维护费,最后坐牢的例子。