4.联合查询注入

发布时间 2023-11-11 10:39:27作者: 白牧羊人
联合注入原理
0
联合查询,两边的字段数要相同,不然会报错
就像这样
select from users where user_id=1 union select * from guestbook
0
 
0
上述联合查询语句可以拆分为两个查询语句
select from users where user_id=1
select from guestbook
接下来要确定两个查询语句的字段数
 
select from users where user_id=1
0
0
0
字段数(注入点)为8
select * from guestbook
的完全语句为
select * from guestbook where comment_id = 1
0
字段数为3
0
 
0
利用联合查询创造多个查询点,然后将第二个查询语句的数字替换成为各种函数,一次性进行多个查询
 
限定语句导致的错误
0
0
当联合查询两个以上语句时,如果将comment_id设定为1的话,那除了第一个语句外的后面的所有语句都将不会回显出来
 
联合注入攻击
白盒测试流程
0
 
0
 
0
攻击开始
0
0
判断为字符型还是数字型
0
 
0
这里只是将Id更改了,没有其他变化,不像数字型注入漏洞
改为字符型试探
0
 
0
当输入值改为1' and '1'='2时,页面直接崩溃,说明这里有一个字符型注入漏洞
判断字段数(注入点)
0
0
0
注入点确定,这里只有两个注入点
0
 
0
 
0
 
0
数据库连接账户为localhost
0
连接的数据库名称为dvwa
0
 
0
版本为5.7.33
 
查询对方数据库中符号的表示方法
0
0
就会生成对应的字符
0
 
0
这样可以将数据库吐出来的数据更加美观一些
0
 
0
黑盒测试是不知道数据库内部结构和表名的
但数据库的表的数据都会保存在information_schema这个表中,我们只要将这个一定会存在的表,给他破解掉,就可以获得这个数据库中的全部表名了
黑盒测试流程
获取表名
 
select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 1
将注入点数字替换为这个语句
0
得到第一个表名
将注入点写入这个语句
select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 1,1
得到第二个表名
0
 
0
0
0
 
0
 
0
 
0
根据表名查询字段
0
0
 
0
通过字段查询内容
0
 
0