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)
堆叠注入
宽字节注入
mysql 数据库采用宽字节编码(GB2312、GBK、GB18030、BIG5、Shift_JIS)同时与服务器不一致并且存在转义函数的时候
root %df’ or 1=1 #
原理:在 GBK 编码中,反斜杠的编码是 %5c,在输入 %df’后,单引号前添加反斜杠后形成 %df%5c,而 %df%5c 是繁体字“連”,单引号成功逃逸
防护
预编译
限制长度
加 WAF
通信加密
其中预编译:
因为 sql 注入是因为动态字符串的拼接导致 sql 命令发生改变,然后编译并且执行错误的结果。
而 sql 预处理则是提前“告诉”sql 语法处理器,提前声明并且编译特定格式的 sql 语句,然后将所有用户的输入视为纯字符串参数,最后组成查询语句。
二次注入
第一次进行数据库插入数据的时候,仅仅只是使用了 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
空格:”%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)换行
分块传输
脏数据
提权
MYSQL
udf 提权,mof 提权,启动项提权
前提:system 运行 mysql root 权限 可执行 sql 语句(不过滤 into outfile 这种语句)
获取 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=’’是否为空)
- 拥有增删改查权限
- shell有写入目录权限
3.启动项提权
4.反弹端口连接提权
SQLserver
1.xp_cmdshell 提权
拥有 shell 且有sytem权限,拿到sa口令后利用 cmdshell 组件默认的 system 权限
1 |
|
2.sp_oacreate 提权
1 |
|
3.Log备份
4.差异备份
5.沙盒
6.Agent Job
防护
前端控制回显,限制语句长度,waf,加密,预编译,黑白名单
ORM(对象关系映射)框架,限制数据库权限,关闭报错
其他
GPC
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
- WAF
- 文件内容:文件头,完整性
绕过
1.%00:文件名后缀.php%00.jpg(nginx)
2.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
绕过
IP进制转换
ip省略写法,[::]绕过localhost
dns解析
防护
ip转换为整数
urllib.parse
白名单地址
检验返回内容
SSRF 利用 fastcgi 攻击
之前做 ctf 题也运用过工具,但是不了解原理
https://blog.csdn.net/weixin_39664643/article/details/114977217
基础知识
CGI/FASTCGI/PHP-CGI/PHP-FPM
PHP-CGI 与 PHP-FPM 是一个接口程序,CGI/FASTCGI 是服务器中间件与某个语言后端(如 PHP-FPM)之间的协议,可以将他们与客户端和服务器之间的 http 等协议做类比,网站服务器收到数据之后会根据是否是静态文件来决定需不需要给予 php 解析器来处理
gopher 协议
概念
1 |
|
格式
1 |
|
构造方法
1.抓取一个 tcp 数据包
2.bp url 全编码
3.拼接格式
FASTCGI 协议详解
1 |
|
结构如下,头固定八个字节,body 由头中的 contentLength 决定
漏洞
利用条件
- PHP 版本要高于 5.3.3,才能动态修改 PHP.INI 配置文件(题目环境已满足)
- 知道题目环境中的一个 PHP 文件的绝对路径
- PHP-FPM 监听在本机 9000 端口(题目环境已满足)
FASTCGI 攻击 PHP-FPM
PHP-FPM 默认监听 9000 端口,如果这个端口暴露在公网,则我们可以自己构造 FastCGI 协议,和 FPM 进行通信。
我们可以自己构造 FASTCGI 数据包控制 SCRIPT_FILENAME 来让 PHP-FPM 执行任意文件
利用方案
例子如下
SSRF 攻击 PHP-FPM
利用工具 gopherus 在 ssrf 利用点直接攻击即可,其原理同上
区别
一个是 PHP-FPM 直接暴露在外网会收到我们的攻击,
一个是在内网,需要 ssrf(gopher 协议)进一步利用
XXE
常见场景
- pdf 在线解析
- word 在线解析
- 定制协议
- 留言板等
危害
- 读取本地文件
- 执行系统命令
- 探测内网端口
- 攻击内网服务探测内网端口的协议有 gopher file dict,不同语言支持不同的协议
是具体情况而定,file http ftp 是常用的
防范
过滤用户的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
- 会话劫持
- 植入恶意软件
- 钓鱼攻击
- 修改网页内容
payload
<!-- 空格被过滤 -->
用/代替
<img/src=”1”/onerror=alert(1)>
<!-- 双写绕过 -->
<iimgmg src=1 oonerrornerror=aimglert(1)>
<!-- 大小写绕过 -->
<iMg src=1 oNerRor=alert(1)>
<!-- 利用eval() -->
<img src=1 onerror="a=`aler`;b=`t(1)`;eval(a+b);">
//这里利用evel的拼接
<img src=1 onerror=eval(atob('YWxlcnQoMSk='))>
<!-- 利用location -->
<img src=1 onerror=location='javascript:%61%6C%65%72%74%28%31%29'>
<img src=1 onerror=location='javascript:\x61\x6C\x65\x72\x74\x28\x31\x29'>
<img src=1 onerror=location="javascr"+"ipt:"+"%61%6C%65%72%74%28%31%29">
<!-- 括号被过滤 -->
<img src=1 onerror="window.οnerrοr=eval;throw'=alert\x281\x29';">
<!-- onerror=被过滤 -->
<img src=1 onerror =alert(1)>
<img src=1 onerror
=alert(1)>
<!-- 属性被转换为大写 -->
<img src=1 onerror=alert(1)>
<!-- 编码后被检测 -->
<img src=1 onerror=alert(1&#
x0029;>
分类
存储型XSS: 你发送一次带XSS代码的请求,以后这个页面的返回包里都会有XSS代码;
反射型XSS: 你发送一次带XSS代码的请求,只能在当前返回的数据包中发现XSS代码; 后端处理
DOM型XSS: 你发送一次带XSS代码的请求,在返回包里压根儿就找不到XSS代码的影子;由JavaScript处理
防护
前端过滤字符
后端白名单
http-only
绕过
- 大小写
- 伪协议
- 分号
- flash
- html5新标签
- 双层标签
其他
输出到href标签
payload:javascript:alert(“hello!!!”)
防护:限制http(s)头,进行htmlspecialchars转义
CSP策略
浏览器内容安全策略,减少xss攻击
如何绕过Http-only?
HTTP-Only禁止的是JS读取cookie信息,Http Trace攻击就可以将你的Header里的Cookie回显出来,利用Ajax或者flash就可以完成这种攻击;或者配置或者应用程序上可能Bypass,比如header头的泄露
危害
CSRF
危害
- 攻击管理员
- 修改账号密码
- 劫持用户
- CSRF蠕虫
- 拖库
- 路由器攻击
防护
前端过滤字符
后端白名单
http-only
尽量使用POST
二次验证
其他
DOS类
ACK UDP ICMP FLOOD CC
CC攻击:针对web页面的
LAND攻击:源和请求地址相同
SYN Flood:发送大量syn请求握手包
CORS,JSONP,Websocket都可以用来绕过SOP策略
CORS
相比JSONP只能发GET请求,CORS允许任何类型的请求。 CORS请求大致和ajax请求,但是在头信息中加上了Origin字段表明请求来自哪个源。如果orgin是许可范围之内的话,服务器返回的响应会多出Acess-Control-Allow-*
的字段
跨域资源共享 CORS 详解 - 阮一峰的网络日志 (ruanyifeng.com)
点击劫持
ARP欺骗
发送虚假的ARP消息到局域网,让其他机器将不属于攻击者的IP绑定到攻击者MAC地址上从而拦截数据包
解决
静态arp
arp防护工具
网络隔离和访问控制
jsonp劫持
x-frame-option
SOP与CSP
CORS,JSONP,Websocket都可以用来绕过SOP策略
RPO
对于a目录下的apache.php和nginx.php
访问a/..%2f/apache报404错误,但是nginx可以访问
作用
(服务器可以识别..%2f但是浏览器不行,所以..%2f可以在url中跨目录访问index.php。但是在解析js脚本路径的时候无法穿越目录,也就导致了可以利用/a..%2f..%2f..%2fz2zQAQ.php来运行根目录下的php文件同时包含a目录下的js)