1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-30 03:19:02 +00:00

Add some tests for dns.lua

This commit is contained in:
dmiller
2023-06-06 15:10:48 +00:00
parent 5ee110f3a5
commit 4a4253cc95

View File

@@ -923,6 +923,7 @@ end
-- @return Decoded domain, or <code>nil</code> on error.
function decStr(data, pos)
local function dec(data, pos, limit)
assert(pos > 0)
local partlen
local parts = {}
local part
@@ -1553,4 +1554,285 @@ end
test_suite = unittest.TestSuite:new()
test_suite:add_test(unittest.equal(encodeFQDN("test.me.com"), "\x04test\x02me\x03com\0"), "encodeFQDN")
local tests = { {
pkt = string.char(0x92, 0xdc, -- Trsnsaction ID
0x81, 0x80, -- Flags
0x00, 0x01, -- Questions count
0x00, 0x01, -- Answers RRs count
0x00, 0x00, -- Authorities RRs count
0x00, 0x00, -- Additionals RRs count
0x06, -- Label length <-- [12]
0x73, 0x63, 0x61, 0x6e, 0x6d, 0x65, -- "scanme"
0x04, -- Label length
0x6e, 0x6d, 0x61, 0x70, -- "nmap"
0x03, -- Label length
0x6f, 0x72, 0x67, -- "org"
0x00, -- Name terminator
0x00, 0x01, -- A
0x00, 0x01, -- CLASS_IN
0xc0, 0x0c, -- Compressed name pointer to offset 12
0x00, 0x01, -- A
0x00, 0x01, -- CLASS_IN
0x00, 0x00, 0x0e, 0x0f, -- TTL 3599
0x00, 0x04, -- Record Length
0x2d, 0x21, 0x20, 0x9c ), -- 45.33.32.156
qname = "scanme.nmap.org",
qtype = "A",
ans = {"ip", "45.33.32.156"}
},
{
pkt = string.char(
0x08, 0xf2, -- ID
0x81, 0x80, -- Flags
0x00, 0x01, -- Questions count
0x00, 0x01, -- Answers RRs count
0x00, 0x00, -- Authorities RRs count
0x00, 0x00, -- Additionals RRs count
0x03, -- Label length
0x31, 0x35, 0x36, -- "156"
0x02, -- Label length
0x33, 0x32, -- "32"
0x02, -- Label length
0x33, 0x33, -- "33"
0x02, -- Label length
0x34, 0x35, -- "45"
0x07, -- Label length
0x69, 0x6e, 0x2d, 0x61, 0x64, 0x64, 0x72, -- "in-addr"
0x04, -- Label length
0x61, 0x72, 0x70, 0x61, -- "arpa"
0x00, -- Name terminator
0x00, 0x0c, -- PTR
0x00, 0x01, -- CLASS_IN
0xc0, 0x0c, -- Compressed name pointer to offset 12
0x00, 0x0c, -- PTR
0x00, 0x01, -- CLASS_IN
0x00, 0x01, 0x51, 0x78, -- TTL 86392
0x00, 0x11, -- Record Length
0x06, -- Label length
0x73, 0x63, 0x61, 0x6e, 0x6d, 0x65, -- "scanme"
0x04, -- Label length
0x6e, 0x6d, 0x61, 0x70, -- "nmap"
0x03, -- Label length
0x6f, 0x72, 0x67, -- "org"
0x00), -- Name terminator
qname = "156.32.33.45.in-addr.arpa",
qtype = "PTR",
ans = {"domain", "scanme.nmap.org"}
},
}
for _, t in ipairs(tests) do
local decoded = decode(t.pkt)
local q = decoded.questions[1]
local a = decoded.answers[1]
test_suite:add_test(unittest.equal(q.dname, t.qname), "decode question name")
test_suite:add_test(unittest.equal(q.dtype, types[t.qtype]), "decode question type")
test_suite:add_test(unittest.equal(a[t.ans[1]], t.ans[2]), "decode answer")
end
local axfr = stdnse.fromhex(
"dead840000010032000000000c7a\z
6f6e657472616e73666572026d650000\z
fc0001c00c0006000100001c20002f06\z
6e737a746d310464696769056e696e6a\z
610005726f62696ec034785908810002\z
a300000003840012750000000e10c00c\z
000d00010000012c00190d436173696f\z
2066782d373030470a57696e646f7773\z
205850c00c001000010000012d004544\z
676f6f676c652d736974652d76657269\z
6669636174696f6e3d74795032384a37\z
4a41554841396677327348584d676343\z
4330493658426d6d6f56693034566c4d\z
65777841c00c000f000100001c200016\z
0000054153504d58014c06474f4f474c\z
4503434f4d00c00c000f000100001c20\z
0009000a04414c5431c0e0c00c000f00\z
0100001c200009000a04414c5432c0e0\z
c00c000f000100001c20001600140641\z
53504d58320a474f4f474c454d41494c\z
c0efc00c000f000100001c20000b0014\z
064153504d5833c133c00c000f000100\z
001c20000b0014064153504d5834c133\z
c00c000f000100001c20000b00140641\z
53504d5835c133c00c0001000100001c\z
20000405c4690ec00c0002000100001c\z
200002c02dc00c0002000100001c2000\z
09066e737a746d32c0340f5f61636d65\z
2d6368616c6c656e6765c00c00100001\z
0000012d002c2b364f6130356862554a\z
39785373765979377041705176774355\z
535347677876726264697a6a65504573\z
5a49045f736970045f746370c00c0021\z
0001000036b0001b0000000013c40377\z
77770c7a6f6e657472616e7366657202\z
6d650002313403313035033139360135\z
07494e2d414444520441525041c22000\z
0c000100001c200002c21c0c61736664\z
6261757468646e73c220001200010000\z
1edc001c0001086173666462626f780c\z
7a6f6e657472616e73666572026d6500\z
c2740001000100001c2000047f000001\z
0b6173666462766f6c756d65c27d0012\z
000100001e78001c0001086173666462\z
626f780c7a6f6e657472616e73666572\z
026d65000f63616e62657272612d6f66\z
66696365c2c10001000100001c200004\z
ca0e51e607636d6465786563c2c10010\z
00010000012c0005043b206c7307636f\z
6e74616374c2c10010000100278d0000\z
646352656d656d62657220746f206361\z
6c6c206f7220656d61696c2050697070\z
61206f6e202b34342031323320343536\z
37383930206f72207069707061407a6f\z
6e657472616e736665722e6d65207768\z
656e206d616b696e6720444e53206368\z
616e6765730964632d6f6666696365c2\z
c10001000100001c2000048fe4b58408\z
6465616462656566c2c1001c00010000\z
1c210010deadbeaf0000000000000000\z
00000000026472c2c1001d0001000001\z
2c0010001216138b728cee7fa5c44a00\z
98968003445a43c2c10010000100001c\z
200008074162436445664705656d6169\z
6cc2c100230001000008ae0038000100\z
010150094532552b656d61696c000565\z
6d61696c0c7a6f6e657472616e736665\z
72026d650c7a6f6e657472616e736665\z
72026d6500c3f90001000100001c2000\z
044a7dce1a0548656c6c6fc432001000\z
0100001c20001d1c486920746f204a6f\z
736820616e6420616c6c206869732063\z
6c61737304686f6d65c4320001000100\z
001c2000047f00000104496e666fc432\z
0010000100001c20008b8a5a6f6e6554\z
72616e736665722e6d65207365727669\z
63652070726f76696465642062792052\z
6f62696e20576f6f64202d20726f6269\z
6e40646967692e6e696e6a612e205365\z
6520687474703a2f2f646967692e6e69\z
6e6a612f70726f6a656374732f7a6f6e\z
657472616e736665726d652e70687020\z
666f72206d6f726520696e666f726d61\z
74696f6e2e08696e7465726e616cc432\z
000200010000012c000906696e746e73\z
31c432c533000200010000012c000906\z
696e746e7332c432c548000100010000\z
012c000451046c29c55d000100010000\z
012c0004a7582a5e066f6666696365c4\z
320001000100001c200004041727fe0a\z
697076366163746e6f77036f7267c432\z
001c000100001c2000102001067c02e8\z
001100000000c1001332036f7761c432\z
0001000100001c200004cf2ec5200972\z
6f62696e776f6f64c432001000010000\z
012e000b0a526f62696e20576f6f6402\z
7270c432001100010000014100320572\z
6f62696e0c7a6f6e657472616e736665\z
72026d650009726f62696e776f6f640c\z
7a6f6e657472616e73666572026d6500\z
03736970c62d0023000100000d05003b\z
000200030150074532552b7369702b21\z
5e2e2a24217369703a637573746f6d65\z
722d73657276696365407a6f6e657472\z
616e736665722e6d6521000473716c69\z
c62d001000010000012c000c0b27206f\z
7220313d31202d2d067373686f636bc6\z
2d0010000100001c20001c1b2829207b\z
203a5d7d3b206563686f205368656c6c\z
53686f636b65640773746167696e67c6\z
2d0005000100001c20001a0377777710\z
7379646e65796f70657261686f757365\z
03636f6d000f616c6c746370706f7274\z
736f70656e086669726577616c6c0474\z
657374c62d000100010000012d00047f\z
0000010774657374696e67c62d000500\z
010000012d0002c21c0376706ec62d00\z
01000100000fa00004ae243b9ac21c00\z
01000100001c20000405c4690e037873\z
73c62d001000010000012c00201f273e\z
3c7363726970743e616c657274282742\z
6f6f27293c2f7363726970743ec62d00\z
06000100001c200018c02dc040785908\z
810002a300000003840012750000000e\z
10")
local axfr_decoded = decode(axfr)
local answers = {
{dname="zonetransfer.me", dtype=types["SOA"], mname="nsztm1.digi.ninja", rname="robin.digi.ninja"},
{dname="zonetransfer.me", dtype=types["HINFO"]}, -- "Casio fx-700G" "Windows XP"
{dname="zonetransfer.me", dtype=types["TXT"], text="google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA"},
{dname="zonetransfer.me", dtype=types["MX"], pref=0, server="ASPMX.L.GOOGLE.COM"},
{dname="zonetransfer.me", dtype=types["MX"], pref=10, server="ALT1.ASPMX.L.GOOGLE.COM"},
{dname="zonetransfer.me", dtype=types["MX"], pref=10, server="ALT2.ASPMX.L.GOOGLE.COM"},
{dname="zonetransfer.me", dtype=types["MX"], pref=20, server="ASPMX2.GOOGLEMAIL.COM"},
{dname="zonetransfer.me", dtype=types["MX"], pref=20, server="ASPMX3.GOOGLEMAIL.COM"},
{dname="zonetransfer.me", dtype=types["MX"], pref=20, server="ASPMX4.GOOGLEMAIL.COM"},
{dname="zonetransfer.me", dtype=types["MX"], pref=20, server="ASPMX5.GOOGLEMAIL.COM"},
{dname="zonetransfer.me", dtype=types["A"], ip="5.196.105.14"},
{dname="zonetransfer.me", dtype=types["NS"], domain="nsztm1.digi.ninja"},
{dname="zonetransfer.me", dtype=types["NS"], domain="nsztm2.digi.ninja"},
{dname="_acme-challenge.zonetransfer.me", dtype=types["TXT"], text="6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI"},
{dname="_sip._tcp.zonetransfer.me", dtype=types["SRV"], prio=0, weight=0, port=5060, target="www.zonetransfer.me"},
{dname="14.105.196.5.IN-ADDR.ARPA.zonetransfer.me", dtype=types["PTR"], domain="www.zonetransfer.me"},
{dname="asfdbauthdns.zonetransfer.me", dtype=types["AFSDB"]}, -- 1 asfdbbox.zonetransfer.me.
{dname="asfdbbox.zonetransfer.me", dtype=types["A"], ip="127.0.0.1"},
{dname="asfdbvolume.zonetransfer.me", dtype=types["AFSDB"]}, -- 1 asfdbbox.zonetransfer.me.
{dname="canberra-office.zonetransfer.me", dtype=types["A"], ip="202.14.81.230"},
{dname="cmdexec.zonetransfer.me", dtype=types["TXT"], text="; ls"},
{dname="contact.zonetransfer.me", dtype=types["TXT"], text="Remember to call or email Pippa on +44 123 4567890 or pippa@zonetransfer.me when making DNS changes"},
{dname="dc-office.zonetransfer.me", dtype=types["A"], ip="143.228.181.132"},
{dname="deadbeef.zonetransfer.me", dtype=types["AAAA"], ipv6="dead:beaf::"},
{dname="dr.zonetransfer.me", dtype=types["LOC"]}, -- 53.349044 N 1.642646 W 0m 1.0m 10000.0m 10.0m
{dname="DZC.zonetransfer.me", dtype=types["TXT"], text="AbCdEfG"},
{dname="email.zonetransfer.me", dtype=types["NAPTR"]}, -- 1 1 "P" "E2U+email" "" email.zonetransfer.me.zonetransfer.me.
{dname="email.zonetransfer.me", dtype=types["A"], ip="74.125.206.26"},
{dname="Hello.zonetransfer.me", dtype=types["TXT"], text="Hi to Josh and all his class"},
{dname="home.zonetransfer.me", dtype=types["A"], ip="127.0.0.1"},
{dname="Info.zonetransfer.me", dtype=types["TXT"], text="ZoneTransfer.me service provided by Robin Wood - robin@digi.ninja. See http://digi.ninja/projects/zonetransferme.php for more information."},
{dname="internal.zonetransfer.me", dtype=types["NS"], domain="intns1.zonetransfer.me"},
{dname="internal.zonetransfer.me", dtype=types["NS"], domain="intns2.zonetransfer.me"},
{dname="intns1.zonetransfer.me", dtype=types["A"], ip="81.4.108.41"},
{dname="intns2.zonetransfer.me", dtype=types["A"], ip="167.88.42.94"},
{dname="office.zonetransfer.me", dtype=types["A"], ip="4.23.39.254"},
{dname="ipv6actnow.org.zonetransfer.me", dtype=types["AAAA"], ipv6="2001:67c:2e8:11::c100:1332"},
{dname="owa.zonetransfer.me", dtype=types["A"], ip="207.46.197.32"},
{dname="robinwood.zonetransfer.me", dtype=types["TXT"], text="Robin Wood"},
{dname="rp.zonetransfer.me", dtype=types["RP"]}, -- robin.zonetransfer.me. robinwood.zonetransfer.me.
{dname="sip.zonetransfer.me", dtype=types["NAPTR"]}, -- 2 3 "P" "E2U+sip" "!^.*$!sip:customer-service@zonetransfer.me!" .
{dname="sqli.zonetransfer.me", dtype=types["TXT"], text="' or 1=1 --"},
{dname="sshock.zonetransfer.me", dtype=types["TXT"],text="() { :]}; echo ShellShocked"},
{dname="staging.zonetransfer.me", dtype=types["CNAME"], domain="www.sydneyoperahouse.com"},
{dname="alltcpportsopen.firewall.test.zonetransfer.me", dtype=types["A"], ip="127.0.0.1"},
{dname="testing.zonetransfer.me", dtype=types["CNAME"], domain="www.zonetransfer.me"},
{dname="vpn.zonetransfer.me", dtype=types["A"], ip="174.36.59.154"},
{dname="www.zonetransfer.me", dtype=types["A"], ip="5.196.105.14"},
{dname="xss.zonetransfer.me", dtype=types["TXT"], text="'><script>alert('Boo')</script>"},
{dname="zonetransfer.me", dtype=types["SOA"], mname="nsztm1.digi.ninja", rname="robin.digi.ninja"},
}
for i, a in ipairs(axfr_decoded.answers) do
ta = answers[i]
if ta.dtype == types.TXT then
test_suite:add_test(unittest.equal(a.dname, ta.dname), i .. ".dname")
test_suite:add_test(unittest.equal(a.dtype, ta.dtype), i .. ".dtype")
test_suite:add_test(unittest.equal(a.TXT.text[1], ta.text), i .. ".text")
elseif ta.dtype == types.SOA then
test_suite:add_test(unittest.equal(a.dname, ta.dname), i .. ".dname")
test_suite:add_test(unittest.equal(a.dtype, ta.dtype), i .. ".dtype")
test_suite:add_test(unittest.equal(a.SOA.mname, ta.mname), i .. ".mname")
test_suite:add_test(unittest.equal(a.SOA.rname, ta.rname), i .. ".rname")
elseif ta.dtype == types.MX then
test_suite:add_test(unittest.equal(a.dname, ta.dname), i .. ".dname")
test_suite:add_test(unittest.equal(a.dtype, ta.dtype), i .. ".dtype")
test_suite:add_test(unittest.equal(a.MX.pref, ta.pref), i .. ".pref")
test_suite:add_test(unittest.equal(a.MX.server, ta.server), i .. ".server")
elseif ta.dtype == types.SRV then
test_suite:add_test(unittest.equal(a.dname, ta.dname), i .. ".dname")
test_suite:add_test(unittest.equal(a.dtype, ta.dtype), i .. ".dtype")
test_suite:add_test(unittest.equal(a.SRV.prio, ta.prio), i .. ".prio")
test_suite:add_test(unittest.equal(a.SRV.weight, ta.weight), i .. ".weight")
test_suite:add_test(unittest.equal(a.SRV.port, ta.port), i .. ".port")
else
for k, v in pairs(ta) do
test_suite:add_test(unittest.equal(a[k], v), ("%d.%s"):format(i, k))
end
end
end
return _ENV;