dnscat2
dnscat2 copied to clipboard
Handle error conditions better
Display stack trace, but do not fail and exit (losing shells can be nightmare)
For example, dnscat2 server fails with following error messages on long running servers:
Caught an error: DNS packet was truncated (or we messed up parsing it)!
/pentest/dnscat2/server/libs/dnser.rb:179:in unpack' /pentest/dnscat2/server/libs/dnser.rb:634:in
parse'
/pentest/dnscat2/server/libs/dnser.rb:849:in block (2 levels) in on_request' /pentest/dnscat2/server/libs/dnser.rb:843:in
loop'
/pentest/dnscat2/server/libs/dnser.rb:843:in `block in on_request'
Protocol exception caught in dnscat DNS module (for more information, check window 'dns1'):
#<DnscatException: Received a packet with no questions>
Caught an error: undefined method serialize' for nil:NilClass /pentest/dnscat2/server/libs/dnser.rb:678:in
block in serialize'
/pentest/dnscat2/server/libs/dnser.rb:677:in each' /pentest/dnscat2/server/libs/dnser.rb:677:in
serialize'
/pentest/dnscat2/server/libs/dnser.rb:819:in reply!' /pentest/dnscat2/server/libs/dnser.rb:775:in
error!'
/pentest/dnscat2/server/tunnel_drivers/driver_dns.rb:357:in rescue in block in initialize' /pentest/dnscat2/server/tunnel_drivers/driver_dns.rb:293:in
block in initialize'
/pentest/dnscat2/server/libs/dnser.rb:879:in block (2 levels) in on_request' /pentest/dnscat2/server/libs/dnser.rb:843:in
loop'
/pentest/dnscat2/server/libs/dnser.rb:843:in block in on_request' /pentest/dnscat2/server/libs/dnser.rb:883:in
rescue in block (2 levels) in on_request': undefined method response_template' for #<DNSer::Transaction:0x0000000000dd6a58> (NoMethodError) Did you mean? respond_to? from /pentest/dnscat2/server/libs/dnser.rb:878:in
block (2 levels) in on_request'
from /pentest/dnscat2/server/libs/dnser.rb:843:in loop' from /pentest/dnscat2/server/libs/dnser.rb:843:in
block in on_request'
I totally agree. I've started re-writing the client in rust, with solid error handling (and testing) built in. Unfortunately, it's a bit of a long project.
On Wed, Dec 5, 2018 at 6:35 AM kost [email protected] wrote:
Display stack trace, but do not fail and exit (losing shells can be nightmare)
For example, dnscat2 server fails with following error messages on long running servers:
Caught an error: DNS packet was truncated (or we messed up parsing it)! /pentest/dnscat2/server/libs/dnser.rb:179:in unpack' /pentest/dnscat2/server/libs/dnser.rb:634:in parse' /pentest/dnscat2/server/libs/dnser.rb:849:in block (2 levels) in on_request' /pentest/dnscat2/server/libs/dnser.rb:843:in loop' /pentest/dnscat2/server/libs/dnser.rb:843:in `block in on_request'
Protocol exception caught in dnscat DNS module (for more information, check window 'dns1'): #<DnscatException: Received a packet with no questions> Caught an error: undefined method serialize' for nil:NilClass /pentest/dnscat2/server/libs/dnser.rb:678:in block in serialize' /pentest/dnscat2/server/libs/dnser.rb:677:in each' /pentest/dnscat2/server/libs/dnser.rb:677:in serialize' /pentest/dnscat2/server/libs/dnser.rb:819:in reply!' /pentest/dnscat2/server/libs/dnser.rb:775:in error!' /pentest/dnscat2/server/tunnel_drivers/driver_dns.rb:357:in rescue in block in initialize' /pentest/dnscat2/server/tunnel_drivers/driver_dns.rb:293:in block in initialize' /pentest/dnscat2/server/libs/dnser.rb:879:in block (2 levels) in on_request' /pentest/dnscat2/server/libs/dnser.rb:843:in loop' /pentest/dnscat2/server/libs/dnser.rb:843:in block in on_request' /pentest/dnscat2/server/libs/dnser.rb:883:in rescue in block (2 levels) in on_request': undefined method response_template' for #DNSer::Transaction:0x0000000000dd6a58 (NoMethodError) Did you mean? respond_to? from /pentest/dnscat2/server/libs/dnser.rb:878:in block (2 levels) in on_request' from /pentest/dnscat2/server/libs/dnser.rb:843:in loop' from /pentest/dnscat2/server/libs/dnser.rb:843:in block in on_request'
You can view, comment on, or merge this pull request online at:
https://github.com/iagox86/dnscat2/pull/135 Commit Summary
- Handle error conditions better
File Changes
- M server/libs/dnser.rb https://github.com/iagox86/dnscat2/pull/135/files#diff-0 (13)
Patch Links:
- https://github.com/iagox86/dnscat2/pull/135.patch
- https://github.com/iagox86/dnscat2/pull/135.diff
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/iagox86/dnscat2/pull/135, or mute the thread https://github.com/notifications/unsubscribe-auth/AAgITKdXlw5W9KYltpyVZbLbZPm8bYQeks5u19nCgaJpZM4ZC2uQ .
Regarding client in C, i have few patches to retry connection. They are bit hacky, but I will make pull request anyway, so feel free to decide what you want with it.
Cool! I was thinking of forking them into new processes, so if the client exits the main app would stick around. But that would require shared state, which is kind of non-trivial, so I haven't done it.
On Thu, Dec 6, 2018 at 7:27 AM kost [email protected] wrote:
Regarding client in C, i have few patches to retry connection. They are bit hacky, but I will make pull request anyway, so feel free to decide what you want with it.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/iagox86/dnscat2/pull/135#issuecomment-444910078, or mute the thread https://github.com/notifications/unsubscribe-auth/AAgITL_9jxaztF0zVnLhbu1JTsd2FYLGks5u2TdOgaJpZM4ZC2uQ .