#Web安全

[CISCN2019 华北赛区 Day1 Web2]ikun(python反序列化)

进入主页。就说要买V6


[网鼎杯 2018]Comment(Git恢复+二次注入)

扫目录扫到Git。githack恢复下
我用GitHack只恢复了一个write_do.php但是。里面代码是少了一部分的
这里需要用到https://github.com/wangyihang/githacker这个工具
我用的其他工具恢复出来只有文件。没有.git目录


[SWPUCTF 2016]Web7(CRLF+SSRF)

首先。题目就一个input和login
login需要admin密码
先从input开始
随手输了个123报错了。


[HarekazeCTF2019]encode_and_encode

进去就三个链接。


[CISCN2019 华北赛区 Day1 Web5]CyberPunk

一题关于二次注入的题


无需爆破还原mt_rand()种子

详情看文章:https://www.anquanke.com/post/id/196831#h2-6
对于这个原理。还是懵懵的。


BJDCTF Web题解

[BJDCTF2020]Mark loves


[2020 新春红包题]反序列化pop链

这题也是根据2019全国大学生安全运维赛 EZPOP改编的
具体代码如下

<?php
error_reporting(0);

class A {

    protected $store;

    protected $key;

    protected $expire;

    public function __construct($store, $key = 'flysystem', $expire = null) {
        $this->key = $key;
        $this->store = $store;
        $this->expire = $expire;
    }

    public function cleanContents(array $contents) {
        $cachedProperties = array_flip([
            'path', 'dirname', 'basename', 'extension', 'filename',
            'size', 'mimetype', 'visibility', 'timestamp', 'type',
        ]);

        foreach ($contents as $path => $object) {
            if (is_array($object)) {
                $contents[$path] = array_intersect_key($object, $cachedProperties);
            }
        }

        return $contents;
    }

    public function getForStorage() {
        $cleaned = $this->cleanContents($this->cache);

        return json_encode([$cleaned, $this->complete]);
    }

    public function save() {
        $contents = $this->getForStorage();

        $this->store->set($this->key, $contents, $this->expire);
    }

    public function __destruct() {
        if (!$this->autosave) {
            $this->save();
        }
    }
}

class B {

    protected function getExpireTime($expire): int {
        return (int) $expire;
    }

    public function getCacheKey(string $name): string {
        // 使缓存文件名随机
        $cache_filename = $this->options['prefix'] . uniqid() . $name;
        if(substr($cache_filename, -strlen('.php')) === '.php') {
          die('?');
        }
        return $cache_filename;
    }

    protected function serialize($data): string {
        if (is_numeric($data)) {
            return (string) $data;
        }

        $serialize = $this->options['serialize'];

        return $serialize($data);
    }

    public function set($name, $value, $expire = null): bool{
        $this->writeTimes++;

        if (is_null($expire)) {
            $expire = $this->options['expire'];
        }

        $expire = $this->getExpireTime($expire);
        $filename = $this->getCacheKey($name);

        $dir = dirname($filename);

        if (!is_dir($dir)) {
            try {
                mkdir($dir, 0755, true);
            } catch (\Exception $e) {
                // 创建失败
            }
        }

        $data = $this->serialize($value);

        if ($this->options['data_compress'] && function_exists('gzcompress')) {
            //数据压缩
            $data = gzcompress($data, 3);
        }

        $data = "<?php\n//" . sprintf('%012d', $expire) . "\n exit();?>\n" . $data;
        $result = file_put_contents($filename, $data);

        if ($result) {
            return $filename;
        }

        return null;
    }

}

if (isset($_GET['src']))
{
    highlight_file(__FILE__);
}

$dir = "uploads/";

if (!is_dir($dir))
{
    mkdir($dir);
}
unserialize($_GET["data"]);


[XNUCA2019Qualifier]EasyPHP(.htaccess利用)

<?php
    $files = scandir('./'); 
    foreach($files as $file) {
        if(is_file($file)){
            if ($file !== "index.php") {
                unlink($file);
            }
        }
    }
    include_once("fl3g.php");
    if(!isset($_GET['content']) || !isset($_GET['filename'])) {
        highlight_file(__FILE__);
        die();
    }
    $content = $_GET['content'];
    if(stristr($content,'on') || stristr($content,'html') || stristr($content,'type') || stristr($content,'flag') || stristr($content,'upload') || stristr($content,'file')) {
        echo "Hacker";
        die();
    }
    $filename = $_GET['filename'];
    if(preg_match("/[^a-z\.]/", $filename) == 1) {
        echo "Hacker";
        die();
    }
    $files = scandir('./'); 
    foreach($files as $file) {
        if(is_file($file)){
            if ($file !== "index.php") {
                unlink($file);
            }
        }
    }
    file_put_contents($filename, $content . "\nJust one chance");
?>


LCTF bestphp’s revenge(SOAP反序列化)

index.php

 <?php
highlight_file(__FILE__);
$b = 'implode';
call_user_func($_GET['f'], $_POST);
session_start();
if (isset($_GET['name'])) {
    $_SESSION['name'] = $_GET['name'];
}
var_dump($_SESSION);
$a = array(reset($_SESSION), 'welcome_to_the_lctf2018');
call_user_func($b, $a);
?>

[NCTF2019]SQLi(regexp注入)

主页就一个登录框 。把sql语句显示出来了。


[FBCTF2019]Event(SSTI3)

功能很简单。就一个登陆。一个查看flag。但是flag没有权限


PHP的Session反序列化

对于反序列化。我们已知的有phar/unserialize。Session也是可以触发反序列化的
首先。我们看下php对于Session的各项配置


[CISCN2019 总决赛 Day2 Web1]Easyweb

看见界面。一个登陆框。

尝试register.php。。并没有。看下robots.txt


CORS跨域漏洞的学习

讲跨域漏洞前。首先得讲一下浏览器的同源策略
SOP,同源策略 (Same Origin Policy)
同源策略是浏览器的一个安全功能。不同源的客户端脚本(JS)在没有被授权的情况下。不能读取对方资源。
同源的定义是。协议/端口/主机


← 上一页 下一页 →