Hello rootKitty!

Le lehet tölteni valahogy wget-tel a target.php-t (az legalsó kód)
anélkül, hogy tudod a valódi nevét és helyét?

A mai szülészetem eredménye:

index.php:


<?php ?>
<frameset rows='*' cols='*' >
<frame src="deny.php?ezittaquerystring" name="randomframename">
</frame></frameset><?php ?>

Ctrl-U, bejön az oldal forrása (mert jobb fül letiltva),

de óh jaj a deny.php?ezittaquerystring-re kattintva

az oldal forrása:

The requested URL's not found this server.

wget-tel letámadtam deny.php-t ("query_string"-gel is)

de akkor is csak: The requested... lett a letöltött file tartalma.

robots.txt-nek a szokásos 404-re átirányító van berakva,
(össz könyvtárba ugyanilyen index.php)

(szerk.
az összes oldalon tiltva a jobb-klikk,
a státuszsor kíméletlenül üresre írva onMouseOver-kor is.)

De attól tartok, hogy mégiscsak elnéztem valamit,
és simán levadászható vagyok.

deny.php:


<?php 
$getinkocsord = 'akarminevugetvaltozo';
if (isset($_GET[$getinkocsord])) { 
?><script type="text/javascript">
window.location.href = "<?php 
echo "http://".$_SERVER['HTTP_HOST']."/dir/target.php"; 
?>";</script><?php exit(); 
} else {
$bye = "The requested URL's not found this server.";
if (!($_SERVER['HTTP_REFERER'] == "http://www.domainnev.hu/index.php")) 
   { die ($bye); }
if (! ($_SERVER['QUERY_STRING'] == "ezittaquerystring") 
    ) { die($bye);}
?><script type="text/javascript">
window.location.href = window.location + "=0&".$getinkocsord."=0";
</script><?php
}
?>

target.php:


<?php ?><body oncontextmenu="return false"><?php
echo "Hello, rootKitty!";
?>

Hozzászólások

Bar nem egeszen ertem, hogy mit akarsz csinalni, de abban biztos vagyok, hogy ez nem jo.

Amugy minek letiltani a context menut?

A refererrel meg nem mesz sokra, azt barmilyen HTTP kliensben allitani lehet. Sot, barmilyen HTTP headert allitani lehet.

1. próbáld ki, működik target.php utáni mélységekben is.

2. "oldal forrása", "oldal adatai"

3. HTTP_REFERER - tudom :(

"Mivel ez is a felhasználótól jön, nem érdemes nagyon megbízni benne, még akár egy egyszerű telnet klienssel, vagy valamilyen nyílt forrású böngésző átírásával is könnyen lehet hamisítani. Ettől függetlenül érdemes lehet egy plusz védelmi vonalként használni, megvizsgálni, hogy az űrlapokon keresztül beérkező adatok tényleg a mi űrlapunk kitöltésével kerültek-e hozzánk."

Nálam marad a böngésző átírás, mert telnet tiltva.

Nem dicsekedni írtam ide, hanem szétcincálásra :)

2.) jo, de erre tamaszkodva nem ersz el semmit, csak bosszantod a felhasznaloidat. Kismillio modja van, hogy ez ne mukodjon egy oldalon, vagy ne erjen semmit (gyorsbillentyu, firebug/inspector, noscript stb).

3.) itt telnet kliens alatt nem tavoli hozzaferest ertenek, hanem azt, hogy ha egy telnet klienssel belepsz a 80-as portra (tehat nyitsz egy socket-et), es beirod a nyers HTTP kerest, akkor ugyanott vagy (a szerver szempontjabol), mintha bongeszovel nezed meg. Olvass utana egy kicsit a HTTP protokollnak es ugy altalaban a halozat mukodesenek.

Amugy ha urlap vedelmet akarsz (gondolom CSRF ellen akarsz vedekezni), akkor valami token rendszerrel lenne erdemes foglalkozni (minden form-nak van egy ID-je, amit megtartasz valameddig, es csak olyan formot fogadsz el, aminel jo az ID).

"Nálam marad a böngésző átírás, mert telnet tiltva."

Hogy ellenőrzöd, hogy rendes webböngészővel, telnettel vagy wget-tel használják?

"simán levadászható vagyok."

Persze. Elég megcsinálni ugyanazt, mint a böngésző:

wget http://www.domainnev.hu/deny.php?ezittaquerystring --referer=http://www.domainnev.hu/index.php

1. Mit akarsz?
2. Ezek semmit se érnek. Amit a webböngésző tud, azt a kliens felhasználó is megtudhatja.

wget miatt átírtam:

deny.php:


<?php 
$sessionkocsord = 'akarminevugetvaltozo';
if ( isset($_SESION['sessionkocsord']) ) { 
  if ( $_SESION['sessionkocsord'] == $sessionkocsord ) { 
  unset($_SESION['sessionkocsord']);
  }
?><script type="text/javascript">
window.location.href = "<?php 
echo "http://".$_SERVER['HTTP_HOST']."/dir/target.php"; 
?>";</script>
<?php exit(); 
} else {
$bye = "The requested URL's not found this server.";
if (!($_SERVER['HTTP_REFERER'] == "http://www.domainnev.hu/index.php")) 
   { die ($bye); }
if (! ($_SERVER['QUERY_STRING'] == "ezittaquerystring") 
    ) { die($bye);}

$_SESSION['sessionkocsord'] = $sessionkocsord; 
?>
<script type="text/javascript"> 
window.location.href = window.location; 
</script>
<?php
}
?>

most, ha wget-tel (--referer=...) letámadom "deny.php?ezittaquerystring"-et,

akkor is csak ezt kapom forrásnak:

<script type="text/javascript"> 
window.location.href = window.location; 
</script>

Remélem, innen erre nincs tovább.

A form űrlapokat ellenőrzöm, egy aposztróf megengedett,
O'Brien16 Pi-Stuka még átmegy, de semmi zárójel, kulcsszó stb.
ha valakit DROP-nak vagy ilyennek hívnak, az menjen gyalog, ne itt a dróton.

Már csak azt kéne tudnom, hogy ezen a héten mi a neve a

window.status

-nak...

mert ebből

function kiir() { 
window.status="Nincs itt semmi!"; alert('ugorgyunk')
}
</script>

sajnos

onMouseOver="setTimeout(kiir(),200);"

esetén csak az alert müxik.

Természetesen dehogynem, ha wget-hez ragaszkodunk (bár egyszerűbb Firebug és hasonló webböngésző-kiterjesztésekkel):
(szerk.:)
wget http://www.domainnev.hu/deny.php?ezittaquerystring --referer=http://www.domainnev.hu/index.php --save-cookies cookies.txt --keep-session-cookies
wget http://www.domainnev.hu/deny.php?ezittaquerystring --referer=http://www.domainnev.hu/index.php --load-cookies cookies.txt

Hidd el, ilyenek nem érnek semmit, olyannal szemben főleg nem, aki egy SQL injction vagy hasonló támadást meg tudnak csinálni. Azt feltételezed, hogy ha valamit te az általad ismert kevés eszközzel nem lehet megcsinálni, akkor nem lehet megcsinálni. Ne vacakolj, ellenőrizd az űrlapadatokat szerverodalon.

1.) ez a refresh-es trukk a wget-et megneheziti, de ez meg mindig csak security by obscurity, tehat a sutik hamisitasaval (megnezem bongeszoben az oldalt, majd onnan a sutiket hasznalva curl-lel postolok preparalt post adatot) meg mindig nem tudsz mit kezdeni igy, csak hamis biztonsagerzeted lesz

2.) form urlapok: minek ilyen korlatozasokat tenni? nem egyszerubb:
- numerikus adat eseten kikenyszeriteni a tipust
- stringnel hasznalni a mysql_real_escape_string()/pg_escape_string()/stb fuggvenyeket (amik pont erre valoak?)
- egyeb adatnal (binaris adat) specialis szures
modszerrel eljarni?

3.) azt tudod, hogy a `setTimeout(kiir(), 200)` kifejezes eloszor lefuttatja a kiir() fuggvenyt, majd a visszateresi erteket adja parameterul a setTimeout()-nak; amit te szeretnel, az a `setTimeout(kiir, 200)`

1.) süti az nincs, ha lesz, akkor sem lesz egyszerű bármit kihámozni belőle.
- a session-ben tárolt cuccoknak is $kisorsolt nevük van az adott session-re, éppúgy mint post változóknak. Az akarmi.php?semmire=nem&használom=és olvashatatlan az aktuális session-re érvényes randomnevü get értékekkel van ellátva, hátha nagyon ráér valaki.

2.) az van amit mondasz, csak én nem bírtam rendesen megmondani.
- bináris adat nem töltődik fel.

3.) lehet, hogy amikor befejezem a(z akármilyen) ténykedésemet, utána felülíródik a státuszsor a href linkkel?

Nem kell tudnia, elküldi azt, amit te küldtél el neki az első http kéréskor, ugyanúgy, mint a webböngésző.

Miután még mindig nem jöttél rá, hogy az elv a hibás, fizess meg valakit, akinek van lövése a HTTP-ről meg egy kevés a biztonságról, vagy ne számíts arra, hogy biztonságos lesz, amit csinálsz.

akkor most erre az ombudsmanusnak kell gombot varnia:

- a támadó ne láthassa hivatkozásaimat a státussorban.
- én láthassam a támadó weboldal linkjeit
( persze egy <image akarmi.necc /> az büdös kukk nélkül keresztül suhan rajtam ).

Bezzeg noscriptes disznóságot azt nyugodtan elkövethetnék.

az ilyenekben szoktak lenni ilyenek:


2010.04.12. 15:55:46 - A IMON - internetes vedelem program a kovetkezo virusriasztast kuldte: 
unknown:  http://www.alleregina.hu/index3.html 
fertozes: JS/TrojanDownloader.Pegel.AA trojai.

2010.04.12. 16:06:10 - A IMON - internetes vedelem program a kovetkezo virusriasztast kuldte: 
http://www.filmtekercs.hu/ > GZ > file.htm 
fertozes: JS/TrojanDownloader.Pegel.AA trojai.

A userek ilyenekbe szoktak nálam beletenyerelni.

... illetve csúnyán nem taboltam.
Ennél a pár sornál itt fölöslegesnek tűnt.

Normál esetben pl. már azt az egy árva frame is beljebb van egy tab-bal.


if () {
   //...
   if () {
       uff();
   }
   off();
} else {
   piff();
   paff( hát, ez, bizony
       , baromi, hosszú, sor
       , lett, ahogy, nézem
       );
   puff();
}

Nem kellett külön trükköket alkalmaznom, szép simán minden cracker technika nélkül ugyanabban a böngészőben a második megnyitott lap után kijátszottam a szép kis javított védelmemet is
(csak azért, hogy tudjátok, - hogy tudom, hogy nem tudom amit kéne).