Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] is deze webserver veilig? (https://forum.scholieren.com/showthread.php?t=386805)

niemand 23-02-2003 14:59

[PHP] is deze webserver veilig?
 
ik heb zelf een webservertje geschreven in php, heel simpel, hij kan ook alleen GET requests maar dat is voldoende
maar nu wil ik weten of ie echt veilig is, dus dat er geen enkele manier is om te hacken, en als die er wel is graag hoe je dat in dat geval doet

hoe ie werkt is als volgt:
- hij start 32 processes van zichzelf
- elk proces wacht op een connection
- als er een connection is word er gezocht naar de regel met 'GET'
- shell chars worden geescaped
- als wat opgevraagd word eindigd met / dan word er 'index.php' achter gezet
- er word gekeken of er geen '..' voorkomt in de file, anders foutmelding
- er word gekeken of de file bestaat, anders foutmelding
- als de file eindigt op .php word er 'php <file>' uitgevoerd
- de output van php of gewoon het file als het geen .php was word teruggestuurd

het gaat om de onderstaande code:

Code:

<?php

ob_implicit_flush ();

set_time_limit (0);

error_reporting(1);

$sock = socket_create (AF_INET, SOCK_STREAM, getprotobyname("TCP"));
socket_bind ($sock, "145.53.41.114", 82);
socket_listen($sock);
socket_accept($sock);

$pid = pcntl_fork();
if ($pid == -1) {
    die("could not fork");
} else if ($pid) {
        $pid = pcntl_fork();
        if ($pid == -1) {
                        die("could not fork");
        } else if ($pid) {
                $pid = pcntl_fork();
                if ($pid == -1) {
                                die("could not fork");
                } else if ($pid) {
                    //en zo gaat dit dus nog 30x door
                } else {
                httpd($sock);
                }
        } else {
        httpd($sock);
        }

} else {
httpd($sock);
}


function httpd($sock) {
        while (true) {usleep(1000);
                $msgsock = socket_accept($sock);

        //        while(true){
                        usleep(5000);
                        $buf = socket_read ($msgsock, 2048);
                        if (empty($msgsock)){break;}

                        $buf = explode("\n", $buf);
                        $buf = $buf[0];
                        if (ereg("^GET", $buf)) {
                                $buf = explode(" ", $buf);
                                $buf = $buf[1];
                                $buf = trim($buf);
                                //if (!empty($buf)){echo $buf."\n";}
                                $buf = escapeshellcmd ($buf);
                                if (ereg("\.\.", $buf)){
                                        $buf = "/nicetry.php";
                                }
                                if (ereg("/$", $buf) || empty($buf)){
                                        $buf .= "index.php";
                                }
                                $filename = "/var/www/htdocs".$buf;
                                if(!file_exists($filename)){
                                        $filename = "/var/www/htdocs/nicetry.php";
                                }
                                $fd = fopen ($filename, "r");
                                while (!feof ($fd)) {
                                        $msg .= fgets($fd, 4096);
                                }
                                fclose ($fd);
                                $msg .= "\r\n";
                                if (ereg("\.php$", $filename)){
                                        $msg = "";
                                        $exec = "php ".$filename;
                                        $msg = `$exec`;
                                        $msg = substr($msg, 49)."\n";
                                }
                                socket_write ($msgsock, $msg, strlen ($msg));
                        }
                //}
                socket_close ($msgsock);
        }
}

?>

let niet teveel op de rommel :p

wat overigens wel werkt is 32 connections openen, maar dan reageert de webserver alleen niet meer, je kan geen schade toebrengen aan de server waarop ie draait, en dat is waar het om gaat

hij draait op een netbsd of op een slackware linux

Koen 23-02-2003 16:00

Citaat:

//en zo gaat dit dus nog 30x door
waarom zet je dit niet in een for loop?

niemand 23-02-2003 16:18

Citaat:

Koen schreef:
waarom zet je dit niet in een for loop?
omdat ik daar toen niet aan gedacht had, dat komt nog :)

Manuzhai 23-02-2003 21:13

Er is al een webserver in PHP. :D

niemand 23-02-2003 22:07

Citaat:

Manuzhai schreef:
Er is al een webserver in PHP. :D
duh, er zijn er al zoveel
het ging mij er vooral om leren hoe je zoiets kan schrijven

maar ik heb nu een heel eenvoudige webserver nodig die wel goed dicht zit, dus daarvoor wou k deze gaan gebruiken, zo veel eenvoudiger (daarmee bedoel ik niet in code maar in mogelijkheden) kan een webserver denk ik niet zijn
behalve php support schrappen maar dat heb k nodig

Dr HenDre 24-02-2003 12:55

euhm, er is geen webserver dat 100% veilig is, die van jou owk niet neem ik aan. Je kan het proberen zo veilig mogelijk te maken maar dat is nooit voor 100%. Zelfs de computers van de regering worden gehachkt, terwijl daar specialisten werken, maar ken voor de rest geen php

niemand 24-02-2003 13:07

Citaat:

Dr HenDre schreef:
euhm, er is geen webserver dat 100% veilig is, die van jou owk niet neem ik aan. Je kan het proberen zo veilig mogelijk te maken maar dat is nooit voor 100%. Zelfs de computers van de regering worden gehachkt, terwijl daar specialisten werken, maar ken voor de rest geen php
ik heb het niet over 100% veilig
maar iig niet zo lek als IIS ofzo
want simpele dingen zoals dat je niet
http://host/../../../etc/passwd
kan opvragen, dat soort dingen wil ik er wel uithalen

Dr HenDre 24-02-2003 13:12

Citaat:

niemand schreef:
ik heb het niet over 100% veilig
maar iig niet zo lek als IIS ofzo
want simpele dingen zoals dat je niet
http://host/../../../etc/passwd
kan opvragen, dat soort dingen wil ik er wel uithalen

kan da dan bij iis :eek:

niemand 24-02-2003 13:16

Citaat:

Dr HenDre schreef:
kan da dan bij iis :eek:
geen idee, maar dat kon eerst wel bij mijn server :p

Dr HenDre 24-02-2003 13:19

Citaat:

niemand schreef:
geen idee, maar dat kon eerst wel bij mijn server :p
k d8 al :) ;)

P=Hp² 25-02-2003 18:58

Kleine bug:
PHP-code:

if (ereg("\\\.\\\."$buf)){ 

Die Pattern geeft ook een match bij een bestand met een (toegegeven ietwat vreemde) naam als bv "bla... bla.txt". Probeer het eens met deze hier:
PHP-code:

if (ereg("/\\\.\\\./"$buf)){ 


niemand 25-02-2003 19:24

Citaat:

P=Hp² schreef:
Kleine bug:
PHP-code:

if (ereg("\\\.\\\."$buf)){ 

Die Pattern geeft ook een match bij een bestand met een (toegegeven ietwat vreemde) naam als bv "bla... bla.txt". Probeer het eens met deze hier:
PHP-code:

if (ereg("/\\\.\\\./"$buf)){ 


klopt, zal k er nog in zetten


Alle tijden zijn GMT +1. Het is nu 11:32.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.