DNS Rebinding/README.md
DNS rebinding changes the IP address of an attacker controlled machine name to the IP address of a target application, bypassing the same-origin policy and thus allowing the browser to make arbitrary requests to the target application and read their responses.
Setup Phase:
malicious.com).malicious.com to different IP addresses.Initial Victim Interaction:
malicious.com containing malicious JavaScript or another exploit mechanism.Initial DNS Resolution:
malicious.com, it queries the attacker's DNS server for the IP address.malicious.com to an initial, legitimate-looking IP address (e.g., 203.0.113.1).Rebinding to Internal IP:
malicious.com to a private or internal IP address (e.g., 192.168.1.1, corresponding to the victim’s router or other internal devices).This is often achieved by setting a very short TTL (time-to-live) for the initial DNS response, forcing the browser to re-resolve the domain.
Same-Origin Exploitation:
The browser treats subsequent responses as coming from the same origin (malicious.com).
Malicious JavaScript running in the victim's browser can now make requests to internal IP addresses or local services (e.g., 192.168.1.1 or 127.0.0.1), bypassing same-origin policy restrictions.
Example:
http://rebinder.your.domain:8080/autoattack.html.Most DNS protections are implemented in the form of blocking DNS responses containing unwanted IP addresses at the perimeter, when DNS responses enter the internal network. The most common form of protection is to block private IP addresses as defined in RFC 1918 (i.e. 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). Some tools allow to additionally block localhost (127.0.0.0/8), local (internal) networks, or 0.0.0.0/0 network ranges.
In the case where DNS protection are enabled (generally disabled by default), NCC Group has documented multiple DNS protection bypasses that can be used.
We can use the IP address 0.0.0.0 to access the localhost (127.0.0.1) to bypass filters blocking DNS responses containing 127.0.0.1 or 127.0.0.0/8.
We can use DNS CNAME records to bypass a DNS protection solution that blocks all internal IP addresses. Since our response will only return a CNAME of an internal server, the rule filtering internal IP addresses will not be applied. Then, the local, internal DNS server will resolve the CNAME.
$ dig cname.example.com +noall +answer
; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> example.com +noall +answer
;; global options: +cmd
cname.example.com. 381 IN CNAME target.local.
We can use "localhost" as a DNS CNAME record to bypass filters blocking DNS responses containing 127.0.0.1.
$ dig www.example.com +noall +answer
; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> example.com +noall +answer
;; global options: +cmd
localhost.example.com. 381 IN CNAME localhost.