<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Łukasz Pilorz</title>
	<link>http://lukasz.pilorz.net</link>
	<description></description>
	<pubDate>Sat, 28 Jun 2008 09:53:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2</generator>
	<language>en</language>
			<item>
		<title>Praca - bezpieczeństwo aplikacji PHP</title>
		<link>http://lukasz.pilorz.net/2008/06/27/praca-bezpieczenstwo-aplikacji-php/</link>
		<comments>http://lukasz.pilorz.net/2008/06/27/praca-bezpieczenstwo-aplikacji-php/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 16:24:55 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/2008/06/27/praca-bezpieczenstwo-aplikacji-php/</guid>
		<description><![CDATA[Jeżeli

doskonale znasz popularne metody ataków na serwisy internetowe
biegle programujesz w PHP
pasjonują Cię testy penetracyjne oraz analiza kodu aplikacji webowych

- skontaktuj się ze mną.
A tymczasem, na rozgrzewkę - pierwszej osobie, która poprawnie opisze, w jaki sposób poniższy skrypt broni się przed XSS, i zaprezentuje działające demo (IE7, FF3) w jaki sposób można to zabezpieczenie obejść, przesyłam [...]]]></description>
			<content:encoded><![CDATA[<p><span>Jeżeli</span></p>
<ul>
<li>doskonale znasz popularne metody ataków na serwisy internetowe</li>
<li>biegle programujesz w PHP</li>
<li>pasjonują Cię testy penetracyjne oraz analiza kodu aplikacji webowych</li>
</ul>
<p><span>- skontaktuj się ze mną.</span></p>
<p>A tymczasem, na rozgrzewkę - pierwszej osobie, która poprawnie opisze, w jaki sposób poniższy skrypt broni się przed XSS, i zaprezentuje działające demo (IE7, FF3) w jaki sposób można to zabezpieczenie obejść, przesyłam książkę (do uzgodnienia - ostatnio &#8220;Silence on the Wire&#8221;):<br />
<a href="http://lukasz.pilorz.net/testy/hackme2/">http://lukasz.pilorz.net/testy/hackme2/</a></p>
<p><b>Aktualizacja:</b> <a href="http://irk4z.wordpress.com/">irk4z</a> przesłał już rozwiązanie, a kod skryptu wrzuciłem na <a href="http://lukasz.pilorz.net/testy/hackme2/index.phps">http://lukasz.pilorz.net/testy/hackme2/index.phps</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2008/06/27/praca-bezpieczenstwo-aplikacji-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JS Portscanning + DNS Rebinding</title>
		<link>http://lukasz.pilorz.net/2007/12/15/js-portscanning-dns-rebinding/</link>
		<comments>http://lukasz.pilorz.net/2007/12/15/js-portscanning-dns-rebinding/#comments</comments>
		<pubDate>Sat, 15 Dec 2007 01:00:06 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/12/15/js-portscanning-dns-rebinding/</guid>
		<description><![CDATA[DNS Rebinding polega na podmianie adresu IP domeny pomiędzy kolejnymi żądaniami skierowanymi do niej. W ten sposób można uzyskać dostęp na przykład do zasobów sieci lokalnej, w której znajduje się ofiara. W połączeniu z javascriptowym skanowaniem portów i fingerprintingiem aplikacji pozwala stworzyć ciekawe scenariusze ataku. Przykład:

użytkownik łączy się ze stroną http://lukasz.pilorz.net z sieci swojej firmy [...]]]></description>
			<content:encoded><![CDATA[<p>DNS Rebinding polega na podmianie adresu IP domeny pomiędzy kolejnymi żądaniami skierowanymi do niej. W ten sposób można uzyskać dostęp na przykład do zasobów sieci lokalnej, w której znajduje się ofiara. W połączeniu z javascriptowym skanowaniem portów i fingerprintingiem aplikacji pozwala stworzyć ciekawe scenariusze ataku. Przykład:</p>
<ul>
<li>użytkownik łączy się ze stroną http://lukasz.pilorz.net z sieci swojej firmy (w sieci lokalnej ma dostęp do aplikacji phpMyAdmin niedostępnej z zewnątrz, i w związku z tym niechronionej hasłem)</li>
<li>JavaScript sprawdza czy na którymś hoście w sieci lokalnej otwarty jest port 80 (może to być również localhost), a dla otwartych portów próbuje znaleźć popularne aplikacje (ze względu na same-origin JS nie ma dostępu read/write, ale może próbować np. wczytać obrazki ze znanych ścieżek)</li>
<li>po znalezieniu phpMyAdmina, JS w ukrytej ramce otwiera skrypt z domeny dnsrebinding.securityexploits.com</li>
<li>skrypt PHP na dnsrebinding.securityexploits.com zmienia wpis DNS dla tej domeny na adres przekazany mu w parametrze (np. 127.0.0.1)</li>
<li>JS na dnsrebinding.securityexploits.com wykorzystuje LiveConnect do otwarcia socketa do tej samej domeny, ale IP jest już zmienione na adres sieci lokalnej</li>
<li>JS ma teraz pełny dostęp read/write do portu 80 (np. na 127.0.0.1), może dowolnie kształtować żądania HTTP (metody, nagłówki, treść)</li>
<li>JS wczytuje token potrzebny do wykonania ataku CSRF na phpMyAdmina</li>
<li>JS ukryty na http://lukasz.pilorz.net może teraz wykonywać dowolne zapytania SQL na phpMyAdminie w sieci lokalnej ofiary</li>
</ul>
<p>Oczywiście skrypt może posiadać sygnatury dla większej ilości aplikacji niż tylko phpMyAdmin, i w ten sposób zwiększać szanse powodzenia ataku. Poza CSRF, skaner mógłby też po prostu wczytywać zawartość niechronionych stron w sieci lokalnej i wysyłać na zewnętrzny serwer (we wcześniejszym wyszukaniu odpowiednich adresów może pomóc <a href="http://ha.ckers.org/fierce/">Fierce</a>). Inne zastosowanie to ominięcie firewalli i lokalny dostęp na przykład do portu 139.</p>
<p>Powyższy scenariusz bazuje na ataku DNS rebinding z wykorzystaniem LiveConnect - ta metoda została już zablokowana, dlatego mogę opublikować praktyczny przykład:<br />
http://lukasz.pilorz.net/testy/dnsrebinding/scanner.phps - skaner w JS<br />
http://lukasz.pilorz.net/testy/dnsrebinding/phpmyadmin_exec.phps - atak DNS rebinding na phpMyAdmina</p>
<p>Więcej informacji można znaleźć w tekstach na których bazowałem tworząc powyższy skrypt:</p>
<ul>
<li><a href="http://www.jumperz.net/index.php?i=2&#038;a=1&#038;b=9">Anti-DNS Pinning + Java in JavaScript</a></li>
<li><a href="http://shampoo.antville.org/stories/1566124/">Using Java in anti DNS-pinning attacks</a></li>
<li><a href="http://blog.php-security.org/archives/54-JavaScriptHTML-Portscanning-and-HTTP-Auth.html">JavaScript/HTML Portscanning and HTTP Auth</a></li>
<li><a href="http://blog.php-security.org/archives/56-Bruteforcing-HTTP-Auth-in-Firefox-with-JavaScript.html">Bruteforcing HTTP Auth in Firefox with JavaScript</a></li>
<li><a href="http://sectheory.com/intranet-hacking.htm">Hacking Intranets Through Web Interfaces</a></li>
<li><a href="http://www.gnucitizen.org/projects/attackapi/">AttackAPI</a></li>
</ul>
<p>Kolejna notka (czwarta część cyklu o testach, dotycząca ataków na mechanizmy logowania i zmiany hasła) pojawi się dopiero w Nowym Roku.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/12/15/js-portscanning-dns-rebinding/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Testowanie bezpieczeństwa aplikacji internetowych - część 3: Słowniki wartości testowych</title>
		<link>http://lukasz.pilorz.net/2007/10/08/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-3-slowniki-wartosci-testowych/</link>
		<comments>http://lukasz.pilorz.net/2007/10/08/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-3-slowniki-wartosci-testowych/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 17:33:03 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/10/08/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-3-slowniki-wartosci-testowych/</guid>
		<description><![CDATA[Słowniki wartości testowych, zastosowanie Burp Intruder
Podstawowym i najciekawszym elementem testów bezpieczeństwa serwisów internetowych jest symulowanie praktycznych ataków na aplikację. Podobnie jak w przypadku analizy kodu źródłowego, nie istnieje narzędzie, które potrafiłoby całkowicie wyręczyć w tym zadaniu człowieka, jednak bez przynajmniej częściowej automatyzacji trudno byłoby rzetelnie przeprowadzić ten etap testów. W rzeczywistym ataku wystarcza często jedna [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Słowniki wartości testowych, zastosowanie Burp Intruder</strong></p>
<p>Podstawowym i najciekawszym elementem testów bezpieczeństwa serwisów internetowych jest symulowanie praktycznych ataków na aplikację. Podobnie jak w przypadku analizy kodu źródłowego, nie istnieje narzędzie, które potrafiłoby całkowicie wyręczyć w tym zadaniu człowieka, jednak bez przynajmniej częściowej automatyzacji trudno byłoby rzetelnie przeprowadzić ten etap testów. W rzeczywistym ataku wystarcza często jedna luka, na znalezienie której nie obowiązują żadne limity czasowe, podczas gdy celem symulacji jest znalezienie wszystkich (w praktyce: większości) błędów w stosunkowo krótkim czasie.</p>
<p>Automatyzacja testów wymaga przygotowania zestawów wartości reprezentujących poszczególne próby ataków. Słowniki takich wartości są częścią wielu współczesnych skanerów aplikacji webowych, jednak ponieważ skanery nie są w stanie określić kontekstu i znaczenia poszczególnych parametrów oraz analizować rezultatów, często bywają niemal bezużyteczne. Proponuję zamiast tego wykorzystać wiedzę o aplikacji zdobytą w trakcie jej analizy i przygotować osobne słowniki dla poszczególnych typów parametrów. Wymaga to oczywiście znacznie więcej czasu niż uruchomienie skanera, ale myślę że warto.</p>
<p>Przykład słownika i jednocześnie zastosowania narzędzia Burp Intruder będzie oparty o parametr wyboru podstrony serwisu. Metoda określenia jego wartości może przybrać różne formy, między innymi:</p>
<ul>
<li>http://example.com/index.php?id=123</li>
<li>http://example.com/index.php?strona=nazwa_podstrony</li>
<li>http://example.com/index.php?strona=nazwa_podstrony.html</li>
<li>http://example.com/index.php/nazwa_podstrony/</li>
<li>http://example.com/123/</li>
<li>http://example.com/nazwa_postrony/</li>
<li>http://example.com/nazwa_podstrony.html</li>
<li>http://example.com/nazwa_podstrony.php</li>
</ul>
<p>W pierwszych czterech przypadkach jest w miarę oczywiste, że wybór podstrony bazuje na wartości pewnej zmiennej, w pozostałych jednak trudno powiedzieć, czy nie zostały wykorzystane reguły mod_rewrite. Typowy skaner &#8220;zauważy&#8221; i sprawdzi prawdopodobnie tylko trzy pierwsze opcje, często nie mamy też pewności jakiego typu podatności jest faktycznie w stanie wykryć.</p>
<p>Spróbujmy wykorzystać Burp Suite do przeprowadzenia własnego zestawu testów. Ustawiamy cel w zakładce intruder-&gt;target, a następnie w intruder-&gt;position wybieramy typ ataku &#8220;sniper&#8221; i wstawiamy żądanie HTTP z identyfikatorem podstrony zastąpionym przez §1§, na przykład:<br />
<code>GET /index.php?id=§1§ HTTP/1.1<br />
Host: example.com</code><br />
(można też wykorzystać odpowiednie żądanie zapisane w spiderze).</p>
<p>Teraz należy uzupełnić listę wartości, które będą wstrzykiwane w miejsce §1§. Proponuję w intruder-&gt;payloads wybrać &#8220;preset list&#8221; z następującym zestawem (najłatwiej jest zapisać go w pliku):<br />
<code>1<br />
2<br />
3<br />
4<br />
0<br />
-1<br />
1'<br />
1"<br />
1%BF<br />
1%C5%BC<br />
1 OR 1=1<br />
1 OR 1=1/*<br />
1||1=1<br />
1||1=1/*<br />
1test<br />
1test&lt;script&gt;<br />
1test&lt;b&gt;<br />
1test'"&gt;test<br />
1test'"test<br />
test<br />
index<br />
index.php<br />
index.php%00<br />
../index<br />
../index.php<br />
../index.php%00<br />
../../index<br />
../../index.php<br />
../../index.php%00<br />
/etc/passwd<br />
/etc/passwd%00<br />
../../../../../../etc/passwd<br />
../../../../../../etc/passwd%00<br />
http://lukasz.pilorz.net/testy/inc/inc.php<br />
http://lukasz.pilorz.net/testy/inc/inc.php%00<br />
http://lukasz.pilorz.net/testy/inc/inc.php?<br />
http://lukasz.pilorz.net/testy/inc/inc.html<br />
http://lukasz.pilorz.net/testy/inc/inc.txt<br />
http://lukasz.pilorz.net/testy/inc/inc<br />
php://input</code></p>
<p>Kilka pierwszych wartości ma na celu sprawdzenie, jak wygląda odpowiedź serwera dla poprawnych lub nieistniejących identyfikatorów, kolejne powinny zweryfikować czy zmienna jest rzutowana na typ liczbowy, a także wykryć ewentualną podatność na SQL injection lub XSS. Druga połowa listy jest przeznaczona dla sytuacji, gdy parametr określa nazwę dołączanego pliku podstrony (ostatnia wartość wymaga dodatkowego testu z kodem PHP w treści żądania POST). Oczywiście powyższy zestaw można modyfikować i uzupełniać własnymi testami (na przykład testy z &#8220;1&#8243; na początku powtarzając dla nieistniejącego identyfikatora). Pomocna może być funkcja grep (w zakładce opcji), dzięki której tablica wyników będzie nieco bardziej czytelna.</p>
<p>Po wypełnieniu listy wartości wybieramy w głównym menu pozycję intruder-&gt;start, czekamy krótką chwilę i możemy przeglądać wyniki, czyli odpowiedzi serwera na kolejne żądania (dwuklik na pierwszym wierszu w tabeli). Rezultat poszczególnych prób można czasem rozpoznać od razu po rozmiarze odpowiedzi serwera. W przeciwieństwie do testów z użyciem skanera, analiza wyników otrzymanych w Intruderze wymaga przynajmniej ogólnej wiedzy o atakach na aplikacje internetowe.</p>
<p>Dalszy ciąg tego tekstu oraz jego następne części będą zawierać podstawowe informacje o rozpoznawaniu podatności na poszczególne ataki, propozycje słowników dla określonych typów parametrów oraz przykłady luk, które istniały w rzeczywistych aplikacjach internetowych.</p>
<p><strong>Ataki związane z uploadem plików</strong></p>
<p>Typowe zagrożenia:</p>
<ul>
<li>umieszczenie na serwerze pliku z kodem wykonywalnym, do którego użytkownik może się odwołać bezpośrednio (test.php)</li>
<li>umieszczenie na serwerze pliku z kodem wykonywalnym, do którego użytkownik może się odwołać wykorzystując lukę pozwalającą na dołączenie lokalnego pliku (test.jpg + http://example.com/index.php?id=upload/test.jpg)</li>
<li>umieszczenie na serwerze pliku z kodem HTML, JavaScript, Flash, itp. (test.html)</li>
<li>nadpisanie istniejącego pliku (libs/db.inc)</li>
<li>zapisanie pliku w innym katalogu niż przewidziany (../../test.jpg)</li>
<li>nadpisanie tablicy $GLOBALS (PHP&lt;=4.4.0, PHP&lt;=5.0.5, <a href="http://www.hardened-php.net/advisory_202005.79.html">info</a>)</li>
<li>konfiguracja serwera umożliwiająca wykonanie kodu PHP/SSI w dowolnym pliku (xbithack, pliki zapisywane jako wykonywalne)</li>
<li>manipulowanie zawartością w celu wymuszenia na przeglądarce innego typu MIME niż przewidziany</li>
</ul>
<p>Zabezpieczenia obejmują zwykle zmianę lub weryfikację nazwy pliku, rozszerzenia (uwaga na pliki z <a href="http://httpd.apache.org/docs/1.3/mod/mod_mime.html#multipleext">wieloma rozszerzeniami</a>), typu MIME, a rzadziej - zawartości. Innym prostym rozwiązaniem (nie zawsze wystarczającym) jest wykorzystanie dyrektywy ForceType w konfiguracji Apache dla danego katalogu. Przy wyborze metody zabezpieczeń warto współpracować z administratorami serwera, aby uniknąć rozbieżności pomiędzy konfiguracją a zagrożeniami przewidzianymi w aplikacji.</p>
<p>Rozpoznanie podatności sprowadza się najczęściej do sprawdzenia, czy przy odczycie pliku uruchamiany jest kod PHP, lub czy przeglądarka interpretuje zwróconą zawartość jako HTML. Proponowany słownik wstrzykiwanych nazw plików:<br />
<code>test<br />
test.test<br />
test.jpg<br />
test.jpg.php<br />
test.php.jpg<br />
test.php.php<br />
test.php.tst<br />
test.php<br />
test.PhP<br />
test.PhP.tst<br />
test.php3<br />
test.php4<br />
test.php5<br />
test.phtml<br />
test.shtml<br />
test.html<br />
test.inc<br />
test.cgi<br />
../test.jpg<br />
/tmp/test.jpg<br />
test/test.jpg<br />
test.php%00.jpg<br />
test.jpg%00.php<br />
test&lt;script&gt;alert(0)&lt;/script&gt;.jpg</code><br />
Listy testowych zawartości plików nie opublikuję w najbliższym czasie, ale w razie uzasadnionej potrzeby jej posiadania zapraszam do kontaktu mailowego (lukasz na pilorz.net).</p>
<p>Luki związane z uploadem są jedną z najprostszych dróg ataku. Można je napotkać w ogromnej ilości niewielkich, amatorskich serwisów, ale czasem także w poważnych projektach. Serwis Secunia zapytany o <a href="http://secunia.com/search/?search=php+upload">php upload</a> zwraca ponad 250 wyników, z których znaczna część dotyczy właśnie tego typu błędów.</p>
<p>Prostym przykładem nieprawidłowego zabezpieczenia jest wykorzystanie następującego kodu, który pojawił się na jednym z portali poświęconych programowaniu:<br />
<code>$seg = explode(".", $nazwa_pliku);<br />
if($seg[1] == "jpg") {//OK<br />
//...</code></p>
<p>Pozwolę sobie przytoczyć również dwa nieco nietypowe przykłady takich luk (pozwalających na wykonanie własnego kodu PHP) pochodzące sprzed kilku tygodni z serwisów DobraOpcja.pl i Jogger.pl. W pierwszym przypadku walidacja typu/rozszerzenia pliku odbywała się wyłącznie we Flashu, po stronie przeglądarki. Zagrożenia wynikające z zastosowania technologii Flash są bardzo podobne (a w przypadku XSS nawet większe) do powszechnie znanych problemów związanych z JavaScriptem. Forma, w jakiej występują pliki SWF, może sprawiać wrażenie utrudnienia przy ataku, ale przechwycenie i modyfikacja żądań HTTP wysyłanych przez Flash jest równie prosta, jak dla XMLHttpRequest w skryptach JavaScript (jedyna różnica: w systemie Windows należy ustawić Burp Proxy dla Internet Explorera, a nie przeglądarki z której korzystamy).</p>
<p>Inna sytuacja miała miejsce w Joggerze, który znany jest z solidnych zabezpieczeń oraz dużej grupy użytkowników interesujących się bezpieczeństwem aplikacji internetowych. Mechanizm uploadu plików w tym serwisie posiadał ograniczenie na dopuszczalne rozszerzenia, a także przewidywał możliwość wstrzyknięcia bajtu zerowego w nazwie, jednak w wyniku prostego błędu programistycznego warunek ten nie był w pełni egzekwowany. W efekcie możliwa była zmiana nazwy pliku na zawierającą bajt zerowy i wstawienie dowolnego rozszerzenia pliku. Nawet najlepszym zdarzają się pomyłki, dlatego istotne jest by kluczowe funkcje były testowane z wykorzystaniem możliwie pełnego słownika.</p>
<p>Ciąg dalszy wkrótce.</p>
<p>Dziękuję Robertowi Wróblowi za uzupełnienie listy nazw plików oraz materiały do tej i kolejnych części tekstu.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/10/08/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-3-slowniki-wartosci-testowych/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails 2.0: wbudowana ochrona przed CSRF</title>
		<link>http://lukasz.pilorz.net/2007/10/07/rails-20-wbudowana-ochrona-przed-csrf/</link>
		<comments>http://lukasz.pilorz.net/2007/10/07/rails-20-wbudowana-ochrona-przed-csrf/#comments</comments>
		<pubDate>Sun, 07 Oct 2007 08:39:41 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/10/07/rails-20-wbudowana-ochrona-przed-csrf/</guid>
		<description><![CDATA[Niedawno narzekałem na RoR, a tymczasem w Rails 2.0 formularze są domyślnie chronione przed CSRF, zmienił się filtr zapobiegający XSS oraz dodano obsługę ciasteczek HTTPonly. Zwłaszcza pierwsza z tych zmian może znacznie zwiększyć bezpieczeństwo aplikacji. Polecam też Ruby on Rails Security Cheatsheet.
Jeśli ktoś czeka na trzecią część tekstu o testowaniu bezpieczeństwa aplikacji internetowych, to uspokajam: [...]]]></description>
			<content:encoded><![CDATA[<p>Niedawno <a href="http://lukasz.pilorz.net/index.php/2007/04/29/ruby-on-register_globals/">narzekałem</a> na RoR, a tymczasem w <a href="http://weblog.rubyonrails.com/2007/9/30/rails-2-0-0-preview-release">Rails 2.0</a> formularze są domyślnie chronione przed CSRF, zmienił się filtr zapobiegający XSS oraz dodano obsługę ciasteczek HTTPonly. Zwłaszcza pierwsza z tych zmian może znacznie zwiększyć bezpieczeństwo aplikacji. Polecam też <a href="http://www.rorsecurity.info/ruby-on-rails-security-cheatsheet/">Ruby on Rails Security Cheatsheet</a>.</p>
<p>Jeśli ktoś czeka na trzecią część tekstu o <a href="http://lukasz.pilorz.net/index.php/2007/09/15/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-1-identyfikacja-dostepnych-zasobow/">testowaniu</a> <a href="http://lukasz.pilorz.net/index.php/2007/09/24/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-2-analiza-funkcjonalnosci-aplikacji/">bezpieczeństwa</a> aplikacji internetowych, to uspokajam: jest gotowa i czeka tylko na odpowiedź jednego ze wspomnianych w niej serwisów.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/10/07/rails-20-wbudowana-ochrona-przed-csrf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Czarny tydzień Google</title>
		<link>http://lukasz.pilorz.net/2007/09/29/czarny-tydzien-google/</link>
		<comments>http://lukasz.pilorz.net/2007/09/29/czarny-tydzien-google/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 17:01:06 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/09/29/czarny-tydzien-google/</guid>
		<description><![CDATA[W tym tygodniu padło na Google. W ciągu kilku dni opublikowane zostały informacje o pięciu lukach w aplikacjach tej firmy. Z ciekawości wyszukałem informacje o podobnych zgłoszeniach w tym roku:
09/2007
http://sirdarckcat.blogspot.com/2007/09/google-mashups-vulnerability.html
http://xs-sniper.com/blog/2007/09/28/all-your-google-docs-are-belong-to-us/
http://www.thespanner.co.uk/2007/09/27/google-adsense-csrf-hole/
http://hackademix.net/2007/09/24/googhole-xss-pwning-gmail-picasa-and-almost-200k-customers/
http://www.gnucitizen.org/blog/google-gmail-e-mail-hijack-technique/
http://blog.beford.org/?p=3
http://websecurity.com.ua/1368/
http://sla.ckers.org/forum/read.php?3,15534,15534
08/2007
http://ha.ckers.org/blog/20070817/xss-hole-in-google-apps-is-expected-behavior/
http://sla.ckers.org/forum/read.php?4,15136,15136
06/2007
http://websecurity.com.ua/1049/
05/2007
http://www.0&#215;000000.com/index.php?i=319
http://www.earlofgrey.com/blog/major-google-security-flaw-to-remove-sites-from-the-index.html
04/2007
http://sla.ckers.org/forum/read.php?2,10960
03/2007
http://mybeni.rootzilla.de/mybeNi/2007/gmail_information_disclosure/
02/2007
http://www.watchfire.com/news/releases/02-21-07.aspx
http://ha.ckers.org/blog/20070222/google-desktop-the-saga-continues/
http://sla.ckers.org/forum/read.php?2,6505,6562
http://sla.ckers.org/forum/read.php?3,44,page=40#msg-7125
http://sla.ckers.org/forum/read.php?3,44,page=40#msg-7126
01/2007
http://googlified.com/2007follow-up-on-the-gmail-bug/
http://blogoscoped.com/archive/2007-01-14-n21.html
Czy jest to powód do unikania produktów Google? Jeżeli nawet tak, to nie ze względu na powyższe błędy (które były łatane w błyskawicznym tempie), ale raczej [...]]]></description>
			<content:encoded><![CDATA[<p>W tym tygodniu padło na Google. W ciągu kilku dni opublikowane zostały informacje o pięciu lukach w aplikacjach tej firmy. Z ciekawości wyszukałem informacje o podobnych zgłoszeniach w tym roku:</p>
<p>09/2007<br />
http://sirdarckcat.blogspot.com/2007/09/google-mashups-vulnerability.html<br />
http://xs-sniper.com/blog/2007/09/28/all-your-google-docs-are-belong-to-us/<br />
http://www.thespanner.co.uk/2007/09/27/google-adsense-csrf-hole/<br />
http://hackademix.net/2007/09/24/googhole-xss-pwning-gmail-picasa-and-almost-200k-customers/<br />
http://www.gnucitizen.org/blog/google-gmail-e-mail-hijack-technique/<br />
http://blog.beford.org/?p=3<br />
http://websecurity.com.ua/1368/<br />
http://sla.ckers.org/forum/read.php?3,15534,15534</p>
<p>08/2007<br />
http://ha.ckers.org/blog/20070817/xss-hole-in-google-apps-is-expected-behavior/<br />
http://sla.ckers.org/forum/read.php?4,15136,15136</p>
<p>06/2007<br />
http://websecurity.com.ua/1049/</p>
<p>05/2007<br />
http://www.0&#215;000000.com/index.php?i=319<br />
http://www.earlofgrey.com/blog/major-google-security-flaw-to-remove-sites-from-the-index.html</p>
<p>04/2007<br />
http://sla.ckers.org/forum/read.php?2,10960</p>
<p>03/2007<br />
http://mybeni.rootzilla.de/mybeNi/2007/gmail_information_disclosure/</p>
<p>02/2007<br />
http://www.watchfire.com/news/releases/02-21-07.aspx<br />
http://ha.ckers.org/blog/20070222/google-desktop-the-saga-continues/<br />
http://sla.ckers.org/forum/read.php?2,6505,6562<br />
http://sla.ckers.org/forum/read.php?3,44,page=40#msg-7125<br />
http://sla.ckers.org/forum/read.php?3,44,page=40#msg-7126</p>
<p>01/2007<br />
http://googlified.com/2007follow-up-on-the-gmail-bug/<br />
http://blogoscoped.com/archive/2007-01-14-n21.html</p>
<p>Czy jest to powód do unikania produktów Google? Jeżeli nawet tak, to nie ze względu na powyższe błędy (które były łatane w błyskawicznym tempie), ale raczej dlatego, że stają się one aplikacjami powszechnego użytku - a popularność często oznacza większe ryzyko ataku.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/09/29/czarny-tydzien-google/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Testowanie bezpieczeństwa aplikacji internetowych - część 2: Analiza funkcjonalności aplikacji</title>
		<link>http://lukasz.pilorz.net/2007/09/24/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-2-analiza-funkcjonalnosci-aplikacji/</link>
		<comments>http://lukasz.pilorz.net/2007/09/24/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-2-analiza-funkcjonalnosci-aplikacji/#comments</comments>
		<pubDate>Mon, 24 Sep 2007 19:45:22 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/09/24/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-2-analiza-funkcjonalnosci-aplikacji/</guid>
		<description><![CDATA[Tematem tej części można byłoby pewnie wypełnić książkę, tutaj ograniczę się do bardzo skrótowego ujęcia. Analiza funkcjonalności polegać będzie na skatalogowaniu akcji dostępnych w serwisie, a następnie określeniu zagrożeń, które z nich wynikają. Na tym etapie proponuję też wskazać fragmenty aplikacji, dla których należy sprawdzić istnienie typowych błędów.
Zarówno ten etap, jak i kolejne, najwygodniej będzie [...]]]></description>
			<content:encoded><![CDATA[<p>Tematem tej części można byłoby pewnie wypełnić książkę, tutaj ograniczę się do bardzo skrótowego ujęcia. Analiza funkcjonalności polegać będzie na skatalogowaniu akcji dostępnych w serwisie, a następnie określeniu zagrożeń, które z nich wynikają. Na tym etapie proponuję też wskazać fragmenty aplikacji, dla których należy sprawdzić istnienie typowych błędów.</p>
<p>Zarówno ten etap, jak i kolejne, najwygodniej będzie wykonywać przy pomocy przeglądarki internetowej (np. Firefox z rozszerzeniami: Firebug, Live HTTP Headers, Modify Headers i Edit Cookies) w połączeniu z <a href="http://portswigger.net/">Burp Suite</a> lub podobnym narzędziem. Szczególnie polecam Burp Proxy, który pozwala modyfikować &#8220;w locie&#8221; dane przesyłane pomiędzy przeglądarką i serwerem. Po uruchomieniu Burp Suite należy ustawić w przeglądarce proxy localhost:8080, proponuję też przełączyć działanie Burp Proxy na &#8220;intercept off&#8221; i włączyć przechwytywanie dopiero przy następnych testach.</p>
<p>Podczas przeglądania przez nas testowanej aplikacji <a href="http://portswigger.net/">Burp Suite</a> będzie na bieżąco aktualizował listę znalezionych podstron/linków, którą później można przejrzeć w zakładce spider-&gt;run-&gt;&#8221;show results&#8221;. W połączeniu z danymi uzyskanymi wcześniej z Wfuzz powinniśmy mieć w ten sposób w miarę dobry obraz struktury plików w aplikacji.</p>
<p>W trakcie tego etapu proponuję &#8220;przeklikać&#8221; aplikację kilkukrotnie, za każdym razem zmieniając nieco ustawienia przeglądarki:</p>
<ul>
<li>ze standardowymi ustawieniami</li>
<li>z wyłączoną obsługą JavaScript</li>
<li>z wyłączonym nagłówkiem Referer (w rozszerzeniu <a href="https://addons.mozilla.org/pl/firefox/addon/967">Modify Headers</a> do Firefoksa reguła &#8220;Filter&#8221;:&#8221;Referer&#8221;:&#8221;")</li>
</ul>
<p>Powyższy krok może pomóc w szybkim wykryciu brakującej walidacji po stronie serwera (realizowanej tylko skryptami JavaScript) oraz zabezpieczeń bazujących na adresie strony odsyłającej.</p>
<p>&nbsp;</p>
<p>Załóżmy, że testowany serwis zawiera następujący zestaw funkcji (do nich będę się odnosił również w następnych częściach):</p>
<ul>
<li>wyświetlenie podstrony o zadanym identyfikatorze</li>
<li>wyszukiwanie</li>
<li>rejestracja użytkownika</li>
<li>logowanie/wylogowanie użytkownika</li>
<li>mechanizm odzyskiwania zapomnianego hasła</li>
<li>zmiana hasła, adresu e-mail i innych danych użytkownika, usuwanie konta</li>
<li>edycja tekstu/HTML (notka w serwisie blogowym, komentarz w sklepie internetowym, itp.)</li>
<li>upload plików (np. grafiki)</li>
<li>przesyłanie wiadomości pomiędzy użytkownikami/do obsługi serwisu/na adres e-mail</li>
</ul>
<p>&nbsp;</p>
<p>Za elementy z natury niebezpieczne uznałbym możliwość edycji HTML (persistent XSS, CSRF, phishing), możliwość przesyłania e-maili (spam, phishing), upload plików (kod wykonywalny, persistent XSS, phishing) oraz mechanizm odzyskiwania zapomnianego hasła. Analiza tych funkcji serwisu będzie zatem bardziej złożona - w trakcie testów powinniśmy sprawdzić, jakie zostały wprowadzone zabezpieczenia, ocenić ich skuteczność i ewentualnie zaproponować alternatywne rozwiązania. Pozostałe z dostępnych akcji nie powinny mieć wpływu na bezpieczeństwo, o ile nie zawierają błędu programistycznego - a więc ich testy sprowadzą się do sprawdzenia typowych problemów (reflected XSS, CSRF, SQLI, header injection, path traversal, session fixation, integer overflow, itd.).</p>
<p>Najtrudniejsze do wykrycia są zazwyczaj błędy w logice aplikacji. Ponieważ są one ściśle powiązane z zastosowaniem serwisu, nie można ich znaleźć przy pomocy skanerów i wymagają przygotowania osobnego zestawu testów praktycznie dla każdej funkcji. Do ataków wykorzystujących błędy logiczne zalicza się między innymi parameter tampering i forceful browsing, ale zakres tego typu problemów może być bardzo szeroki. Przykładem może być sytuacja, w której wieloetapowy mechanizm odzyskiwania hasła nie bierze pod uwagę zmian danych użytkowników jakie nastąpiły pomiędzy etapami, w wyniku czego na adres atakującego może być przesłany link do zmiany hasła innego użytkownika.</p>
<p>Przy okazji polowań na błędy w logice serwisu można też spróbować określić, jakie działania użytkownika nie powinny mieć miejsca w określonych sytuacjach, nawet jeśli nie mają wpływu na bezpieczeństwo. Przykład: wykorzystanie przypomnienia hasła w momencie, gdy użytkownik jest zalogowany. Zwykle nie ma powodu, by blokować takie zachowanie (wyjątek: ataki XSS/CSRF), jednak jest ono nieco podejrzane, i w związku z tym można do istniejących mechanizmów ostrzegania dodać alert dla tej sytuacji. Wprowadzenie większej ilości takich punktów kontrolnych może ułatwić odpowiednio wczesne wykrywanie nietypowych (a więc zwykle niechcianych) działań użytkowników - to już oczywiście zadanie dla programistów i administratorów serwisu, ale testerzy mogą mieć ciekawe pomysły, które warto zapisać.</p>
<p>Proponuję wrócić teraz do <a href="http://portswigger.net/">Burp Suite</a> i zwrócić uwagę na możliwości narzędzi Repeater oraz Intruder. Jednym z elementów testu bezpieczeństwa powinno być sprawdzenie, czy zasoby dostępne wyłącznie dla zalogowanych użytkowników rzeczywiście są chronione. W tym celu wylogujemy się z aplikacji, a następnie w zakladce spider-&gt;run-&gt;&#8221;show results&#8221; wybierzemy interesujący nas plik. Po kliknięciu prawym klawiszem wybieramy &#8220;send request to repeater&#8221;, po czym przechodzimy do podświetlonej na czerwono zakładki. W polu tekstowym widoczne jest żądanie HTTP, które przeglądarka wykonała podczas legalnego dostępu do danej strony. Wybierając przycisk &#8220;go&#8221; powtórzymy to żądanie, a w dolnym okienku pojawi się odpowiedź serwera, która powinna wskazywać odmowę dostępu do strony (np. komunikat, przekierowanie do strony logowania, formularz logowania).</p>
<p>Burp Intruder przedstawię już w następnej części tego tekstu (na przykładzie próby ataku na parametr określający wybór podstrony serwisu). Trzecia część będzie też zawierać informacje o atakach wykorzystujących upload plików.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/09/24/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-2-analiza-funkcjonalnosci-aplikacji/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Testowanie bezpieczeństwa aplikacji internetowych - część 1: Identyfikacja dostępnych zasobów</title>
		<link>http://lukasz.pilorz.net/2007/09/15/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-1-identyfikacja-dostepnych-zasobow/</link>
		<comments>http://lukasz.pilorz.net/2007/09/15/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-1-identyfikacja-dostepnych-zasobow/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 03:57:22 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/09/15/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-1-identyfikacja-dostepnych-zasobow/</guid>
		<description><![CDATA[Przez ostatnie tygodnie w wolnych chwilach starałem się uporządkować swoje notatki o testach serwisów internetowych - jako efekt uboczny powstał ten wpis.
Tekst dotyczy przede wszystkim typowych aplikacji tworzonych w PHP: CMS-ów, serwisów społecznościowych i informacyjnych, BIP-ów, sklepów internetowych. Takie serwisy nie wymagają zabezpieczeń na poziomie bankowości elektronicznej. Najczęściej wystarczające są testy przeprowadzone przez programistów lub [...]]]></description>
			<content:encoded><![CDATA[<p>Przez ostatnie tygodnie w wolnych chwilach starałem się uporządkować swoje notatki o testach serwisów internetowych - jako efekt uboczny powstał ten wpis.</p>
<p>Tekst dotyczy przede wszystkim typowych aplikacji tworzonych w PHP: CMS-ów, serwisów społecznościowych i informacyjnych, BIP-ów, sklepów internetowych. Takie serwisy nie wymagają zabezpieczeń na poziomie bankowości elektronicznej. Najczęściej wystarczające są testy przeprowadzone przez programistów lub inżynierów QA, i mam nadzieję, że właśnie im przyda się poniższa lista. Zainteresowanych ogólniejszą i pełniejszą wiedzą odsyłam na strony <a href="http://www.owasp.org/">OWASP</a></p>
<p>&nbsp;</p>
<p><strong>Identyfikacja dostępnych zasobów</strong></p>
<p>Jako pierwszy etap proponuję przeprowadzenie rozpoznania, jakie informacje o aplikacji jest w stanie zebrać osoba z zewnątrz. Do tego celu najprościej jest wykorzystać typowe narzędzia, ale odrobina &#8220;twórczości własnej&#8221; też może się przydać. Przykładowy zestaw:</p>
<ul>
<li><a href="http://ha.ckers.org/fierce/">Fierce</a></li>
<li><a href="http://insecure.org/nmap/">Nmap</a></li>
<li><a href="http://www.nessus.org/nessus/">Nessus</a></li>
<li><a href="http://www.edge-security.com/wfuzz.php">Wfuzz</a></li>
<li><a href="http://google.com">Google</a></li>
</ul>
<p>&nbsp;</p>
<p><a href="http://ha.ckers.org/fierce/">Fierce</a> - to narzędzie jest przeznaczone do przeszukiwania zasobów sieci korporacyjnych, ale sprawdza się też przy małych serwisach. Metodą brute-force znajduje subdomeny, a następnie przeszukuje okoliczne IP w poszukiwaniu zasobów powiązanych z tą samą firmą:<br />
<code>perl fierce.pl -dns example.com -search nazwa,firmy,i,inne,slowa,kluczowe</code><br />
Przykładowy wynik można obejrzeć <a href="http://ha.ckers.org/fierce/rambler.ru">tutaj</a>. Podobna funkcja jest wbudowana w skaner <a href="http://www.acunetix.com/vulnerability-scanner/">Acunetix WVS</a> (również w <a href="http://www.acunetix.com/cross-site-scripting/scanner.htm">darmowej wersji</a>).</p>
<p>&nbsp;</p>
<p>Znajomość programu <a href="http://insecure.org/nmap/">Nmap</a> jest obowiązkowa dla administratorów, ale przy rekonesansie przydaje się również w testach aplikacji WWW. Do określenia celu można wykorzystać wyniki z Fierce, a skan wystarczy ograniczyć do portów typowych dla protokołu HTTP:<br />
<code>nmap -v -P0 -sV -p T:80,443,8080 example.com</code></p>
<p>&nbsp;</p>
<p>Zadaniem <a href="http://www.nessus.org/nessus/">Nessusa</a> jest zweryfikowanie podatności systemu na podstawie bogatej listy sygnatur. Ten skaner nie wykryje błędów w napisanych przez nas aplikacjach, ale zastosowanie się do jego wskazówek pomoże między innymi w obronie przed robakami internetowymi oraz script kiddies. Dodatkowa funkcja, o której dokumentacja milczy, to wykrywanie nieodpowiednio zorganizowanych powiadomień o atakach na serwis - sygnaturą jest (dobiegający zwykle z pokoju obok) charakterystyczny krzyk osoby, której skrzynka pocztowa została zalana setkami alertów.<br />
Przed użyciem Nessusa w środowisku produkcyjnym należy koniecznie analogiczny skan przeprowadzić przeciwko serwerowi testowemu, na którym uruchomione są te same aplikacje (możliwie wierna kopia) - w przeciwnym razie konsekwencje mogą być trudne do przewidzenia.</p>
<p>&nbsp;</p>
<p>W kolejnym kroku proponuję powrócić do wyników uzyskanych przy pomocy Fierce oraz Nmapa, i tym razem wyszukać dostępne w znalezionych domenach katalogi/pliki. Do tego celu świetnie nadaje się <a href="http://www.edge-security.com/wfuzz.php">Wfuzz</a> - narzędzie do przeprowadzania ataków brute-force na aplikacje internetowe. Jego możliwości są znacznie większe niż wyszukiwanie, ale na tym etapie wystarczy ograniczyć się do poniższych poleceń:<br />
<code>./wfuzz.py -c -z file -f slownik.txt --hc 404 http://example.com/FUZZ/</code><br />
<code>./wfuzz.py -c -z file -f slownik.txt --hc 404 http://example.com/FUZZ.php</code><br />
Do określenia rozszerzeń plików, których będziemy szukać, może się przydać metoda, którą opisałem <a href="http://lukasz.pilorz.net/index.php/2007/09/03/google-hacking-wyszukiwanie-nietypowych-plikow/">tutaj</a>.</p>
<p>&nbsp;</p>
<p>Na koniec pozostaje metoda, w której można się wykazać własną inicjatywą, czyli Google Hacking. Poza wykorzystaniem <a href="http://johnny.ihackstuff.com/ghdb.php">Google Hacking Database</a>, można podsumować informacje ze skanerów, i na tej podstawie próbować nowych sztuczek. Poniżej zamieszczam kilka googledorków, które kiedyś okazały się dla mnie przydatne:</p>
<ul>
<li>site:example.com intitle:&#8221;Index of /&#8221; modified</li>
<li>site:example.com intitle:phpinfo</li>
<li>site:example.com filetype:php inurl:upload</li>
<li>site:example.com filetype:php inurl:file</li>
<li>site:example.com inurl:config</li>
<li>site:example.com filetype:inc config</li>
<li>site:example.com inurl:admin</li>
</ul>
<p>&nbsp;</p>
<p>Ciąg dalszy wkrótce (część 2: Analiza funkcjonalności aplikacji). Komentarze i propozycje poprawek mile widziane - tutaj lub mailowo.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/09/15/testowanie-bezpieczenstwa-aplikacji-internetowych-czesc-1-identyfikacja-dostepnych-zasobow/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Directory Traversal w Total Commanderze</title>
		<link>http://lukasz.pilorz.net/2007/09/12/directory-traversal-w-total-commanderze/</link>
		<comments>http://lukasz.pilorz.net/2007/09/12/directory-traversal-w-total-commanderze/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 18:13:56 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/09/12/directory-traversal-w-total-commanderze/</guid>
		<description><![CDATA[Kilka dni temu na secunia.com pojawiła się informacja o Total Commander FTP Download Directory Traversal Vulnerability. Jak widać, problemy ze wstrzykiwaniem ścieżki do pliku nie dotyczą tylko aplikacji internetowych. Przykład w wersji dla korzystających z klasycznego hostingu PHP + FTP, bez możliwości utworzenia pliku inną drogą:
&#60;?php
touch("./..\\..\\..\\..\\..\\..\\Windows\\system32\\drivers\\etc\\hosts");
?&#62;
Plik wrzucamy (za pomocą FTP) do katalogu w którym PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Kilka dni temu na secunia.com pojawiła się informacja o <em><a href="http://secunia.com/advisories/26734/">Total Commander FTP Download Directory Traversal Vulnerability</a></em>. Jak widać, problemy ze wstrzykiwaniem ścieżki do pliku nie dotyczą tylko aplikacji internetowych. Przykład w wersji dla korzystających z klasycznego hostingu PHP + FTP, bez możliwości utworzenia pliku inną drogą:</p>
<p><code>&lt;?php<br />
touch("./..\\..\\..\\..\\..\\..\\Windows\\system32\\drivers\\etc\\hosts");<br />
?&gt;</code></p>
<p>Plik wrzucamy (za pomocą FTP) do katalogu w którym PHP ma prawa do zapisu plików, odpalamy z przeglądarki, i odświeżamy widok katalogu FTP w Total Commanderze. Pojawi się niewinnie wyglądający plik <em>hosts</em> (cała reszta nazwy jest niewidoczna), który możemy spróbować skopiować do jakiegoś katalogu na dysku C:\.</p>
<p>Efekt:</p>
<p><code>Target already exists:<br />
C:\Windows\system32\drivers\etc\hosts<br />
Do you want to overwrite it?</code></p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/09/12/directory-traversal-w-total-commanderze/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Hacking: wyszukiwanie nietypowych plików</title>
		<link>http://lukasz.pilorz.net/2007/09/03/google-hacking-wyszukiwanie-nietypowych-plikow/</link>
		<comments>http://lukasz.pilorz.net/2007/09/03/google-hacking-wyszukiwanie-nietypowych-plikow/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 18:25:29 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/09/03/google-hacking-wyszukiwanie-nietypowych-plikow/</guid>
		<description><![CDATA[Metoda na wyszukiwanie nietypowych zasobów w określonej domenie:
site:example.com filetype:* -filetype:htm -filetype:html
Na pierwszej stronie wyników pojawia się zazwyczaj sporo plików .php, więc te również można usunąć:
site:example.com filetype:* -filetype:htm -filetype:html -filetype:php
Jeśli teraz w wynikach przeważają pliki pdf, wówczas:
site:example.com filetype:* -filetype:htm -filetype:html -filetype:php -filetype:pdf
&#8230;i tak dalej.
Nic rewolucyjnego, ale efekty są czasem ciekawe.
]]></description>
			<content:encoded><![CDATA[<p>Metoda na wyszukiwanie nietypowych zasobów w określonej domenie:<br />
<code>site:example.com filetype:* -filetype:htm -filetype:html</code></p>
<p>Na pierwszej stronie wyników pojawia się zazwyczaj sporo plików .php, więc te również można usunąć:<br />
<code>site:example.com filetype:* -filetype:htm -filetype:html -filetype:php</code></p>
<p>Jeśli teraz w wynikach przeważają pliki pdf, wówczas:<br />
<code>site:example.com filetype:* -filetype:htm -filetype:html -filetype:php -filetype:pdf</code><br />
&#8230;i tak dalej.</p>
<p>Nic rewolucyjnego, ale efekty są czasem ciekawe.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/09/03/google-hacking-wyszukiwanie-nietypowych-plikow/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Framework niekoniecznie bezpieczniejszy</title>
		<link>http://lukasz.pilorz.net/2007/08/19/framework-niekoniecznie-bezpieczniejszy/</link>
		<comments>http://lukasz.pilorz.net/2007/08/19/framework-niekoniecznie-bezpieczniejszy/#comments</comments>
		<pubDate>Sun, 19 Aug 2007 03:32:38 +0000</pubDate>
		<dc:creator>Łukasz Pilorz</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://lukasz.pilorz.net/index.php/2007/08/19/framework-niekoniecznie-bezpieczniejszy/</guid>
		<description><![CDATA[Wielokrotnie słyszałem opinię, że korzystanie z gotowych frameworków PHP rozwiązuje podstawowe problemy z bezpieczeństwem aplikacji. Jest w niej dużo racji, zwłaszcza jeśli chodzi o proste projekty tworzone przez niekoniecznie zaawansowanych programistów. Trzeba jednak pamiętać, że wykorzystanie obcego kodu wiąże się z jego jawnością dla potencjalnych atakujących, oraz że nie każdy framework jest tworzony z myślą [...]]]></description>
			<content:encoded><![CDATA[<p>Wielokrotnie słyszałem opinię, że korzystanie z gotowych frameworków PHP rozwiązuje podstawowe problemy z bezpieczeństwem aplikacji. Jest w niej dużo racji, zwłaszcza jeśli chodzi o proste projekty tworzone przez niekoniecznie zaawansowanych programistów. Trzeba jednak pamiętać, że wykorzystanie obcego kodu wiąże się z jego jawnością dla potencjalnych atakujących, oraz że nie każdy framework jest tworzony z myślą o bezpieczeństwie.</p>
<p>Nie korzystam na co dzień z takich rozwiązań, zetknąłem się jedynie z Cake, Symfony i CodeIgniter - a okazję, by przyjrzeć się dokładniej, miałem tylko przy tym ostatnim. Z trzech wspomnianych CodeIgniter jest zresztą (moim zdaniem) najbardziej czytelny i najłatwiejszy do analizy. Efektem tego przeglądu było <a href="http://seclists.org/fulldisclosure/2007/Jul/0147.html">kilka poprawek</a>, które trafiły do wersji 1.5.4.</p>
<p>W trakcie bardzo krótkiej korespondencji na temat zgłoszeń odniosłem wrażenie, że twórcy CodeIgnitera nie przypisują frameworkowi odpowiedzialności za bezpieczeństwo aplikacji. Ma on być ułatwieniem, ale programista nadal musi sam wprowadzić odpowiednie dla danej funkcjonalności zabezpieczenia. Ciekaw jestem, czy to podejście jest podobne w przypadku innych popularnych frameworków. Tak czy inaczej, warto przeanalizować taki kod przed zastosowaniem w poważniejszym projekcie.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukasz.pilorz.net/2007/08/19/framework-niekoniecznie-bezpieczniejszy/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
