开始挑战第十八关(Header Injection - Uagent field - Error based

 

常见的HTTP注入点产生位置为【Referer】、【X-Forwarded-For】、【Cookie】、【X-Real-IP】、【Accept-Language】、【Authorization】;

(1)HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。

(2)X-Forwarded-For:简称XFF头,它代表客户端,用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For

(3)Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

(4)X-Real-IP一般只记录真实发出请求的客户端IP,看下面的例子,

   X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
  代表 请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP4.4.4.4是第三层代理
如果配置了X-Read-IP,将会是:

  X-Real-IP: 1.1.1.1
  所以 ,如果只有一层代理,这两个头的值就是一样的
(5)Accept-Language请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言

来吧来吧,先看看页面长什么样,看看和之前的也没什么变化,只是这里多了个一个your ip address is:::1

 

搜嘎,这里估摸着是要记录你每次访问的ip地址,以前看到过uagent注入,翻翻文章,果断有了骚思路。

先看看源代码

 

看到源码后,代码中对uname和passwd进行了check_input()函数的处理,所以在输入uname和passwd上进行注入是不行的,但是在代码中,

我们看到了$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES (‘$uagent‘, ‘$IP‘, $uname)";将useragent和ip插入到数据库中,那么我们是不是可以用这个来进行注入呢?首先这里要输入正确的账号和密码才能绕过账号密码判断,才能进入处理uagent部分,

 

既然这样,我们直接在user_agent中进行测试,加入单引号后出现报错信息,得出如下错误

 

 

 

猜想在数据中的sql语句为:INSEERT INTO table VALUES('User-Agent','Ip','Username')

接下来我们尝试在User-Agent的位置进行注入测试,我们修改User-Agnet的值使其符合整个INSERT INTIO 的语法,闭合后就应该为

INSEERT INTO table VALUES('1' ,1,1)#','Ip','Username'),成功绕过

 

接下来了我们利用逻辑运算 1=0 来测试,相当于将sql语句改变成INSEERT INTO table VALUES('1',1,1=0)#','Ip','Username')

 因为1=0的运算结果为False,所以返回一个0,这样的或我们可以用法基于错误的逻辑语句,利用报错函数来进行注入,先来查下数据库

 

同样的,获取表名

 

获取字段名,这里我做演示就随便获取一条

获取数据