1、暴力破解
原因:用户密码设置简单
方法:利用字典或猜测设定请求包的参数,对登录用户名和密码进行多次测试
2、命令行注入
原因:解析用户输入的命令行时,对数据过滤不严谨,用作系统操作命令执行
方法:利用漏洞绕过过滤条件,利用批处理执行多条命令
3、CSFR 跨站请求伪造
原因:利用受害者尚未失效的身份认证信息,诱骗其点击恶意链接或者访问含有攻击代码的页面,在受害者不知情的情况下以受害者身份向目标服务器发送操作请求,从而达到攻击目的
方法:攻击者将自己的用户修改密码成功后发送结果链接至受害者,可以隐藏为短链接,受害者如果正在访问改网站,点击攻击者链接后其用户密码就会修改为攻击者修改的密码
4、文件包含(LFI本地和RFI远程)
原因:缺少对url中文件路径或文件包含的合法性检查
方法:利用相对路径或绝对路径对受害机文件进行访问获取隐私信息,或者在受害机上执行远程攻击脚本
5、文件上传
原因:未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件
方法:绕过过滤或修改后缀上传可执行文件
6、验证码绕过
原因:重置验证码的操作在浏览器中,利用代理导致Session不失效,可以无限重用验证码
方法:利用代理使用不失效的Session进行暴力破解
7、XSS 跨站脚本
原因:未对Url包含的脚本进行检测,导致浏览器执行攻击脚本(反射型);未对上传的脚本进行检测,其他用户访问时导致执行攻击脚本(存储型)
方法:构造链接发送给受害者,点击后执行链接中的攻击脚本(反射型);上传攻击脚本至服务器,受害者访问服务器该脚本时触发攻击脚本执行(存储型)
8、SQL Injection
SQL 注入攻击(SQL Injection),简称注入攻击、SQL 注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。由于在设计程序时,忽略了对输入字符串中夹带的 SQL 指令的检查,被数据库误认为是正常的 SQL 指令而运行,进而使数据库受到攻击,可能导致数据被窃取、更改、删除,甚至执行系统命令等,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。
常见发生位置
URL 参数提交,主要为 GET 请求参数
表单提交,主要是 POST 请求、也包括 GET 请求
Cookie 参数提交
HTTP 请求头部的一些可修改的值,比如 Referer、User_Agent 等
一些边缘的输入点,比如 mp3 文件、图片文件的一些文件信息等
防御措施
使用预编译语句: 一般来说,防御 SQL 注入的最佳方式,就是使用预编译语句,绑定变量,对现有代码的改动量较大。
使用存储过程: 使用安全的存储过程可在一定程度上对抗 SQL 注入,但要注意采用此种方法无法保证 100% 安全。
严格检查用户数据: 对用户传入的数据类型及内容进行严格的检查。对数据类型检查,如利用 ID 查询时判断是否为整型,输入邮箱时判断邮箱格式,输入时间、日期等必须严格按照时间、时期格式等;对数据内容进行检查,如严格检测用户提交数据中是否包含敏感字符或字符串,是否匹配某种注入规则,严格转义特殊字符等。此种方法虽然便于实施,但容易产生误报和漏报,且容易被绕过。
其他: 使用安全的编码函数、统一各数据层编码格式(如统一使用 UTF-8 格式等)、严格限制数据库用户权限、定期进行代码黑盒白盒扫描、避免将错误信息显示到页面等。
原因:网站链接存在参数传递,后台没有对用户输入进行过滤,导致用户的输入直接被SQL解释器执行
方法:绕过后台对用户输入的检测,在网站链接中添加攻击命令,致使服务端输出攻击命令执行结果