1 SQL注入
1.1 定义:
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
1.2 执行条件
1 用户能够控制输入
2 原本程序要执行的SQL语句,拼接了用户输入的恶意数据
1.3 SQL注入
1 联合查询union
2 information.schema数据库是MySQL自带的数据库,可以利用information.schema.SCHEMA_NAME来查看所有数据库
3 万能密码绕过'or' 1 '=' 1 #
4 数字型注入
检测方法
http://www.test.com/user.php?id=8' | 返回错误,未对单引号处理 |
---|---|
http://www.test.com/user.php?id=8 and 1=1 | 运行正常 |
http://www.test.com/user.php?id=8 and 1=2 | 运行异常 |
5 SQL盲注
- 布尔盲注
- 时间盲注
BENCHMARK(count, expr)
通过讲expr执行count次来达到延迟的目的
sleep(time)
直接延迟time时间 - 报错型盲注
6 SQL文件头注入
- HTTP Header内容
1) User-Agent:使得服务器能够识别客户使用的操作系统,浏览器版本。(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
2) Cookie:网站为了辨别用户身份、进行session跟踪二储存在用户本地终端上的数据(通常经过加密)
3) X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件【通过修改XFF头可以实现伪造IP】)
4) Clien-IP:同上
5) Rerferer:浏览器向Web服务器表明自己是从哪个页面链接过来的
6) Host:客户端指定自己想访问的Web服务器的域名/IP地址和端口号
7 宽字节注入
GBK
UTF-8
1.4 SQL注入检测绕过
1 大小写绕过
比如拦截了union,那就使用Union UnIoN等等
2 编码绕过
WAF(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,全称:Web应用防护系统)检测关键字,比如检测union,用%55也就是U的16进制编码来代替U,union写成%55nION,结合大小写也可以绕过一些WAF
3 注释绕过
适用于WAF只是过滤了一次危险的语句,而没有阻断我们的整个查询
1 | /?id=1+union+select+1,2,3/* |
比如对于上面这条查询,WAF过滤了一次union和select,在之前在写一个注释的语句,让它吧注释里面的过滤掉,并不影响我们的查询。
绕过语句就是:
1 | /?id=1/ * union * /union/ * select * /select+1,2,3/* |
4 分隔重写绕过
适用于那种WAF采用了正则表达式的情况,会检测所有敏感字符
1 | /?id=1+un/** ion+sel/** ect+1,2,3- |
至于重写绕过,适用于WAF过滤了一次的情况,和我们上传aaspsp的原理一样,我们可以写出类似Ununionion这样的,过滤一次union后就会执行我们的查询了
1 | ?id=1 ununionion select 1,2,3- |
5 同功能函数替换
- Substring()可以用mid(), substr()这些函数来替换,都是用来取字符串的某一位字符的
- Ascii()编码可以用hex(), bin()也就是16进制和二进制编码替换
- 时间盲注中Benchmark()可以用sleep()来替换
6 WAF绕过脚本
kali的/usr/share/sqlmap/tamper
目录下主要存放的是WAF绕过脚本,比如base64encode.py是把base64编码后的字符串展示绕过,其余的请看下方链接
https://blog.csdn.net/qq_34444097/article/details/82717357
2 敏感信息泄露
2.1 目录
- 默认账户
- 后台/服务对公开发
- DEBUG信息
- 目录列表
- 备份文件
- 系统产生的临时文件
- GIT泄露
- SVN泄露
2.2 默认账户
- 数据库软件
MySQL账户:root
sql server管理员账户:sa - 集成开发环境
- CMS内容管理系统
账户admin - 路由器管理界面
- 摄像头管理界面
2.3 后台/服务对公开发
- 后台地址泄露
- 后台地址被爆破
- 后台未做授权
- 敏感服务未做访问限制,可以直接访问
2.4 debug信息
为了开发人员能够快速定位错误的代码,脚本配置文件打开出错误提示选项
debug信息可能会透露部分代码、绝对路径等信息。(比如SQL的报错注入)
2.5 目录列表
2.6 备份文件
.bak等相关备份文件
.zip等相关压缩命令产物
.tar.tz、.tar等tar命令的产物
.sql等相关数据库
2.7 系统产生的临时文件
.tmp文件
.swp文件
.Ds_Store
2.8 GIT泄露
分布式版本控制系统
隐藏仓库文件夹.git文件夹
还原仓库文件
2.9 SVN泄露
集中式版本控制系统
隐藏仓库文件夹.svn文件夹
还原仓库文件
3 CSRF&SSRF
3.1 CSRF(跨站请求伪造)
3.1.2 原理总结
一个CSRF漏洞攻击的实现,其需要由“三个部分”来组成
- 有一个漏洞存在(无需验证、任意修改后台数据、新增请求)
- 伪装数据操作请求的恶意链接或者页面
- 诱使用户主动访问或登录恶意链接,触发非法操作
3.1.3 漏洞的存在
关键字:跨站请求漏洞(CSR: Cross Site Request)
如果需要CSRF攻击能够成功,首先就需要目标站点或系统存在一个可以
进行数据修改或者新增操作且此操作被提交后台后的过程中,其未提供
任何身份识别或校验的参数。后台只要收到请求,就立即下发数据修改或
新增的操作;
以上漏洞情况的存在,出现比较多的场景有用户密码的修改、购物地址的
修改或后台管理账户的新增等等操作过程中。
3.1.4 漏洞利用的伪装
关键字:伪装请求(F: forgery)
CSRF漏洞存在了,如果需要真正的被利用,还需要对“修改或新增”数
据操作请求的伪装,此时恶意攻击者只要将伪装好的“数据修改或新增
的请求发送给被攻击者,或者通过社工的方式诱使被攻击者在其 cookie还
生效的情况下点击了此请求链接,即可触发csrf漏洞,成功修改或新增当
前用户的数据信息,如修改当前用户的密码、又或者是当前用户为后台管
理员,触发漏洞后新增了一个后台管理员。
3.1.5 用户非本意的操作
关键字:非本意操作
当前用户在不知情的情况下,访问了黑客恶意构造的页面或链接,即在
非本意的情况下完成黑客想完成的“非法操作”,实现了对当前用户个人
信息的恶意操作。
3.1.6 小结
小结:构造一个恶意链接或者html页面
CSRF漏洞的目的:利用已存在的漏洞构造了一个“恶意链接”或“html页
面”,然后诱使用户点击触发此漏洞。
目标站点存在一个漏洞(CSRF),攻击者利用此类漏洞伪装了一个链接
或者html页面,诱使被攻击者在登录的情况下(即当前 cookie有效的情况
下)点击此伪装请求,随后在用户不知情的情况下完成了对当前用户数
据的修改或者新增操作,而被修改的信息可能是用户的密码、关键信息又
或者新增后台管理员等。
3.2 SSRF(服务器端请求伪造)
3.2.1 SSRF简介
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击
者构造形成,由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻
击的目标是从外网无法访问的内部系统,正是因为它是由服务端发起
的,所以它能够请求到与它相连而与外网隔离的内部系统。
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据
的功能且没有对目标地址做过滤与限制,比如从指定URL地址获取网
页文本内容,加载指定地址的图片,下载等等。
3.2.2 SSRF常见危害
- 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的Banner信息等
- 攻击运行在内网或本地的应用程序
- 对内网Web应用进行指纹识别,通过访问默认文件实现(如 Readme等文件)
- 攻击内外网的Web应用,主要是使用GET就可以实现的攻击(比如Struts2,SQLI等)
- 用File协议读取本地文件等
3.2.3 SSRF常见应用场景
- 分享
- 在线翻译
- 图片加载与下载
- 图片、文章收藏功能
- 未公开的API实现以及其他调用URL的功能等
4 XSS跨站脚本
4.1 定义
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意的Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
主要可以对用户cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
4.2 攻击流程
4.3 跨站脚本介绍
4.4 跨站脚本实例
4.4.1 前端HTML代码+后端PHP代码
4.4.2 两种利用方式
4.4.3 跨站脚本的分类
根据特性和利用手法的不同,主要分成三大类型:
- 反射型XSS(也叫非持久性XSS)
- 存储型XSS(存储性XSS)
- DOM型的XSS
4.5 反射型XSS
4.5.1 简介
反射型XSS(也叫非持久型XSS、参数型XSS)
主要用于将恶意脚本附加到URL地址的参数中
例如:
1 | http://127.0.0.1/XSS4.php?name=<script>alert("XSS")</script> |
4.5.2 攻击原理
4.5.3 编码转换
由此可知,恶意代码经过编码处理后会大大增加其迷惑性
4.6 存储型XSS
4.6.1 简介
存储型XSS相当于持久型XSS,此类XSS不需要用户点击特定URL就能执行跨站脚本,攻击者事先吧恶意JavaScript代码上传或存储到漏洞服务器中,当受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。
4.6.2 攻击原理
4.7 DOM型XSS
4.7.1 定义
先以一张w3c的图来说明,到底什么是dom:
dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。了解了这么一个知识点,你就会发现,其实dom xss并不复杂,他也属于反射型xss的一种(domxss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可能是存储型的),简单去理解就是因为他输出点在DOM。dom - xss是通过url传入参数去控制触发的)分析完dom-xss之后,再说说存储型xss,其实也很好理解,存储型xss,自然就是存入了数据库,再取出来,导致的xss。3,)反射型xss实际上是包括了dom - xss了,关键点仍然是在通过url控制了页面的输出(dom-xss也类似,只因为输出地点不同而导致结果不一致)。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
4.7.2 可能触发DOM型XSS的属性:
document.referer属性
window.name属性
location属性
innerHTML属性
documen.write属性
······
5 Web安全漏洞挖掘
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。