<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>triage &#8211; PT ESC</title>
	<atom:link href="/tag/triage/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Wed, 30 Sep 2026 17:50:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>/wp-content/uploads/2026/09/cropped-cropped-large_icon-32x32.png</url>
	<title>triage &#8211; PT ESC</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Где искать сетевые индикаторы компрометации на Windows?</title>
		<link>/where-to-look-for-network-indicators-of-compromise-on-windows/</link>
		
		<dc:creator><![CDATA[oUth0R]]></dc:creator>
		<pubDate>Mon, 12 Aug 2024 17:03:49 +0000</pubDate>
				<category><![CDATA[Incident Response]]></category>
		<category><![CDATA[dfir]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[hunt]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[triage]]></category>
		<category><![CDATA[win]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%b3%d0%b4%d0%b5-%d0%b8%d1%81%d0%ba%d0%b0%d1%82%d1%8c-%d1%81%d0%b5%d1%82%d0%b5%d0%b2%d1%8b%d0%b5-%d0%b8%d0%bd%d0%b4%d0%b8%d0%ba%d0%b0%d1%82%d0%be%d1%80%d1%8b-%d0%ba%d0%be%d0%bc%d0%bf%d1%80%d0%be/</guid>

					<description><![CDATA[Где искать сетевые индикаторы компрометации на Windows? Например, в кэше DNS 💡 Кэш DNS — механизм кэширования записей соответствия доменных имен IP-адресам (и не только). Он нужен для того, чтобы система каждый…]]></description>
										<content:encoded><![CDATA[<p><strong>Где искать сетевые индикаторы компрометации на Windows?</strong> Например, в кэше DNS 💡</p>
<p>Кэш DNS — механизм кэширования записей соответствия доменных имен IP-адресам (и не только). Он нужен для того, чтобы система каждый раз не обращалась к DNS-серверам за этой информацией. Посмотреть содержимое кэша можно с помощью команды <code>ipconfig /displaydns</code>, <strong>но не спешите это делать</strong>.</p>
<p>У каждой DNS-записи есть параметр TTL (time to live), который определяет, как долго запись остается действительной. По истечении TTL запись «протухает» — и система вновь вынуждена запрашивать данные у DNS-сервера.</p>
<p>Windows хранит перечень кэшированных доменов в виде связного списка, а запрос содержимого кэша состоит из двух этапов: на первом этапе с помощью системного вызова <code>DnsGetCacheDataTable</code> формируется полный список кэшированных доменов, затем для каждого домена из списка происходит резолв из кэша с помощью системного вызова <code>DnsQuery</code> с флагом <code>DNS_QUERY_NO_WIRE_QUERY</code>. Таким образом для каждого кэшированного домена из кэша извлекаются соответствующие ресурсные записи: A, AAAA, TXT и так далее.</p>
<p>😐 <strong>Здесь-то и кроется подвох</strong>. Если домен содержится в списке кэшированных, а его TTL истекло, то команда <code>ipconfig /displaydns</code> не только не покажет такой домен в списке, но и удалит его из списка кэшированных доменов, тем самым уничтожив потенциальные улики.</p>
<p>Чтобы получить полный список кэшированных доменов (даже «протухших»), можно использовать вызов <code>DnsGetCacheDataTable</code>. Ниже приведен скрипт для <code>PowerShell</code>, реализующий эту функцию:</p>

<pre class="wp-block-code"><span><code class="hljs language-powershell">
<span class="hljs-built_in">Add-Type</span> <span class="hljs-literal">-TypeDefinition</span> <span class="hljs-string">@"
using System;
using System.Runtime.InteropServices;

namespace DnsCache
{
    &#91;StructLayout(LayoutKind.Sequential)]
    public struct DnsCacheEntry
    {
        public IntPtr PNext;
        public IntPtr Name;
        public ushort Type;
        public ushort DataLength;
        public uint Flags;
    }

    public class Program
    {

        &#91;DllImport("dnsapi.dll")]
        public static extern void DnsGetCacheDataTable(ref DnsCacheEntry entry);
        public static void GetCache()
        {
            DnsCacheEntry a = new DnsCacheEntry();
            DnsGetCacheDataTable(ref a);
            while (true)
            {
                Console.WriteLine("RR name: {0}", Marshal.PtrToStringAuto(a.Name));
                if (a.PNext == IntPtr.Zero) break;
                a = Marshal.PtrToStructure&lt;DnsCacheEntry&gt;(a.PNext);
            }

        }
    }
}
"@</span>
&#91;<span class="hljs-type">DnsCache.Program</span>]::GetCache()
</code></span></pre>

<p>Попробуйте выполнить этот скрипт, а потом сравните с результатами вызова <code>ipconfig /displaydns</code> (именно в таком порядке).</p>
<p>Happy hunting!</p>
<p><span class="hashtag">#tips</span> <span class="hashtag">#hunting</span> <span class="hashtag">#win</span> <span class="hashtag">#dfir</span> <span class="hashtag">#dotnet</span> <span class="hashtag">#triage</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
