BUGKU-WEB

WEB16

  备份是一个好习惯。题目既然给出了这样的提示,也就是说网站的源代码被管理员放在了网页服务器之上,我们这里直接在KALI中使用disreach扫描网站,发现有一个index.php.bak格式的文件,这个就是存放网站代码的备份代码。
1.用记事本打开这个代码,看看有什么发现。
BUGKU-WEB

<?php /**  * Created by PhpStorm.  * User: Norse  * Date: 2017/8/6  * Time: 20:22 */  include_once "flag.php";		//包含一次这个文件 ini_set("display_errors", 0); $str = strstr($_SERVER['REQUEST_URI'], '?'); $str = substr($str,1); $str = str_replace('key','',$str);//空格绕过,这个函数 //就是一个字符串代替的函数,在str中检测'key'这个字符串然后使用空格代替,所以我们需要过滤这个函数。 parse_str($str); echo md5($key1);  echo md5($key2); if(md5($key1) == md5($key2) && $key1 !== $key2){//考PHP特性,就是一个简单的MD5碰撞绕过,直接用数组绕过快一点。     echo $flag."取得flag"; } ?> 


  所以,我们需要考虑空格绕过和碰撞绕过就好了,空格绕过,因为我们需要在参数中传递key这个变量,但是会被函数过滤换成空格,所以我们需要双写绕过即key1—>kekeyy1,key2—>kekeyy2,然后数组绕过,给变量赋值为数组达到字符串不相同,但是他们的MD5返回值都为NULL,即相等,实现绕过。

BUGKU-WEB

WEB18

  让我们用POST请求返回计算的结果显然是不太可能的,这里就需要我们写一个PY脚本来跑,获取flag。
BUGKU-WEB

本人没学过相关库的使用,这里借用别人的的脚本来测试。

import requests import re  url  = "http://114.67.246.176:14873/" s = requests.session()                       #用session会话保持表达式  response = s.get(url)  equation = re.search(r'(d+[+-*])+(d+)',response.text).group()  result = eval(equation)	                     #eval()函数用来执行一个字符串表达式,并返回表达式的值。  key = {'value':result}                       #创建一个字典类型用于传参 flag = s.post(url,data=key)                  #用post方法传上去   print(flag.text)                             #打印flag文件  print(response.content.decode('utf-8'))      #将源码转化格式打印出来 print(response.status_code)                  #打印状态码 


拿到flag。
BUGKU-WEB
这个时候就该喊出我们的口号:”python 永远的神!!!“。

版权声明:玥玥 发表于 2021-06-10 6:41:17。
转载请注明:BUGKU-WEB | 女黑客导航