Извлечение общих попыток несанкционированного доступа из файлов журнала
У меня есть файл журнала, который выглядит примерно так:
"127.0.0.1" 127.0.0.1 - - [04/Apr/2018:09:30:17 -0500] "GET /devicemanagement/status?auto HTTP/1.1" 200 1334 "-" "devicemgrd (unknown version) CFNetwork/760.8 Darwin/15.6.0 (x86_64)"
"127.0.0.1" 127.0.0.1 - - [04/Apr/2018:09:30:21 -0500] "GET /devicemanagement/status?auto HTTP/1.1" 200 1334 "-" "devicemgrd (unknown version) CFNetwork/760.8 Darwin/15.6.0 (x86_64)"
srvmac:apache2 serveradmin$
default 127.0.0.1 - - [02/Apr/2018:17:04:35 -0500] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.28 (Unix) LibreSSL/2.2.7 (internal dummy connection)"
default 127.0.0.1 - andrea [03/Apr/2018:07:55:21 -0500] "PROPFIND / HTTP/1.1" 401 446 "-" "Mac+OS+X/10.13.3 (17D102) CalendarAgent/399.2.2"
default 127.0.0.1 - - [03/Apr/2018:07:55:22 -0500] "PROPFIND / HTTP/1.1" 401 446 "-" "Mac+OS+X/10.13.3 (17D102) CalendarAgent/399.2.2"
default 127.0.0.1 - - [03/Apr/2018:07:55:22 -0500] "PROPFIND / HTTP/1.1" 401 446 "-" "Mac+OS+X/10.13.3 (17D102) CalendarAgent/399.2.2"
default 127.0.0.1 - - [03/Apr/2018:08:27:08 -0500] "GET /favicon.ico HTTP/1.1" 200 7782 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0"
default 127.0.0.1 - - [03/Apr/2018:08:31:05 -0500] "GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 306 "-" "Safari/11604.5.6.1.1 CFNetwork/760.8 Darwin/15.6.0 (x86_64)"
;SELECT name FROM adfs.tables WHERE name LIKE 'cat'
default 127.0.0.1 - - [03/Apr/2018:08:31:05 -0500] "GET /favicon.ico HTTP/1.1" 200 7782 "h/auth?redirect=https:///devicemanagement/webapi/authentication/device_callback" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
<script>alert("test");</script>
default 127.0.0.1 - - [03/Apr/2018:08:31:05 -0500] "GET /apple-touch-icon.png HTTP/1.1" 404 294 "-" "Safari/11604.5.6.1.1 CFNetwork/760.8 Darwin/15.6.0 (x86_64)"
SELECT * FROM information_schema.tables
default 127.0.0.1 - - [03/Apr/2018:08:31:23 -0500] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.28 (Unix) LibreSSL/2.2.7 (internal dummy connection)"
default 127.0.0.1 - - [03/Apr/2018:10:48:09 -0500] "GET /davical HTTP/1.1" 404 281 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
default 127.0.0.1 - - [03/Apr/2018:10:48:09 -0500] "GET /favicon.ico HTTP/1.1" 200 7782 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
default 127.0.0.1 - - [03/Apr/2018:10:48:09 -0500] "GET /index.php?action=login AND 1=1 HTTP/1.1" 200 7782 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
default 127.0.0.1 - - [03/Apr/2018:10:48:09 -0500] "GET /favicon.ico HTTP/1.1" 200 7782 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
'default 107.150.99.144 - - [12/Dec/2017:16:25:09 -0600] "GET /?id=<script>alert(1)</script> HTTP/1.1" 200 1033390 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b1) Gecko/20081007 Firefox/3.0"'
'default 66.111.57.45 - - [05/Mar/2018:00:21:24 -0600] "GET
/index.php?page=/etc/passwd HTTP/1.1" 404 260 "-" "Mozilla/5.0"'
Line output: 'default 210.3.145.29 - - [19/Feb/2018:22:50:16 -0600] "GET /admin/mysql/index.php HTTP/1.1" 404 282 "-" "Mozilla/5.0"'
Line output: 'default 210.3.145.29 - - [19/Feb/2018:22:50:16 -0600] "GET /admin/mysql2/index.php HTTP/1.1" 404 283 "-" "Mozilla/5.0"'
'default 210.3.145.29 - - [19/Feb/2018:22:50:16 -0600] "GET /admin/phpmyadmin/index.php HTTP/1.1" 404 287 "-" "Mozilla/5.0"'
'default 210.3.145.29 - - [19/Feb/2018:22:50:16 -0600] "GET /admin/phpMyAdmin/index.php HTTP/1.1" 404 287 "-" "Mozilla/5.0"'
'default 210.3.145.29 - - [19/Feb/2018:22:50:16 -0600] "GET /admin/phpmyadmin2/index.php HTTP/1.1" 404 288 "-" "Mozilla/5.0"'
default 210.3.145.29 - - [19/Feb/2018:22:50:17 -0600] "GET /mysqladmin/index.php HTTP/1.1" 404 281 "-" "Mozilla/5.0"'
default 210.3.145.29 - - [19/Feb/2018:22:50:17 -0600] "GET /mysql-admin/index.php HTTP/1.1" 404 282 "-" "Mozilla/5.0"'
default 210.3.145.29 - - [19/Feb/2018:22:50:17 -0600] "GET /phpadmin/index.php HTTP/1.1" 404 279 "-" "Mozilla/5.0"'
То, что я хотел бы сделать, это извлечь общие признаки того, что кто-то пытался получить несанкционированный доступ к моей системе, таким образом я могу выглядеть просто и быстро. Вещи, которые я бы искал, включают в себя;
- Обход файла
- Индикаторы SQLi
- Показатели XSS
- Сломанные индикаторы аутентификации
Как я делал это до сих пор с регулярными выражениями:
r"<.+>alert\(.\w+.\).<.+.>",
r"select.(\w+|\S).\w+.(\w+|\S)(.\w+)?",
r"select\s+(.*)\s+from\s+(.*)\s+where\s+(.*)",
r"union select",
r"<script>",
r"union.\w+.\w+.\w+\S",
r"<.+>",
r".index.php",
r".etc."
Тем не менее, очевидно, что это не очень хорошая идея, поскольку она буквально подберет все, что найдено в строке, соответствующей этому регулярному выражению. Как я могу сделать это успешно и извлечь информацию, которую я хочу из файла, предоставленного Python? Использование регулярных выражений может быть сделано по умолчанию, но я бы предпочел сделать это по-другому, спасибо!