top10漏洞
OWASP-10
Sql 注入
https://mp.weixin.qq.com/s/frwK49IatUqUoT-4DR08GQ
绕过方式
大小写 双写 空格 内敛注释 url 编码 十六进制 逗号 比较符 注释符 宽字节
分类
Out-of-band SQLi
通过数据库服务器使⽤不同的通道 如HTTP请求或DNS查询 来传输数据
报错注入
1 |
|
盲注
1 |
|
一文搞定 MySQL 盲注 | 颖奇 L’Amore (gem-love.com)
堆叠注入
宽字节注入
数据库采用宽字节编码(GB2312、GBK、GB18030、BIG5、Shift_JIS)同时与服务器不一致并且存在转义函数的时候
root %df’ or 1=1 #
原理:在 GBK 编码中,反斜杠的编码是 %5c,在输入 %df’后,单引号前添加反斜杠后形成 %df%5c,而 %df%5c 是繁体字“連”,单引号成功逃逸
注意:使用mysql_real_escape_string修复需要mysql_set_charset指定字符集
二次注入
第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes
或者是借助 get_magic_quotes_gpc
对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据
在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成 SQL 的二次注入
防护
在从数据库或文件中取数据的时候,也要进行转义或者过滤。
写 shell
条件
1.绝对路径且读写
2.数据库权限
3.secure_file_priv非null(可日志绕过)
日志绕过
4.防止命令执行:disable_functions
,禁止了 disable_functions=phpinfo,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
,
但是可以用 dl 扩展执行命令或者 ImageMagick 漏洞
其中 open_basedir
: 将用户可操作的文件限制在某目录下
https://blog.csdn.net/xhy18634297976/article/details/119486812
5.GPC关闭 ||没有转义引号
函数写入
outfile
dumpfile
file_put_content
1.outfile 和 dumpfile 区别?
2.outfile不能用了怎么办?
select unhex('udf.dll hex code') into dumpfile 'c:/mysql/mysql server 5.1/lib/plugin/xxoo.dll';
并且,outfile和dumpfile路径不能hex
可以UDF提权 https://www.cnblogs.com/milantgh/p/5444398.html
日志写入
全局日志:开启后将日志路径指定为网站绝对路径下的一个文件,执行木马语句自动写入,绕过 secure_file_priv=0
提权
MYSQL
udf 提权,mof 提权,启动项提权
获取 root 密码:1.配置文件 2.数据文件 3.爆破
mof 提权
低版本 win 下自动运行的文件,在可写目录下写入执行语句然后 outfile 到 mof 文件(C:\Windows\System32\wbem\MOF
目录下的 nullevt.mof
)中
udf 提权
UDF(User Defined Funtion)用户自定义函数可以调用 dll 文件语句,将恶意 dll 文件导入 myslq 中并执行(linux 是 so 文件)
- 5.1之前在c:\windows\system32
- 5.2之后再MySQL/Lib/Plugin
条件
- 没有开启安全模式(确认secure_file_priv=’’是否为空)
- 拥有增删改查权限(不过滤 into outfile 这种语句)
- shell有写入目录权限
3.启动项提权
4.反弹端口连接提权
绕过
mysql
空格:”%09”, “%0A”, “%0C”, “%0D”
union,where,select:注释符,大小写,内敛注释/*!union*/
where:limit 1,1
limit: group by having 条件
逗号:嵌套查询,union,编码或替代
limit处的逗号:limit 1 offset 1
单引号:需要两个注入点,例如账号输入1\就能将后面的单引号转义再在密码处进行注入
select:盲注,仅限当前表,可堆叠的话赋值变量为16
比较符号:greatest least between and
oracle
空格:特殊字符
大小写替换
拼接chr(10)||chr(13)换行
分块传输
脏数据
SQLserver
0.看有无sa权限,可以利用sp_configure重启xp_cmdshell,导出数据到web目录
1.xp_cmdshell 提权
拥有 shell 且有sytem权限,拿到sa口令后利用 cmdshell 组件默认的 system 权限
1 |
|
2.sp_OACreate 提权
1 |
|
3.Log备份
4.差异备份
5.沙盒
6.Agent Job
防护
数据库:限制数据库权限,(进入数据库的数据和统一)编码
输入:数据类型长度限制,黑白名单
输出:前端控制回显,关闭报错
框架:参数化查询,预编译,ORM(对象关系映射)框架
宽字节注入需要mysql_set_charset(GBK)+mysql_real_escape_string解决
以下:order by开白名单;in配合for each;like用concat
除了order by还是一定要用# 只是需要拼接
其他
GPC
特殊字符
用转义字符防御时,如果遇到数据库的列名或是表名本身就带着特殊字符,应该怎么做
特殊字符包裹(mysql ``)
规范化命名
白名单输入
mysql 版本
5.0 以下没有 information_schema 这个系统表,无法列表名等,只能暴力跑表名。
5.0 以下是多用户单操作,5.0 以上是多用户多操作
PDO
预编译sql模板,sql和参数分两次
区别
1.MySQL ⽀持⼀些独特的SQL语法和函数 ⽐如可以利⽤ LOAD_FILE()来读取服务器⽂件 如果权限设置不当的话
2.SQL Server 有不同的系统存储过程和功能 如可以利⽤ xp_cmdshell来执⾏操作系统命令 如果该功能被启⽤且攻击者拥有⾜够权限的话
MYSQL用户密码表
文件上传
防护:
- JS
- 路径角度:重命名,路径限制
- 文件角度:文件头,文件完整性,黑白名单后缀,mime
绕过
1.各种解析漏洞如
%00:文件名后缀.php%00.jpg(nginx)
0x00:post 传参时
3.图片马
4.条件竞争(先上后检测)
5.文件名改造(替换,大小写,换行,编码,参数污染,异常闭合)
6.请求方式
7.分块参数 + 参数污染
8.长度字段
9.::data
文件包含
输入点限制:禁止动态(白名单),特殊字符限制,目录限制
其他:魔术引号,禁止远程包含
RCE
https://xiaolong22333.top/archives/201/
https://blog.csdn.net/miuzzx/article/details/125148989
https://www.sohu.com/a/208155480_354899
基础知识
利用
1.文件名写入
1 |
|
2.php 临时上传
1 |
|
3.dir 写入
SSRF
探测内网信息,读取内网文件,攻击内网程序
常用协议:http ftp file dict gopher
危害:探测ip端口,读取文件,攻击其他服务,绕waf
功能点:处理文件,邮件,远程url内容,数据库内容
绕过
IP进制转换
ip省略写法,[::]绕过localhost
dns解析
Enclosed alphanumerics字符集
dns重绑定(利用ttl)
协议限制绕过(header,crlf,redirect)
短地址生成
调用其他协议和方法(dict,gophet,http,file,ftp,telnet)
防护
输入:ip转换为整数,urllib.parse,白名单
输出:检测返回内容,统一报错
其他:关闭不必要协议
XXE
常见场景
- pdf 在线解析
- word 在线解析
- 定制协议
- 留言板等
危害
- 读取本地文件
- 执行系统命令
- 探测内网端口
- 攻击内网服务探测内网端口的协议有 gopher file dict,不同语言支持不同的协议
是具体情况而定,file http ftp 是常用的
无回显
java利用file协议
php利用php://filter获取内容后外带
防范
过滤用户的xml数据。禁用外部实体
python 用 lxml 时可以对 resolve_entities 设为 false。或者过滤用户提交的 xml,客户端也可以有 xxe,有的网站会使用 office 打开 docx 进行解析
Java 解析 XML 的常用三方库,如果不禁用 DTD、Entity 都会导致 XXE 漏洞:
javax.xml.stream.XMLStreamReader;
javax.xml.parsers.DocumentBuilderFactory;
跟逻辑设计有关而与语言无关,最好是不要让 XML 作为参数传输或整体结构可被用户篡改。如果一定要使用,至少要禁用 DTD、Entity。
XSS
危害
- 窃取cookies
- 会话劫持
- 植入恶意软件
- 钓鱼攻击
- 修改网页内容
分类
存储型XSS: 你发送一次带XSS代码的请求,以后这个页面的返回包里都会有XSS代码;
反射型XSS: 你发送一次带XSS代码的请求,只能在当前返回的数据包中发现XSS代码; 后端处理
DOM型XSS: 你发送一次带XSS代码的请求,在返回包里压根儿就找不到XSS代码的影子;由JavaScript处理
防护
策略:csp,http-only
输入:限制长度,html实体编码,黑白名单过滤
输出:编码
绕过
- 大小写
- 伪协议
- 分号
- flash
- html5新标签
- 双层标签
1 |
|
其他
输出到href标签
输出到herf中的xss
herf防护:
- 限制输入http开头
- csp策略
CSP策略
浏览器内容安全策略,减少xss攻击
如何绕过Http-only?
HTTP-Only禁止的是JS读取cookie信息,Http Trace攻击就可以将你的Header里的Cookie回显出来,利用Ajax或者flash就可以完成这种攻击;或者配置或者应用程序上可能Bypass,比如header头的泄露
CSRF
危害
- 攻击管理员
- 修改账号密码
- 劫持用户
- CSRF蠕虫
- 拖库
- 路由器攻击
防护
前端
- 避免get操作
- spa验证(从cookie中读取token并验证)
- 二次验证
后端
- 检测referer origin头
- csrf token
浏览器
SOP策略 (同源策略,限制不同协议 域名 端口不可以传递cookie但是会被<form>表单,<img><script>绕过)
SameSite策略(lax strict none)
//CORS策略(跨域资源共享,设置哪些跨域请求可以允许,只能限制读取响应)
其他
DOS类
ACK UDP ICMP FLOOD CC
CC攻击:针对web页面的
LAND攻击:源和请求地址相同
SYN Flood:发送大量syn请求握手包
CORS,SOP,CSP
1 |
|
相比JSONP只能发GET请求,CORS允许任何类型的请求。 CORS请求大致和ajax请求相同,但是在头信息中加上了Origin字段表明请求来自哪个源。如果orgin是许可范围之内的话,服务器返回的响应会多出Acess-Control-Allow-*
的字段
跨域资源共享 CORS 详解 - 阮一峰的网络日志 (ruanyifeng.com)
CORS,JSONP,Websocket都可以用来绕过SOP策略
sop不限制ip 限制的是域名 端口 协议
绕过csp
- 宽松的default-src
- 过多的unsafe-inline unsafe-eval
- 不安全的域名
- jsonp注入
- 跨域
- dom注入
url跳转
1 |
|
dns预加载
1 |
|
link prefetch
标签补全
点击劫持
ARP欺骗
发送虚假的ARP消息到局域网,让其他机器将不属于攻击者的IP绑定到攻击者MAC地址上从而拦截数据包
解决
静态arp
arp防护工具
网络隔离和访问控制
jsonp劫持
x-frame-option
RPO
对于a目录下的apache.php和nginx.php
访问a/..%2f/apache报404错误,但是nginx可以访问
作用
(服务器可以识别..%2f但是浏览器不行,所以..%2f可以在url中跨目录访问index.php。但是在解析js脚本路径的时候无法穿越目录,也就导致了可以利用/a..%2f..%2f..%2fTEST.php来运行根目录下的php文件同时包含a目录下的js)