1.phpversion
题设
1.1 得到源码
但是通过观察源码并没有发现,不同之处。
所以尝试,是否存在备份源码在服务器中。burp抓包,选择注入点。加载Payload。
选择payload
得到200
1.2 分析源码
<?php
ERROR_REPORTING(0);
if(!empty($_GET['ver'])==PHP_VERSION){
if($_GET['ver']==PHP_VERSION){
$key = "**********";
}
}
?>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>PHP Version</title>
</head>
<body alink="#007000" bgcolor="#000000" link="gold" text="#008000" vlink="#00c000">
<center>
<br><br>
<center>
<h1>Version</h1>
</center>
<br>
<br>
<font color="red">Key Words:</font>PHP Version<br>
<br>
<div>
<form action="" method="POST">
Key:
<input type="text" name="key"><br>
<input type="hidden" name="ver"><br>
<input type="submit" name="Version.php"><br><br><br><br><?php echo $key;?>
</form>
<br>
<br>
</form>
</center>
</body></html>
①对php块进行分析
ERROR_REPORTING(0):关闭PHP的所有报错
第一个判断:若ver
传参不为空,且等于PHP版本就可以进入下面
第二个判断:传参等于PHP版本,则输出$key,
<?php echo $key;?><?php
ERROR_REPORTING(0);
if(!empty($_GET['ver'])==PHP_VERSION){
if($_GET['ver']==PHP_VERSION){
$key = "**********";
}
}
?>
②获得PHP版本
观察了许久没有一个好的思路拿到PHP版本,根据WP学到一手,服务器返回的包给了PHP版本。PHP/5.6.40
③进行传参,得到flag
开始传参PHP/5.6.40
始终没有变化,后面5.6.40
得到flag
2.一道简单的XFF
2.1 抓包解题
题目:仅允许本地地址访问
尝试更改了HOST以及isadmin字段似乎都没有太大作用。
根据PW,发现只需要X-Forwarded-For=127.0.0.1 ,嗷,~~还不行。。还得是admin。
这样才可以得到flag。
2.2 关于XFF的扩展
IP伪造
TCP/IP层面的IP伪造很难实现,因为更改后很难实现正常的TCP通信,但在HTTP层面的伪造就显得很容易。可以通过伪造XFF头进行IP伪造。所以仅允许本地地址访问,就需要使用X-Forwarded-For来进行构造。
X-Forwarded-For
是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。通俗来说,就是浏览器访问网站的IP 。
其一般形式为:
X-Forwarded-For: client1, proxy1, proxy2, proxy3
//client1 浏览器IP
//proxy 依次通过的服务器IP
一般题目思路:
(需要IP伪造,但是包头没有XFF,可以构造XFF)
①
同时构造自己的IP地址-----------X-Forwarded-For
构造自己来自哪个网址-----------refer
②
构造自己属于哪个网段--------------X-Forwarded-for:192.XXX
同时构造cookie中的某些参数
③
注入直接构造sql语句