Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
cookbook:logs [2014/09/24 18:02] shadowcat [access.log auswerten] |
cookbook:logs [2014/09/24 00:00] (aktuell) |
||
---|---|---|---|
Zeile 36: | Zeile 36: | ||
+ | ==== User-Agents auswerten ==== | ||
+ | Was für die Statuscodes geht, geht auch für die User-Agents (Browser): | ||
- | ===== Links ===== | + | "c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "select user-agent, count(*) as Anzahl FROM d:\xampp\apache\logs\access.log GROUP BY user-agent ORDER BY Anzahl DESC" -i:NCSA |
- | http://technet.microsoft.com/en-us/library/ee692937.aspx | + | Will man das nicht im Konsolenfenster, sondern z.B. als CSV, gibt man das mit dem Parameter -o an: |
+ | |||
+ | "c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "select user-agent, count(*) as Anzahl FROM d:\xampp\apache\logs\access.log GROUP BY user-agent ORDER BY Anzahl DESC" -i:NCSA -o:CSV > output.csv | ||
+ | |||
+ | Man kann den Namen der Datei auch innerhalb des SELECT-Befehls angeben: | ||
+ | |||
+ | "c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "select user-agent, count(*) as Anzahl INTO output.csv FROM d:\xampp\apache\logs\access.log GROUP BY user-agent ORDER BY Anzahl DESC" -i:NCSA -o:CSV | ||
+ | |||
+ | ==== Hacker-Angriffe entdecken ==== | ||
+ | |||
+ | Hier gibt es furchtbar viele Varianten. Hacker versuchen oft, URLs zu mißbrauchen, die Parameter haben, z.B. | ||
+ | |||
+ | http://www.whatever.com/page/mypage.php?id=5 | ||
+ | |||
+ | An diese werden dann diverse Zeichenketten angehängt, um beispielsweise ein Login-Fenster zu umgehen oder Informationen über die Datenbank zu erhalten. Ein potentiell suspekter String ist 'SELECT'. | ||
+ | |||
+ | "c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "select count(*) as Anzahl, remotehostname, user-agent FROM d:\xampp\apache\logs\access.log WHERE request LIKE '%select%' GROUP BY user-agent, remotehostname ORDER BY Anzahl DESC" -i:NCSA | ||
+ | |||
+ | Anzahl RemoteHostName User-Agent | ||
+ | ------ -------------- ---------------------------------------------- | ||
+ | 600 127.0.0.1 python-requests/2.0.0 CPython/2.7.5 Windows/7 | ||
+ | 14 127.0.0.1 - | ||
+ | 1 127.0.0.1 Mozilla/4.0 (compatible; MSIE 5.5; Windows NT) | ||
+ | |||
+ | Auch ein leerer User-Agent könnte (muß aber nicht) ein Hinweis sein. | ||
+ | |||
+ | "c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "select statuscode,remotehostname FROM d:\xampp\apache\logs\access.log WHERE user-agent is null order by statuscode asc" -i:NCSA -o:datagrid | ||
+ | |||
+ | ==== Ausgabe als HTML ==== | ||
+ | |||
+ | Im Gegensatz zu den meisten anderen Formaten ist die Ausgabe als HTML etwas komplizierter. LogParser benötigt hierzu ein Template, in das es seine ermittelten Daten einfüllen kann. Wer aber BC-Templates kennt, kann auch hiermit umgehen. :) | ||
+ | |||
+ | Nehmen wir als Beispiel unsere Suche nach dem potentiell "bösen" Querystring mit "SELECT". Diesen möchten wir als HTML-Tabelle ausgeben und diese auch ein wenig 'hübsch machen'. | ||
+ | |||
+ | Also bauen wir uns zunächst mal unsere Vorlage: | ||
+ | |||
+ | <sxh html> | ||
+ | <lpheader> | ||
+ | <html> | ||
+ | <head> | ||
+ | <title>Potentiell böse Querystrings</title> | ||
+ | <style type="text/css"> | ||
+ | body{background-color:#fff;} | ||
+ | table{border-collapse:collapse;} | ||
+ | th,td{border:1px solid #000;} | ||
+ | th{background-color:#ccc;} | ||
+ | </style> | ||
+ | </head> | ||
+ | <body> | ||
+ | <table> | ||
+ | <thead> | ||
+ | <tr> | ||
+ | <th>Anzahl</th> | ||
+ | <th>Remote Host</th> | ||
+ | <th>Query</th> | ||
+ | </tr> | ||
+ | </thead> | ||
+ | <tbody> | ||
+ | </lpheader> | ||
+ | <lpbody> | ||
+ | <tr> | ||
+ | <td>%Anzahl%</td> | ||
+ | <td>%remotehostname%</td> | ||
+ | <td>%request%</td> | ||
+ | </tr> | ||
+ | </lpbody> | ||
+ | <lpfooter> | ||
+ | </tbody> | ||
+ | </table> | ||
+ | </body> | ||
+ | </html> | ||
+ | </lpfooter> | ||
+ | </sxh> | ||
+ | |||
+ | Die Markups <LPHEADER>, <LPBODY> und <LPFOOTER> dienen dem LogParser dazu, die einzelnen Bereiche des Templates zu erkennen. <LPBODY> wird für jede Zeile der Ausgabe wiederholt, beinhaltet daher also auch die Platzhalter für die Werte. Die Platzhalter entsprechen hierbei den "Spaltennamen". | ||
+ | |||
+ | Speichern wir nun diese Datei als ''querystrings.tpl''. Der Aufruf für den LogParser muß nun um zwei Werte erweitert werden: | ||
+ | |||
+ | * Den Namen der HTML-Datei (sonst wird alles auf der Kommandozeile ausgegeben) | ||
+ | * Den Namen des Templates | ||
+ | |||
+ | Außerdem ändern wir das Ausgabeformat in ''-o:TPL'' | ||
+ | |||
+ | |||
+ | "c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "select count(*) as Anzahl, remotehostname, request FROM d:\xampp\apache\logs\access.log TO output.html WHERE request LIKE '%select%' GROUP BY remotehostname,request ORDER BY Anzahl DESC" -i:NCSA -o:TPL -tpl:querystrings.tpl | ||
+ | |||
+ | Ergebnis ist nun eine Datei ''output.html'' mit einer Tabelle, die nach Remote Host und Querystring gruppiert und nach Anzahl sortiert die potentiellen Angriffe auflistet. | ||
+ | |||
+ | Natürlich ist hier noch etwas Feintuning am Template und ggfs. auch an der Abfrage denkbar. ;) | ||
+ | ===== Links ===== | ||
+ | http://technet.microsoft.com/en-us/library/ee692937.aspx\\ | ||
+ | http://mlichtenberg.wordpress.com/2011/02/03/log-parser-rocks-more-than-50-examples/ |