BUGKU-WEB

07
六月
2021

WEB16

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

<?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,即相等,实现绕过。

在这里插入图片描述

WEB18

  让我们用POST请求返回计算的结果显然是不太可能的,这里就需要我们写一个PY脚本来跑,获取flag。
在这里插入图片描述

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

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。
在这里插入图片描述
这个时候就该喊出我们的口号:”python 永远的神!!!“。

TAG

网友评论

共有访客发表了评论
请登录后再发布评论,和谐社会,请文明发言,谢谢合作! 立即登录 注册会员