Potrzebuję pomocy w przerobieniu skryptu (odpłatnie)

Witajcie

Potrzebuję pomocy w przerobieniu skryptu a konkretnie funkcji POST tak, żeby można ją było zapodać jako argument w CLI, konkretnie sytuacja wygląda tak, że mam następujący skrypt:

formularz.php

<form action="modsecurity.php" method="post">
     <input type="text" name="idregolki"><br>
      <input type="submit" value="Submit">
   </form>

modsecurity.php

<?php

if( isset($_POST[‘idregolki’] ) )
{
$txt= 'SecRuleRemoveById '.$_POST[‘idregolki’] . PHP_EOL;
file_put_contents(‘custom_rules.conf’, $txt, FILE_APPEND);
}
?>

Czyli skrypt ma za zadanie wyświetlić pole do wpisania ID regułki np. 1234 a następnie zapisać to co user wpisał do pliku zadeklarowanego w skrypcie w formie SecRuleRemoveById 1234 i generalnie wszystko działa przy uruchomieniu tego skryptu w przeglądarce, niestety chcę tego użyć jako pluginu dla panelu DirectAdmin a tam skrypty PHP są interpetowane poprzez PHP wywoływane z linii komend, dlatego wymagane jest przerobienie funkcji POST tak, żeby można było podać listę argumentów. DirectAdmin podał w swojej dokumentacji: https://help.directadmin.com/item.php?id=289 podaje przykładowy kod jak należy go przerobić aby działał w pluginie DirectAdmin:

//make code look like CLI for $_GET and $_POST
$_GET = Array();
$QUERY_STRING=getenv(‘QUERY_STRING’);
if ($QUERY_STRING != “”)
{
parse_str(html_entity_decode($QUERY_STRING), $get_array);
foreach ($get_array as $key => $value)
{
$_GET[urldecode($key)] = urldecode($value);
}
}

$_POST = Array();
$POST_STRING=getenv(‘POST’);
if ($POST_STRING != “”)
{
parse_str(html_entity_decode($POST_STRING), $post_array);
foreach ($post_array as $key => $value)
{
$_POST[urldecode($key)] = urldecode($value);
}
}

ale niestety - moje PHP jest zbyt cienkie, żeby zrozumieć ten kod. Czy ktoś podjąłby się przerobienia mojego kodu z tym co powyżej? Jestem w stanie zapłacić za wykonanie tego także jeśli ktoś chętny do pomocy i chciałby zarobić na dobre piwo - piszcie. Jak będę miał działający przykład jak to zrobić będę to szlifował, na razie chcę, żeby to zadziałało w bezpiecznym środowisku.

Nigdy nie bawiłem się z pluginami DA, nie chcę też przekopywać się przez dokumentację. Robię to czysto intuicyjnie opierając się na tym co dałeś i stronie do której linkujesz.

<?php

$_POST = Array();
$POST_STRING=getenv('POST');
if ($POST_STRING != "")
{
               parse_str(html_entity_decode($POST_STRING), $post_array);
               foreach ($post_array as $key => $value)
               {
                       $_POST[urldecode($key)] = urldecode($value);
               }
}

if(isset($_POST['idregolki']))
{
	$txt= 'SecRuleRemoveById '.$_POST['idregolki'] . PHP_EOL;
	file_put_contents('custom_rules.conf', $txt, FILE_APPEND);
}

?>

Plus naprawiłem kilka błędów (php i tak to łyka dlatego nie wnikam w szczegóły, ale kuły w oczy).

Daj znać czy zadziałało.

Niestety nie - i co gorsza DA jest taki, że nie raczy napisać gdzie ma błąd, po prostu nic nie wyświetla nawet w debug mode DirectAdmina

oto debug z DA z którego nic nie wynika:

Sockets::handshake - begin
Sockets::handshake - end
/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html
0: Accept-Encoding: gzip, deflate
1: Accept-Language: pl,en-US;q=0.7,en;q=0.3
2: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
3: Connection: keep-alive
4: Content-Length: 14
5: Content-Type: application/x-www-form-urlencoded
6: Cookie: session=Uvb14o9ksqJ2ulxcMqKs0Nc4YxlorOjKJLJM9S62JO2D9znUn6KnRvrzsclhyUzI
7: Host: ******:2222
8: Origin: http://******:2222
9: Referer: http://******:2222/CMD_PLUGINS/modsecurity_editor
10: Upgrade-Insecure-Requests: 1
11: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
Post string: idregolki=1234
Checking referer http://******:2222/CMD_PLUGINS/modsecurity_editor to ******:2222
Referer check passed: = 2222=2222
auth.authenticated
Plugin::addHooks: start
Plugin::addHooks: end
Command::doCommand(/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html)
Plugin::run_action: ‘/usr/local/directadmin/plugins/modsecurity_editor/user/dodaj_regolke.html’: post=‘idregolki=1234’ get=’(null)’
Plugin::run_action: executeAsUser has returned ’
Skrypt ueuchomiony jako diradmin


Command::doCommand(/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html) : finished
Command::run: finished /CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html
Sockets::handshake - begin
Sockets::handshake - end
Sockets::handshake - begin
Sockets::handshake - end
/IMG_SKIN_NAV_WEBMAIL
0: Accept-Encoding: gzip, deflate
1: Accept-Language: pl,en-US;q=0.7,en;q=0.3
2: Accept: image/webp,/
3: Connection: keep-alive
4: Cookie: session=Uvb14o9ksqJ2ulxcMqKs0Nc4YxlorOjKJLJM9S62JO2D9znUn6KnRvrzsclhyUzI
5: Host: ******:2222
6: Referer: http://******:2222/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html
7: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
Checking referer http://******:2222/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html to ****:2222
Referer check passed: = 2222=2222
/IMG_SKIN_NAV_WEBMAIL_OVER
0: Accept-Encoding: gzip, deflate
1: Accept-Language: pl,en-US;q=0.7,en;q=0.3
2: Accept: image/webp,
/

3: Connection: keep-alive
4: Cookie: session=Uvb14o9ksqJ2ulxcMqKs0Nc4YxlorOjKJLJM9S62JO2D9znUn6KnRvrzsclhyUzI
5: Host: ******:2222
6: Referer: http://******:2222/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html
7: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
Checking referer http://******:2222/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html to ****:2222
Referer check passed: = 2222=2222
Sockets::handshake - begin
Sockets::handshake - end
/IMG_SKIN_NAV_BG
0: Accept-Encoding: gzip, deflate
1: Accept-Language: pl,en-US;q=0.7,en;q=0.3
2: Accept: image/webp,
/

3: Connection: keep-alive
4: Cookie: session=Uvb14o9ksqJ2ulxcMqKs0Nc4YxlorOjKJLJM9S62JO2D9znUn6KnRvrzsclhyUzI
5: Host: ******:2222
6: Referer: http://******:2222/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html
7: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
Checking referer http://******:2222/CMD_PLUGINS/modsecurity_editor/dodaj_regolke.html to ******:2222
Referer check passed: = 2222=2222
auth.authenticated
auth.authenticated
auth.authenticated
Command::run: finished /IMG_SKIN_NAV_WEBMAIL
Command::run: finished /IMG_SKIN_NAV_BG
Command::run: finished /IMG_SKIN_NAV_WEBMAIL_OVER
Send::sendFile(’./data/skins/enhanced/lang/pl/images/nav-webmail-over.gif’, ‘(null)’)
Send::sendFile(’./data/skins/enhanced/lang/pl/images/nav-webmail.gif’, ‘(null)’)
Send::sendFile(’./data/skins/enhanced/images/nav-bg.gif’, ‘(null)’)

a to jest kod samego pluginu po Twoich zmianach:

#!/usr/local/bin/php
<?php $_POST = Array(); $POST_STRING=getenv('POST'); if ($POST_STRING != "") { parse_str(html_entity_decode($POST_STRING), $post_array); foreach ($post_array as $key => $value) { $_POST[urldecode($key)] = urldecode($value); } } if(isset($_POST['idregolki'])) { $txt= 'SecRuleRemoveById '.$_POST['idregolki'] . PHP_EOL; file_put_contents('custom_rules.conf', $txt, FILE_APPEND); } ?>

Skrypt ueuchomiony jako <?php echo shell_exec("whoami");?>

<?php echo shell_exec("cp custom_rules.conf /usr/local/directadmin/custombuild/custom/modsecurity/");?>

plik custom_rules.conf jest pusty, więc nic się nie zmieniło

Nie wyświetla ze względów bezpieczeństwa. Włącz debugowanie: https://help.directadmin.com/item.php?id=293

Przecież właśnie podałem debug mode z tego :slight_smile:

Tak jak mówiłem nie miałem nigdy do czynienia z DA.

Ciężko mi będzie raczej pomóc bo kompletnie nie wiem co się kryje pod niektórymi nazwami takimi jak dodaj_regolke.html. Coś mi się wydaje, że źle dodajesz/uruchamiasz ten plugin bo nie wiem dlaczego (tak się domyślam) uruchamiasz go innym skryptem php.

Ogólnie coś mi grubo nie leży w tym co piszesz - to jak dodajesz plugin. Raczej bez weryfikacji wszystkiego we własnym zakresie - czyli przez wbicie się na serwer, to długo możemy dochodzić do tego co zrobiłeś źle. Być może ktoś kto już miał do czynienia z pisaniem pluginów do DA będzie wiedział z własnego doświadczenia co mogłeś zrobić niepoprawnie.

OK - dzięki za chęć pomocy tak czy inaczej, ogólnie tak jak mówię ten skrypt działa uruchamiając go po za DA, plik dodaj_regolke.html to po prostu cały kod php dodający ID do pliku ale rozumiem, że mogą tu wchodzić jakieś specyficzne żeczy związane z DirectAdminem, na serwer w sumie mogę wpuścić, mam specjalny serwer z DirectAdminem pod testy, na którym nie ma żadnych danych, pytanie czy chcesz się dalej tym bawić - jeśli nie - no cóż - dzięki za chęci.

Dzisiaj odpoczywam, za dużo się działo w ostatnim tygodniu. Jeśli miałbym zgadywać to wydaje mi się, że źle utworzyłeś plugin DA.