针对前端(客户端)的攻击:钓鱼,暗链,xss,点击劫持,CSRF,URL跳转等问题
针对后端(服务端)的攻击:SQL注入、命令注入、文件上传、文件包含、暴力破解等问题
HTML DOM
DOM 是树结构
DOM本质:连接WEB页面和编程语言
可以更直观了解页面元素
JavaScript、DOM、BOM
JavaScript是遵循ECMAScript标准的脚本语言
JavaScript可以运行在 HTML的<script></script>之间 和HTML的事件属性中,如onclick和浏览器的JavaScript控制台中
JavaScript DOM
HTML源码已经完成,在页面操作HTML需要用到JavaScript HTML DOM函数
获取一个HTML元素内容
第一步,获取元素 : getElementById() 通过id获取元素
第二部,获取元素内容: .innerHTML 获取元素内容
JavaScript BOM
BOM: 浏览器对象模型 Browser Object Model
本质 :连接浏览器和编程语言
使用 JavaScript 获取浏览器信息和操作浏览器就是JavaScript BOM
浏览器警告用户函数
警告弹窗alert() 、确认弹窗confirm()、提示弹窗prompt()(TIPS:常用于简单的调试和信息展示。如XSS漏洞的测试)
Cookie
从浏览器获取用户Cookie
document.cookie
Cookie讲解:通常是服务器发送给用户客户端的一小段文本信息
常见场景:用户输入用户名和密码成功登陆网站后,网站会生成一个cookie给用户,当做用户凭证
这个凭证cookie就相当于我们的钥匙,我们每次访问网站的时候浏览器都会带上钥匙(cookie)
获取浏览器屏幕信息:(window.)screen
获取/控制用户页面URL:(window.)location
获取访问者浏览器信息:(window.)navigator
为何暴力破解可以突破CSRF Token
CSRF Token:我们称这种类型的随机参数为CSRF token,它保证了攻击者无法猜测到所有参数。
因为构造HTTP请求的人不一样:暴力破解的攻击者是当前用户,受害者是其他用户
CSRF的攻击者是其他用户,受害者是当前用户
命令注入
命令注入流程:是否调用系统命令,函数或函数的参数是否可控,是否拼接注入命令
命令注入防御不推荐黑名单,用白名单。
如果过滤敏感命令,windows可以使用双引号绕过"",linux中还可以用单引号绕过''
例如who""ami
如果命令注入不显示输出结果
延时注入:window ping 127.0.0.1 -n 5 >nul linux sleep 5
远程请求:window ping,telnet等, linux wget,curl等,比较流行的是dns解析nslookup
文件上传
合成文件命令:copy 1.jpg/b+1.txt/a 2.jpg
Nginx解析漏洞:需要php.ini中的cgi.fix_pathinfo=1;
畸形解析漏洞:xxx.xxx/xxx.php 只要前一个文件存在,就会当成后面的php文件解析。
防御:
1、阻止非法文件上传:文件名后缀白名单,文件类型校验 content-type,文件内容头部判断