目录
Windows
Linux
Linux提权方法
内核漏洞提权
SUID提权
计划任务提权
sudo滥用提权
配置错误之利用/etc/passwd提权
漏洞
渗透步骤
waf绕过方法
目录扫描绕过waf
手工注入绕过waf
sqlmap注入绕过waf
编写sqlmap绕过waf脚本
过waf一句话编写讲解
菜刀连接绕过waf
webshell上传绕过waf
提权绕过waf
SQL注入漏洞
什么是SQL
常用的SQL语句
什么是SQL注入
SQL注入漏洞的原理
SQL注入危害
SQL注入探测
注入中的数据类型
SQL注入分类
SQL注入的方式(利用)
SQL注入防御
数据库提权
SQL注入时and、or等字符被过滤了怎么办
跨站脚本攻击漏洞(xss)
xss概述
xss的产生
xss的分类
xss的危害
xss漏洞探测
xss防御
文件上传漏洞
什么是文件上传漏洞
产生原理
漏洞危害
文件上传漏洞利用
文件上传漏洞绕过
文件上传漏洞防御
文件包含漏洞
什么是文件包含漏洞
PHP文件包含函数(4个)
产生文件包含漏洞的条件(文件包含环境说明)
文件包含漏洞危害
文件包含漏洞利用:
PHP伪协议
包含日志文件
包含SESSION
包含/pros/self/environ
其他包含姿势
文件包含漏洞绕过
文件包含漏洞防御
任意文件下载漏洞
文件下载功能
什么是任意文件下载漏洞
任意文件下载漏洞利用
任意文件下载漏洞利用(Web应用)
任意文件下载漏洞挖掘
任意文件下载漏洞防御
身份认证攻击
什么是身份认证技术
什么是身份认证攻击
框架漏洞(cms漏洞)
ThinkPHP
泛微OA
致远OA
ActiveMq
Solr
Shiro
fastjson
Struts2
解析漏洞(常见中间件和主机漏洞)
Weblogic-反序列化
Jboss反序列化
WebSphere反序列化
IIS-解析漏洞
Nginx-解析漏洞
Apache-解析漏洞
Apache Tomcat 任意文件上传漏洞
常见系统漏洞
代码与命令执行漏洞
1.代码执行漏洞
什么是代码执行漏洞
php代码执行漏洞的常用函数
2.命令执行漏洞
什么是命令执行漏洞
php命令执行漏洞的常用函数
3.命令执行漏洞绕过
4.命令执行漏洞案例
5.代码与命令执行漏洞防御
客户端请求伪造(csrf)
原理
一次CSRF攻击的过程中,受害者需要依次完成两个步骤
CSRF漏洞危害
防御方法
服务端请求伪造漏洞(ssrf)
什么是SSRF
SSRF可以做什么
如何查看是否存在SSRF
1.SSRF利用
SSRF常见利用协议
SSRF+REDIS写入WEBSHEEL
SSRF绕过
SSRF进阶利用
SSRF防御
反序列化漏洞
什么是序列化和反序列化
php魔术方法
应急响应
勒索
挖矿
webshell
Linux操作系统的内核是该系列操作系统的“灵魂大脑”,一旦出现安全隐患情况下,攻击者会很对这些安全隐患加以恶意利用,其中Linux内核漏洞是目前攻击者最为热爱的漏洞之一,内核漏洞的利用通常会以“上帝视角”,也就是所谓的操作系统最高权限的形式为攻击者提供对目标系统的超级用户访问权限。比如经常提到的 传送门——> linux提权—脏牛提权:
1.uname -a 命令,查看内核版本
2.上传自动搜索提权漏洞的脚本
SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了:
查看具有root用户权限的SUID文件:find / -perm -u=s -type f 2>/dev/null
如果计划任务以root权限运行,计划任务中的脚本其他用户有写入的权限,或者脚本所属组为其他用户,则可以进行计划任务提权:
1. 查看计划任务:cat /etc/crontab
2. 查看文件属于哪个用户是否有写入权限
如果“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 其他用户有写入权限,则可以通过写入一个uid为0的用户获取root权限。
第一:修改客户端ip
第二:减慢扫描速度
第三:通过代理欺骗waf
搭建测试环境
了解绕过原理
熟悉常见绕过构造语句
构造绕过测试语句
1.大小绕过
2.使用sql注释
3.使用url编码
4.使用空字节 :一些过滤器在处理输入时,如果碰到空字节就会停止处理 我们通常也会利用空字节进行绕过过滤器。
5.使用嵌套过剥离
6.使用非标准入口点
7.避开自定义过滤器
SQL 是结构化查询语言(Structured Query Language),一种用于存储、操作或者检索存储在关系型数据库中数据的计算机语言。
虽然SQL是一个 ANSI(American National Standard Institute,美国国家标准协会)标准,是关系型数据库系统(Relation Database System)的标准语言,但是仍然存在着多种不同版本的 SQL 语言。
SQL注入其实就是将SQL语句插入到用户提交的可控参数中,改变原有的SQL语义结构,从而执行攻击者所预期的结果。
开发人员针对代码编写开发web应用程序过程中,未对攻击者输入的可控参数的合法性进行有效的过滤和判断,从而造成攻击者利用可控的恶意参数带入数据库中执行,从而因造成了恶意的SQL语句对数据库执行的任意操作行为。
1.判断数据库类型
2.寻找SQL注入点
寻找与数据库交互的可控参数
3.确认注入点
终止式
终止式注入是攻击者在注入SQL代码后,将原有的查询代码全部注释掉。
堆叠
堆叠查询是指可以在单次数据库连接中,执行多个查询序列。简单的来说就是执行多条语句。
确认注入点的过程还需要区分可控参数在SQL语句中的数据类型。
根据回显类型分类
回显:直接回显、报错回显
盲注:时间盲注、布尔盲注
带外:oob带外通道技术
万能密码
联合注入
什么是UNION
UNION用于合并两个SELECT的结果集。
联合注入流程
报错注入
利用页面返回的MySQL报错信息,将想得到的数据通过报错信息带出。 报错注入的利用方式和MySQL版本有很大的关联。 Updatexml、extractvalue、rand()等
盲注
当不能直接通过显示数据来获得数据库数据时,需要使用其他方式判断或者尝试,这个过程就是盲注。
基于布尔盲注(根据页面返回内容判断)
基于时间盲注(根据页面响应时间判断)(延迟注入)
宽字节注入
宽字节定义:如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节。
原理:宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。在使用PHP连接MySQL的时候,当设置“character_set_client = gbk”时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入
前提:
DNSLOG
在无直接回显数据的情况下,我们可以通过DNS解析来传递数据。在MySQL中,我们可以使用LOAD_FILE()来让服务器发送DNS解析。
Mysql数据库提权方法:udf、mof
SQL server数据库提权:udf
字母被注释(or、and等)
数字被注释(如:1、2等)
使用浮点数
符号被注释(如:<、>等)
XSS全称跨站脚本(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS,比较合适的方式应该叫做跨站脚本攻击。
跨站脚本攻击是一种常见的web安全漏洞,它主要是指攻击者可以在页面中插入恶意脚本代码,当受害者访问这些页面时,浏览器会解析并执行这些恶意代码,从而达到窃取用户身份/钓鱼/传播恶意代码等行为。
XSS的本质其实是一种“HTML”注入,用户的数据被当做HTML代码执行,从而混淆了原本的语义,产生了新的语义。
反射型
反射型XSS是通过提交内容,然后不经过数据库,直接反射回显在页面上
存储型
存储型XSS也叫持久型XSS,存储的意思就是Payload是有经过存储的,当一个页面存在存储型XSS的时候,XSS注入成功后,那么每次访问该页面都将触发XSS,如留言板
DOM型
其他类型 MXSS
寻找WEB应用上的输入与输出口。例如网站输入框、URL参数等等。
在可控参数中提交等攻击字符串,观察输出点是否对这些攻击字符串进行转义、过滤、消毒等处理。 如果原样输出,那么必然存在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是chr(0),它不是空格,是NULL,空字符。 当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当做结束符,后面的数据直接忽略,这就导致漏洞产生的原因。
在文件上传中,利用%00截断,在文件扩展名验证时,是取文件的扩展名来做验证,但是最后文件保存在本地时,%00会截断文件名,只保存%00之前的内容。
白名单
1.从操作系统特性来思考
利用window对于文件和文件名的限制,以下字符放在结尾时,不符合操作系统的命名规范,在最后生成文件时,字符会被自动去除。
2.服务器解析漏洞来思考
apache解析文件规则是从右到左。例如shel.php.gix.ccc,apache会先识别ccc,ccc不被识别,则识别gix,以此类推,最后会被识别为php来运行。
目录解析
目录名为.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文件执行。
PHP+nginx默认是以cgi的方式去运行,当用户配置不当,会导致任意文件被当作php去解析。 利用条件:以FastCGI运行、cgi.fix_pathinfo=1(全版本PHP默认为开启),例如如果满足上述条件,当你访问url/shell.jpg/shell.php时,shell.jpg会被当作php去执行。
影响版本: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中文件上传的CVE,看文件上传功能是否是编辑器提供,如果是寻找这个版本编辑器是否存在漏洞。
3.其他姿势来思考
服务器文件内容验证:
1.文件头
图片格式往往不是根据文件后缀名去做判断的。文件头是文件开头的一段二进制,不同的图片类型,文件头是不同的。文件头又称文件幻数。
常见文件幻数:
2.文件加载检测
通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入。
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 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。
1.php://input
php://input可以获取POST的数据流。当它与包含函数结合时,php://input流会被当作php文件执行。从而导致任意代码执行。
2.php://filter
php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。
3.zip://
zip://可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。
4.phar://
phar://有点类似zip://同样可以导致 任意代码执行。 phar://中相对路径和绝对路径都可以使用
5.data://
data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。
WEB服务器一般会将用户的访问记录保存在访问日志中。那么我们可以根据日志记录的内容,精心构造请求,把PHP代码插入到日志文件中,通过文件包含漏洞来执行日志中的PHP代码。
利用条件:对日志文件可读,知道日志文件存储目录
一般情况下日志存储目录会被修改,需要读取服务器配置文件(httpd.conf,nginx.conf…..)或者根据phpinfo()中的信息来得知
日志记录的信息都可以被调整,比如记录报错的等级,或者内容格式。
可以先根据尝试包含到Session文件,在根据文件内容寻找可控变量,在构造payload插入到文件中,最后包含即可。
利用条件:找到Session内的可控变量、Session文件可读写,并且知道存储路径
默认存储路径:/tmp/、/tmp/sessions/、/var/lib/php5/、/var/lib/php/
session文件格式: sess_[your phpsessid value]
proc/self/environ中会保存user-agent头。如果在user-agent中插入php代码,则php代码会被写入到environ中。之后再包含它,即可。
利用条件:
包含临时文件、包含SMTP(日志)、包含xss、包含上传文件
前缀绕过
后缀绕过
许多网站都具备文件下载功能,某些文件下载功能实现过程是,根据参数filename的值,获得该文件在网站上的绝对路径,读取文件内容,发送给客户端进行下载。
文件下载漏洞是指文件下载功能没有对下载的文件类型、目录做合理严谨的过滤,导致用户可以下载服务器上的任意文件。
PHP
asp
aspx
JSP
应用、系统配置文件
漏洞发现
漏洞验证
案例
在计算机网络中确认操作者身份的过程而产生的有效解决方法。
为了使用各种办法通过身份认证,突破作为防护网络资产的第一道关口,身份认证攻击在渗透测试中有着举足轻重的作用。
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存在任意文件上传漏洞,在/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截断)。
可以构造如下表单完成上传:
致远OA存在远程代码执行。
漏洞描述:该系统的漏洞点在于致远OA-A8系统的Servlet接口暴露,安全过滤处理措施不足,使得用户在无需认证的情况下实现任意文件上传。攻击者利用该漏洞,可在未授权的情况下,远程发送精心构造的网站后门文件,从而获取目标服务器权限,在目标服务器上执行任意代码,风险极大。
影响版本: 致远A8-V5协同管理软件 V6.1sp1 、致远A8+协同管理软件V7.0、V7.0sp1、V7.0sp2、V7.0sp3 、致远A8+协同管理软件V7.1
修复方案:升级oa版本,安装漏洞补丁。
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存在远程命令执行。
漏洞描述:攻击者可利用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,修改配置
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是一个Java库,可用于将Java对象转换成其JSON表示。它还可以用来将JSON字符串转换为等价的Java对象。Fastjson可以处理任意的Java对象,包括本身没有源代码的预先存在的对象。
fastjson存在反序列化漏洞。
漏洞描述:Fastjson提供了反序列化的功能,攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行
漏洞版本:Fastjson<=1.2.47
漏洞修复:升级到最新版本
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是一个基于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 AS)是基于Java的应用程序服务器。它是一个免费的软件(或开源)服务器,可用于Java支持的任何操作系统
漏洞描述:Jboss反序列化为Java反序列化错误类型,存在于jboss的HttpInvoker组件中的ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。攻击者可以利用漏洞在系统上进行任意命令执行,获得服务器的权限。
漏洞编号:CVE-2017-12149
影响版本:5.x、6.x
漏洞修复:升级到最新版本
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
漏洞修复:更新安全补丁,升级至最新版本
目录解析漏洞(/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自动消除
畸形解析漏洞(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
文件名解析漏洞
用户配置不当,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脚本来执行
#2:这里代码的意思可以让 .jpg后缀名文件格式的文件名以php格式解析 AddType application/x-httpd-php .jpg
永恒之蓝(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日才修复)
漏洞修复:升级内核版本
代码执行漏洞是由于WEB应用程序过滤不严谨,导致用户可以通过请求将代码注入到WEB应用进行执行。
例如:
eval()与assert()导致的代码执行漏洞大多原因是因为载入缓存或者模版以及对变量的处理不严格导致。例如直接将一个外部可控的参数拼接到模版里面,然后调用这两个函数去当作PHP代码执行。
例如:
1. mixed eval( string $code) -把字符串 code 作为PHP代码执行。
2. bool assert ( mixed $assertion [, string $description ] )
PHP的特性原因,PHP的函数名称可以由字符串进行拼接。基于该类写法变形出来的各种异性,经常被当作Web后门使用。
命令执行漏洞是指可以执行系统或者应用指令(CMD命令或者bash命令)的漏洞,主要是由于WEB应用基于一些函数的参数过滤不严导致。
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()函数当作参数去运行,并返回运行的结果
命令操作符
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 黑名单关键字绕过 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通道带出数据 CSRF漏洞是因为web应用程序在用户进行敏感操作时,如修改账号密码、添加账号、转账等,没有校验表单token或者http请求头中的referer值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。 1、CSRF漏洞会导致受害人在不知情的情况下向论坛发帖子、订阅邮件列表、网购或股票交易,或变更用户名或口令。对受到防火墙保护的所有web应用程序而言,CSRF攻击都能绕过防火墙攻击web应用。 2、CSRF漏洞还可以和XSS等漏洞结合使用,从而进一步加大了该漏洞的危害。 3、伪造HTTP请求进行未授权操作: 4、作为其他攻击向量的辅助攻击手法,比如配合XSS。 5、传播CSRF蠕虫。 服务端请求伪造攻击(Server-side Request Forgery)简称SSRF,当WEB应用提供了从其他服务器获取数据的功能,但没有对远程服务器地址和远程服务器返回的信息进行合理的验证和过滤,就可能存在这种服务端请求伪造。(可以利用发起网络请求的服务,当作跳板来攻击其他服务) (能够对外发起网络请求的地方,就可能存在SSRF) Redis 任意文件写入漏洞现在非常常见,很多情况下内网中都会存在 root 权限运行的 Redis 服务,可以利用SSRF 来穿透内网,在利用 Gopher 协议攻击内网中的 Redis。 利用各大短地址生成平台,生成短的地址,绕过长度限制 log time 其实不只在sql注入和命令执行中有时间盲注,ssrf也有,端口开放不开放产生的时间延迟说不定也有规律可寻 dns rebinding php程序为了保存和转储对象,提供了序列化的方法。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服务器都中招了(若只有个别的主机,要先隔离) 找台主机上机——>看爆破日志——> 排查步骤(有安全设备) 问服务器类型——>看是否有本地的远程连接或绘画连接——>隔离木马——>查看中间件的日志——>看木马上传的时间——>提供建议4.命令执行漏洞案例
5.代码与命令执行漏洞防御
客户端请求伪造(csrf)
原理
一次CSRF攻击的过程中,受害者需要依次完成两个步骤
CSRF漏洞危害
防御方法
服务端请求伪造漏洞(ssrf)
什么是SSRF
SSRF可以做什么
如何查看是否存在SSRF
1.SSRF利用
SSRF常见利用协议
SSRF+REDIS写入WEBSHEEL
SSRF绕过
SSRF进阶利用
SSRF防御
反序列化漏洞
什么是序列化和反序列化
php魔术方法
应急响应
勒索
挖矿
webshell