攻防世界web新手题8-12题

web

xff_referer

X老师告诉小宁其实xff和referer是可以伪造的。

根据描述信息,知道题目应该与xff和referer相关,进入题目,看到
1

于是用brup抓包,在http头加一条 X-Forwarded-For: 123.123.123.123
发送请求
2
看到必须来自谷歌,于是再增加一条 Referer: https://www.google.com
再次发送请求
3
得到flag
4

本题涉及知识点:

XFF - IP欺骗

XFF即”X-Forwarded-For”字段,设置此字段可以伪造IP地址,这样部分服务器会认为是客户端经过代理访问自己,而其真实IP即为伪造IP地址。此字段在http头部增加即可生效。

Referer伪造

Referer是HTTP协议中的一个请求报头,用于告知服务器用户的来源页面。要注意的是,referer是由浏览器自动为我们加上的,但并不是所有浏览器都会设置该值。和XFF一样,referer可以伪造,并不可信。

simple_php

小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

打开题目看到源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php 
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
echo $flag1;
}
if(is_numeric($b)){
exit();
}
if($b>1234){
echo $flag2;
}
?>

分析代码可知,若想得到flag1需要满足条件$a==0且$a不为0,所以可以令a=0a.

若想得到flag2需要满足条件&b不为数字或数字字符串且>1234,可以用b=12345a绕过。

所以构造url:

1
http://111.198.29.45:34608/index.php?a=0a&b=12345a

回车得到flag

本题涉及知识点:

php弱类型比较

php中有两种比较的符号: == 与 ===

== 在进行比较的时候,会先将字符串类型转化成相同,再比较 如果一个数值和字符串进行比较的时候,会将字符串转换成数值再比较。

=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较

所以本题中令a=0a会先将0a转换成0再与0比较

is_numeric()函数

is_numeric() 函数用于检测变量是否为数字或数字字符串。
若变量为数字或数字字符串,则if()语句为真。
审计代码可知本题中要令&b不为数字或数字字符串,所以令b=12345a,同样因为php是弱类型语言,12345a在与1234比较时会先将12345a转换成12345,于是得到flag2