Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 23-02-2003, 14:59
niemand
Avatar van niemand
niemand is offline
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

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

Laatst gewijzigd op 23-02-2003 om 15:05.
Met citaat reageren
Advertentie
Oud 23-02-2003, 16:00
Koen
Avatar van Koen
Koen is offline
Citaat:
//en zo gaat dit dus nog 30x door
waarom zet je dit niet in een for loop?
Met citaat reageren
Oud 23-02-2003, 16:18
niemand
Avatar van niemand
niemand is offline
Citaat:
Koen schreef:
waarom zet je dit niet in een for loop?
omdat ik daar toen niet aan gedacht had, dat komt nog
Met citaat reageren
Oud 23-02-2003, 21:13
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Er is al een webserver in PHP.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 23-02-2003, 22:07
niemand
Avatar van niemand
niemand is offline
Citaat:
Manuzhai schreef:
Er is al een webserver in PHP.
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
Met citaat reageren
Oud 24-02-2003, 12:55
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
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
Met citaat reageren
Oud 24-02-2003, 13:07
niemand
Avatar van niemand
niemand is offline
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
Met citaat reageren
Oud 24-02-2003, 13:12
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
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
Met citaat reageren
Oud 24-02-2003, 13:16
niemand
Avatar van niemand
niemand is offline
Citaat:
Dr HenDre schreef:
kan da dan bij iis
geen idee, maar dat kon eerst wel bij mijn server
Met citaat reageren
Oud 24-02-2003, 13:19
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Citaat:
niemand schreef:
geen idee, maar dat kon eerst wel bij mijn server
k d8 al
Met citaat reageren
Oud 25-02-2003, 18:58
P=Hp²
P=Hp² is offline
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)){ 
Met citaat reageren
Oud 25-02-2003, 19:24
niemand
Avatar van niemand
niemand is offline
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
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar

Soortgelijke topics
Forum Topic Reacties Laatste bericht
Software & Hardware [Server-side scripting] PHP of JSP?
DZHAW
45 16-07-2007 15:06
Software & Hardware Linux / Windows2000 server ?
eyeliner
5 11-03-2002 16:30


Alle tijden zijn GMT +1. Het is nu 17:24.