bugku ctf刷题2(php://input&kali-gobuster扫目录)

Cookies

网页与网页源代码里无有用信息

观察url里内容,发现filename存在base64加密,解密后发现是keys.txt。

尝试用 filename访问index.php(原url使用base64,这里也将index.php进行编码)。line没有传值,试着传1,2,3;发现回显类似与源代码。写个python脚本获取一下这个源代码。

 得到源代码为:

<?php

error_reporting(0);

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");

$line=isset($_GET['line'])?intval($_GET['line']):0;

if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");

$file_list = array(

'0' =>'keys.txt',

'1' =>'index.php',

);

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){

$file_list[2]='keys.php';

}

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];

}

?>

分析代码可知,当Cookie的margin=margin时,可以访问keys.php文件

在burp_suite中加入Cookie,并把filename的值改为base64加密后的keys.php后send

得到flag。

never_give_up

查看源码发现,1p.html.访问其发现转到了bugku官网,可能存在重定向.

在view-source:http://114.67.175.224:17590/1p.html 用view-source查看源码,得到

 首先url解码后,可以看见<script>window.location.href='http://www.bugku.com';</script>

再将<!--   -->内编码尝试base64解码后得到

%22%3Bif(!%24_GET%5B'id'%5D)%0A%7B%0A%09header('Location%3A%20hello.php%3Fid%3D1')%3B%0A%09exit()%3B%0A%7D%0A%24id%3D%24_GET%5B'id'%5D%3B%0A%24a%3D%24_GET%5B'a'%5D%3B%0A%24b%3D%24_GET%5B'b'%5D%3B%0Aif(stripos(%24a%2C'.'))%0A%7B%0A%09echo%20'no%20no%20no%20no%20no%20no%20no'%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20%40file_get_contents(%24a%2C'r')%3B%0Aif(%24data%3D%3D%22bugku%20is%20a%20nice%20plateform!%22%20and%20%24id%3D%3D0%20and%20strlen(%24b)%3E5%20and%20eregi(%22111%22.substr(%24b%2C0%2C1)%2C%221114%22)%20and%20substr(%24b%2C0%2C1)!%3D4)%0A%7B%0A%09%24flag%20%3D%20%22flag%7B***********%7D%22%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20!!!%22%3B%0A%7D%0A%0A%0A%3F%3E

再次对其进行url解码得到源码:

";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	$flag = "flag{***********}"
}
else
{
	print "never never never give up !!!";
}


?>

可知要得到flag,要满足:

$data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)

@file_get_contents($a,'r')使用php://input绕过:

$a不能包含‘.’ 所以我们可以传入伪协议a=php://input ,post data内容。

1.$a传入的参数要非空非0,所以我们利用php若比较特性传入id=0a.

总结:

1.  file_get_contents()函数可以将整个文件读入一个字符串中。源码中变量 $data 是由file_get_contents()函数读取变量 $a 的值而得,所以 $a 的值必须为数据流,可是使用php伪协议中的php://input来访问原始请求数据中的只读流。

2.  stripos(a,b)   寻找b在a第一次出现的位置  不区分大小写。

source

要用linux环境,没有思路。查看其他师傅wp时,发现linux里还有用一种扫目录的方法:

kali 自带gobuster

 

gobuster dir -u http://114.67.175.224:10231/ -w /usr/share/wordlists/dirb/common.txt

 我们可以用wget命令来下载
wget -r http://114.67.175.224:10231/.git
-r是表示递归的意思,就是把这个路径下所有的文件都给下载下来

下载好了之后,在文件管理器中打开

直接用git reflog+文件名

查看文件的更新日志

之后一个一个对照文件号,git show 试几次就出现了flag。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值