---------WEB----------
web2:
查看源码
计算器:
更改参数值-----maxlength="1"
web基础$_GET:
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
定义 http://123.206.87.240:8002/get/?what=flag
web基础$_POST:
$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
矛盾:
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
观察if(!is_numeric($num))应该是截断 http://123.206.87.240:8002/get/index1.php?num=1%00
web3:
查看源码
直接HTML解码
域名解析:
修改host文件
再次访问http://flag.baidu.com/即可得到flag
你必须让他停下:
BP抓包重发即可
变量1:
flag In the variable !
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);");
}
?>
前面直接include了flag1.php,这里的意思就是把这个文件中的代码导进来,所以猜测flag应该是一个变量。
后面isset需要变量是已经定义的,同时后面的正则\w,匹配字母或数字或下划线或汉字。
结尾的\$\$ args代表了可变变量,也就是假如arg是一个变量名,\$\$ args则代表了另一个变量。
那么猜测arg是全局变量GLOBALS
构造url:http://123.206.87.240:8004/index1.php?args=GLOBALS
返回的结果:
web5:
查看源码
放在控制台解码
得到
头等舱:
进去之后这样显示
BP抓包即可
网站被黑:
御剑扫描
发现后台url打开
BP暴力破解
管理员系统:
在请求头添加X-Forwarded-For:127.0.0.1
BP发现
base64解码得到test123
BP修改参数即可得到flag
web4:
源码发现一大堆东西
此提示拼接 eval(unescape(p1) + unescape('%35%34%61%61%32' + p2))
完成后解码得到
由此得出 if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;
67d709b2b54aa2aa648cf6e87a7114f1将其输入提交即可得到flag
flag在index里:
进去之后显示
查看源码并没有什么
此时这里用到了php的封装协议:http://php.net/manual/zh/wrappers.php.php
解释此协议含义:首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。
而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。
如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。
继续做题:
在url中添加 http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
得到base64解码即可得到flag