CSRF概念CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。利用了网站服务器只能检查发起请求的是不是用户的浏览器,而无法检查发起请求的是不是用户本意的这一漏洞。通常由于服务端没有对请求头做严格过滤引起的。
XSS利用的是站点内的信任用户,由信任用户执行了含有恶意前端脚本的页面产生,攻击对象是访问页面的用户。而CSRF则是通过搭建外部网站,受害者访问网站时被攻击者利用,通过盗取受害者身份,伪装来自受信任用户的请求来执行对受信任网站的攻击。
CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。我们知道,绝大多数网站是通过cookie等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过XSS或链接欺骗等途径(在XSS中嵌入CSRF的链接),让用户在本机(即拥有身份cookie的浏览器端)发起用户所不知道的请求。CSRF攻击会令用户在不知情的情况下攻击自己已经登录的系统。
可能出现该漏洞的地方:
存在添加、修改、删除操作的页面。
仅有查询的页面不会有该漏洞。
一般出现在中小型的网站,不属于严重漏洞。大型网站一般也比较安全,不会有这种漏 ...
XSS
概述XSS 攻击全称跨站脚本攻击Cross Site Scripting。是指用户在 Web 页面中提交恶意脚本,从而使浏览包含恶意脚本的页面的用户在不知情的情况下执行该脚本,导致被攻击的行为。通常出现在搜索框、留言板、评论区等地方。
与 SQL 注入类似,XSS 也是利用提交恶意信息来实现攻击效果的攻击行为。但是 XSS 一般提交的是 Javascript 脚本,运行在 Web 前端,也就是用户的浏览器;而 SQL 注入提交的 SQL 指令是在后台数据库服务器执行。所以两者攻击的对象是不一样的。
攻击流程如下:
攻击者对含有漏洞的服务器发起XSS攻击(注入JS代码)。
诱使受害者打开受到攻击的服务器URL。
受害者在Web浏览器中打开URL,恶意脚本执行。
本质:前端对于用户提交的参数没有审查就用于页面加载;
产生层面:前端,浏览器;攻击目标是通过前端脚本获取用户的数据。
XSS常用的函数类:输出类:echo printf print print_r sprintf die var-dump var_export
攻击成功与否受浏览器内核影响。一些高版本浏览器内核会主动过 ...
RCE 代码及命令执行漏洞
remote command/code execute 分为远程命令执行和远程代码执行。
在Web应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。
代码执行漏洞原理应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、assert、eval、preg_replace、shell_exec、passthru、popen、proc_popen、escapeshellcmd、pcntl_exec、call_user_func、call_user_func_array、array_map、动态函数 等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行,这就是命令执行漏洞。
以上函数主要也在webshell中用的多,实际上在正常应用中差别不太大,用得最多的还是前三个。
产生web源码:thinkphp、eyoucms、wor ...
文件包含漏洞
原理文件包含:
文件包含即程序通过 包含函数 调用本地或远程文件,将文件内容作为脚本执行,以此来实现拓展功能。
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含。
文件包含漏洞原理:
文件包含漏洞是指当服务器php.ini文件中开启allow_url_include选项时,就可以通过PHP的某些特性函数,比如include(),require()和include_once(),require_once(),利用URL去动态包含文件,让当前页面去执行指定的另外一个文件中的代码内容。此时如果没有对文件来源进行严格审查,就会导致任意文件读取。黑客将很有可能让当前页面去执行超出 Web 目录中的文件,或者是 Web 目录中不希望被执行的敏感文件,甚至是远程服务器上的文件。
几乎所有的脚本语言中都提供文件包含的功能,但文件包含漏洞在 PHP 中居多,而在JSP、ASP、ASP.NET程序中非常少,甚至没有包含漏洞的存在。
1234567891011121314#文件包含各个脚本代码ASP,PHP ...
文件下载
原理网站上文件下载功能的实现通常是通过对参数filename的值的对应,获取在服务器上所需下载的文件的绝对路径,然后读取文件内容并发送给客户端进行下载。
如果这些有下载功能的网站没有对前端用户的下载请求的文件类型、目录做合理严谨的规则进行过滤,导致用户通过路径回溯符../等相关操作,跳出了程序本身的限制目录,然后再利用文件下载功能,使前端下载请求可以下载服务器中的任意文件。
产生条件网站给用户提供了下载文件的功能,并能接收相关的参数变量
后端使用了读取文件的相关函数
网站对前端用户读取文件的请求没有进行相应的控制或控制不严(限制、校验)
网站能输出请求文件的内容,提供给前端下载
文件下载漏洞的挖掘寻找漏洞位置找到有文件下载功能的网站:
根据功能:一般可以根据下载功能去找,一些明显的软件下载网站等;
根据关键字符串:
123456789download.php?path=download.php?file=down.xxx?filename=down.php?file=data.php?file=read.xxx?filename=readfile.php?file=r ...
文件读取
原理攻击者通过一些手段可以读取服务器上开发者不允许读到的文件。
主要读取的文件是服务器的各种配置文件、文件形式存储的密钥、服务器信息(包括正在执行的进程信息)、历史命令、网络信息、应用源码及二进制程序。
开发语言相关的触发点123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101phpinfo()功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。危险等级:中passthru()功能描述:允许执行一个外部程序并回显输出,类似于 exec()。危险等级:高exec()功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。危险等级:高system()功能描述:允许执行一个外部程序并回显输出,类似于 passth ...
机器学习实战参考书目:
《机器学习实战:基于Scikit-Learn和TensorFlow》
《机器学习实战》
先导知识:
监督学习中,一般使用两种类型的目标变量,标称型和数值型。
标称型目标变量的结果只在有限目标集中取值,如真与假、动物分类集合{ 爬行类、鱼类、哺乳类、两栖类、植物、真菌};数值型目标变量则可以从无限的数值集合中取值,如0.100、42.001、1000.743 等。标称型目标变量主要用来分类,数值型目标变量主要用于回归分析。
机器学习的主要任务:分类和回归。
分类是将实例数据划分到合适的分类中,回归主要用于预测数值型数据。分类和回归均属于监督学习,即这类算法必须知道样本的类别,即目标变量的分类信息。另外,无监督学习则指训练数据没有类别信息,也不会给定目标值。无监督学习可以进行聚类、密度估计(寻找描述数据统计值),也可以减少数据特征的维度,以便使用二维或三维图形来更直观地展示数据信息。
如何选择算法:
(1)首先考虑使用算法的目的。
如果是想要知道数据的目标变量的值,可以选择监督学习算法。如果目标变量是离散的,就选择分类器算法;如果目标变量是连续的,就选择回归算法 ...
STL参考链接:
http://c.biancheng.net/stl/
概念STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。
STL 最初由惠普实验室开发,于 1998 年被定为国际标准,正式成为 C++ 程序库的重要组成部分。值得一提的是,如今 STL 已完全被内置到支持 C++ 的编译器中,无需额外安装,这可能也是 STL 被广泛使用的原因之一。
STL 就位于各个 C++ 的头文件中,即它并非以二进制代码的形式提供,而是以源代码的形式提供。
从根本上说,STL 是一些容器、算法和其他一些组件的集合,所有容器和算法都是总结了几十年来算法和数据结构的研究成果,汇集了许多计算机专家学者经验的基础上实现的,因此可以说,STL 基本上达到了各种存储方法和相关算法的高度优化。
注意,这里提到的容器,本质上就是封装有数据结构的模板类,例如 list、vector、set、map 等
STL的头文件:algorithm,n ...
计算机网络计算机网络模型1.1 OSI参考模型国际标准化组织(ISO)提出的网络体系结构模型,称为开放系统互联参考模型(OSIRM),通常简称为OSI参考模型。
OSI有七层,自下而上依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。其中数据链路层在概念上常被划分为两个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。
数据链路层负责分配MAC地址。MAC地址,或称物理地址,由48比特长,12个十六进制数字组成,0~23位(前6位十六进制)是厂商向IETF( 国际互联网工程任务组)等机构申请用来标识厂商的代码。地址的24到47位由厂商自行分派,是各个厂商制造的所有网卡的一个唯一编号。 因此一个网卡会有一个全球唯一固定的MAC地址,但可对应多个IP地址。MAC地址的第48位是组播地址标志位。
网络层负责对数据包进行路由选择和存储转发,网络层的协议有: IP、IPX、ICMP、IGMP、ARP、RARP、OSPF 等。网络层数据的单位称为分组或数据包。网络层提供点到点的通信(直接相连的结点之间的通信),仅提供一台机器到另一台机器之间的通信,不会涉及程序或进程的概 ...
操作系统进程管理进程进程是资源分配的基本单位(比如内存、打开的文件等),同一程序可产生多个进程(一对多关系),以允许同时有多位用户运行同一程序,却不会相互冲突。进程需要一些资源才能完成工作,如CPU使用时间、存储器、文件以及IO设备,且为依序逐一进行,也就是任何时间内仅能运行一项进程。
通常进程有如下5种状态,其中前3种是进程的基本状态。
运行状态(执行窗台):进程正在处理器上运行。在单处理器环境下,每一时刻最多只有一个进程处于运行状态。
就绪状态:进程已处于准备运行的状态,即进程获得了除处理器之外的一切所需资源,一旦得到处理器即可运行。
阻塞状态:又称为等待状态,进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理器)或等待输入输出完成。即使处理器空闲,该进程也不能运行。
创建状态:进程正在被创建,尚未转到就绪状态。
结束状态:进程正从系统中消失。可能是进程正常结束或其他原因中断退出运行。
进程的三个基本状态之间是可以相互转换的,如图1-1所示。
具体地说,当一个就绪进程获得处理机时,其状态由就绪变为执行;
当一个运行进程被剥夺处理机时,比如用完系统分给它的 ...