<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://game.etao.net/w/index.php?action=history&amp;feed=atom&amp;title=DNS</id>
	<title>DNS - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://game.etao.net/w/index.php?action=history&amp;feed=atom&amp;title=DNS"/>
	<link rel="alternate" type="text/html" href="https://game.etao.net/w/index.php?title=DNS&amp;action=history"/>
	<updated>2026-05-06T08:56:37Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://game.etao.net/w/index.php?title=DNS&amp;diff=259&amp;oldid=prev</id>
		<title>127.0.0.1：​创建页面，内容为“{{Ctf_Wiki}} &lt;span id=&quot;dns&quot;&gt;&lt;/span&gt; = DNS =  == 简介 ==  &lt;code&gt;DNS&lt;/code&gt; 通常为 &lt;code&gt;UDP&lt;/code&gt; 协议,报文格式  &lt;syntaxhighlight lang=&quot;sh&quot;&gt;+-------------------------------+ | 报文头                         | +-------------------------------+ | 问题 (向服务器提出的查询部分)    | +-------------------------------+ | 回答 (服务器回复的资源记录)      | +-------------------------------+ | 授权 (权威的资源记录)…”</title>
		<link rel="alternate" type="text/html" href="https://game.etao.net/w/index.php?title=DNS&amp;diff=259&amp;oldid=prev"/>
		<updated>2023-07-03T05:55:18Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“{{Ctf_Wiki}} &amp;lt;span id=&amp;quot;dns&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = DNS =  == 简介 ==  &amp;lt;code&amp;gt;DNS&amp;lt;/code&amp;gt; 通常为 &amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; 协议,报文格式  &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;+-------------------------------+ | 报文头                         | +-------------------------------+ | 问题 (向服务器提出的查询部分)    | +-------------------------------+ | 回答 (服务器回复的资源记录)      | +-------------------------------+ | 授权 (权威的资源记录)…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Ctf_Wiki}}&lt;br /&gt;
&amp;lt;span id=&amp;quot;dns&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= DNS =&lt;br /&gt;
&lt;br /&gt;
== 简介 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DNS&amp;lt;/code&amp;gt; 通常为 &amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; 协议,报文格式&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;+-------------------------------+&lt;br /&gt;
| 报文头                         |&lt;br /&gt;
+-------------------------------+&lt;br /&gt;
| 问题 (向服务器提出的查询部分)    |&lt;br /&gt;
+-------------------------------+&lt;br /&gt;
| 回答 (服务器回复的资源记录)      |&lt;br /&gt;
+-------------------------------+&lt;br /&gt;
| 授权 (权威的资源记录)           |&lt;br /&gt;
+-------------------------------+&lt;br /&gt;
| 额外的 (额外的资源记录)         |&lt;br /&gt;
+-------------------------------+&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
查询包只有头部和问题两个部分， &amp;lt;code&amp;gt;DNS&amp;lt;/code&amp;gt; 收到查询包后，根据查询到的信息追加回答信息、授权机构、额外资源记录，并且修改了包头的相关标识再返回给客户端。&lt;br /&gt;
&lt;br /&gt;
每个 &amp;lt;code&amp;gt;question&amp;lt;/code&amp;gt; 部分&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;   0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5&lt;br /&gt;
 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+&lt;br /&gt;
 |                                               |&lt;br /&gt;
 /                     QNAME                     /&lt;br /&gt;
 /                                               /&lt;br /&gt;
 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+&lt;br /&gt;
 |                     QTYPE                     |&lt;br /&gt;
 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+&lt;br /&gt;
 |                     QCLASS                    |&lt;br /&gt;
 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;QNAME&amp;lt;/code&amp;gt; ：为查询的域名，是可变长的，编码格式为：将域名用.号划分为多个部分，每个部分前面加上一个字节表示该部分的长度，最后加一个 &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; 字节表示结束&lt;br /&gt;
* &amp;lt;code&amp;gt;QTYPE&amp;lt;/code&amp;gt; ：占 &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; 位，表示查询类型，共有 &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; 种，常用值有：&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; ( &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; 记录，请求主机 &amp;lt;code&amp;gt;IP&amp;lt;/code&amp;gt; 地址)、&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ( &amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt; ，请求授权 &amp;lt;code&amp;gt;DNS&amp;lt;/code&amp;gt; 服务器)、&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; ( &amp;lt;code&amp;gt;CNAME&amp;lt;/code&amp;gt; 别名查询)&lt;br /&gt;
&lt;br /&gt;
== 例题 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;题目：&amp;lt;code&amp;gt;BSides San Francisco CTF 2017&amp;lt;/code&amp;gt; ： &amp;lt;code&amp;gt;dnscap.pcap&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
我们通过 &amp;lt;code&amp;gt;wireshark&amp;lt;/code&amp;gt; 打开发现全部为 &amp;lt;code&amp;gt;DNS&amp;lt;/code&amp;gt; 协议,查询名为大量字符串&amp;lt;code&amp;gt;([\w\.]+)\.skullseclabs\.org&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
我们通过 &amp;lt;code&amp;gt;tshark -r dnscap.pcap -T fields -e dns.qry.name &amp;amp;gt; hex&amp;lt;/code&amp;gt;提取后，利用 &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt; 转码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import re&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
find = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
with open(&amp;#039;hex&amp;#039;,&amp;#039;rb&amp;#039;) as f:&lt;br /&gt;
    for i in f:&lt;br /&gt;
        text = re.findall(r&amp;#039;([\w\.]+)\.skull&amp;#039;,i)&lt;br /&gt;
        if text:&lt;br /&gt;
            find += text[0].replace(&amp;#039;.&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
print find&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
我们发现了几条关键信息：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Welcome to dnscap! The flag is below, have fun!!&lt;br /&gt;
Welcome to dnscap! The flag is below, have fun!!&lt;br /&gt;
!command (sirvimes)&lt;br /&gt;
...&lt;br /&gt;
IHDR&lt;br /&gt;
gAMA&lt;br /&gt;
bKGD&lt;br /&gt;
        pHYs&lt;br /&gt;
IHDR&lt;br /&gt;
gAMA&lt;br /&gt;
bKGD&lt;br /&gt;
        pHYs&lt;br /&gt;
tIME&lt;br /&gt;
IDATx&lt;br /&gt;
...&lt;br /&gt;
2017-02-01T21:04:00-08:00&lt;br /&gt;
IEND&lt;br /&gt;
console (sirvimes)&lt;br /&gt;
console (sirvimes)&lt;br /&gt;
Good luck! That was dnscat2 traffic on a flaky connection with lots of re-transmits. Seriously,&lt;br /&gt;
Good luck! That was dnscat2 traffic on a flaky connection with lots of re-transmits. Seriously, d[&lt;br /&gt;
good luck. :)+&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;flag&amp;lt;/code&amp;gt; 确实包含在其中,但是有大量重复信息,一是应为&amp;lt;code&amp;gt;question&amp;lt;/code&amp;gt; 。在 &amp;lt;code&amp;gt;dns&amp;lt;/code&amp;gt; 协议中查询和反馈时都会用到，&amp;lt;code&amp;gt; -Y &amp;amp;quot;ip.src == 192.168.43.91&amp;amp;quot;&amp;lt;/code&amp;gt;进行过滤后发现还是有不少重复部分。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;%2A}&lt;br /&gt;
%2A}&lt;br /&gt;
%2A}q&lt;br /&gt;
%2A}x&lt;br /&gt;
%2A}&lt;br /&gt;
IHDR&lt;br /&gt;
gAMA&lt;br /&gt;
bKGD&lt;br /&gt;
        pHYs&lt;br /&gt;
tIME&lt;br /&gt;
IDATx&lt;br /&gt;
HBBH&lt;br /&gt;
CxRH!&lt;br /&gt;
C1%t&lt;br /&gt;
ceyF&lt;br /&gt;
i4ZI32&lt;br /&gt;
rP@1&lt;br /&gt;
ceyF&lt;br /&gt;
i4ZI32&lt;br /&gt;
rP@1&lt;br /&gt;
ceyF&lt;br /&gt;
i4ZI32&lt;br /&gt;
rP@1&lt;br /&gt;
ceyF&lt;br /&gt;
i4ZI32&lt;br /&gt;
rP@1&amp;lt;/pre&amp;gt;&lt;br /&gt;
根据发现的 &amp;lt;code&amp;gt;dnscat&amp;lt;/code&amp;gt; 找到 https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md 这里介绍了 &amp;lt;code&amp;gt;dnscat&amp;lt;/code&amp;gt; 协议的相关信息,这是一种通过 &amp;lt;code&amp;gt;DNS&amp;lt;/code&amp;gt; 传递数据的变种协议,题目文件中应该未使用加密,所以直接看这里的数据块信息&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MESSAGE_TYPE_MSG: [0x01]&lt;br /&gt;
(uint16_t) packet_id&lt;br /&gt;
(uint8_t) message_type [0x01]&lt;br /&gt;
(uint16_t) session_id&lt;br /&gt;
(uint16_t) seq&lt;br /&gt;
(uint16_t) ack&lt;br /&gt;
(byte[]) data&amp;lt;/pre&amp;gt;&lt;br /&gt;
在&amp;lt;code&amp;gt;qry.name&amp;lt;/code&amp;gt;中去除其余字段,只留下 &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; 快,从而合并数据,再从 &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; 进制中检索&amp;lt;code&amp;gt;89504e.....6082&amp;lt;/code&amp;gt;提取&amp;lt;code&amp;gt;png&amp;lt;/code&amp;gt;,得到 &amp;lt;code&amp;gt;flag&amp;lt;/code&amp;gt; 。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import re&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
find = []&lt;br /&gt;
&lt;br /&gt;
with open(&amp;#039;hex&amp;#039;,&amp;#039;rb&amp;#039;) as f:&lt;br /&gt;
    for i in f:&lt;br /&gt;
        text = re.findall(r&amp;#039;([\w\.]+)\.skull&amp;#039;,i)&lt;br /&gt;
        if text:&lt;br /&gt;
            tmp =  text[0].replace(&amp;#039;.&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
            find.append(tmp[18:])&lt;br /&gt;
last = []&lt;br /&gt;
&lt;br /&gt;
for i in find:&lt;br /&gt;
    if i not in last:&lt;br /&gt;
        last.append(i)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print  &amp;#039;&amp;#039;.join(last)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;flag&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[File:./figure/dnscat_flag.png|dnscat_flag]]&lt;br /&gt;
&lt;br /&gt;
== 相关题目 ==&lt;br /&gt;
&lt;br /&gt;
* [https://mrpnkt.github.io/2016/icectf-2016-search/ IceCTF-2016:Search]&lt;br /&gt;
* [https://github.com/susers/Writeups/blob/master/2017/EIS/Misc/DNS%20101/Write-up.md EIS-2017:DNS 101]&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/lisijie/homepage/blob/master/posts/tech/dns%E5%8D%8F%E8%AE%AE%E8%A7%A3%E6%9E%90.md&lt;br /&gt;
* https://xpnsec.tumblr.com/post/157479786806/bsidessf-ctf-dnscap-walkthrough&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>
	</entry>
</feed>