PHDays 2013 CTF «Blade» Writeup

We have a simple form with login and password. There is an SQL injection, but a WAF blocks any attempt to bypass it. First step to solve this task was to reveal the contents of the script by requesting index.phps:

<?php
include 'flag.php';

if(!isset($_POST['username']) || !isset($_POST['password'])) {
	print <<<FORM
<form method=POST>
<input type=text name=username></input>
<input type=password name=password></input>
<input type=submit></input>
</form>
FORM;
	die;
}

$this_is_baaad = array("union", "select", "from", "where", "join", "sleep", "benchmark", ",", "(", ")");
foreach($this_is_baaad as $srsly) {
	if(stripos($_POST['username'], $srsly) !== false) {
		print "Do not try to trick me!";
		die;
	}
}

$q = mysql_query("SELECT * FROM users WHERE username = '{$_POST['username']}'"); 
if(mysql_num_rows($q) == 1) { 
    $user = mysql_fetch_array($q);
    if($user['password'] == $_POST['password']) {
    	print $flag;
    } else {
    	print "Login failed!";
    }
} else {
	print "Login failed!";
}

The first thing we see is that the password does not get into the SQL query, so we need to use at least UNION, but it is blocked. Guys from PPP tried time delaying heavy queries that do not rely on sleep() or becnhmark(), however the right way to solve this task is as follows. Firstly, one notices that passwords are compared using == operator, and secondly the GROUP operator is not filtered. In MySQL this operator can be used with some interesting modifier: WITH ROLLUP

The GROUP BY clause permits a WITH ROLLUP modifier that causes extra rows to be added to the summary output.

If you use column password on GROUP BY WITH ROLLUP, you will get an extra empty row. And as NULL and empty string if compared with operator == are equal it is possible to bypass the authorization using the following query:

admin' GROUP BY password WITH ROLLUP LIMIT 1 OFFSET 1-- -

Simple Machines Forum <= 2.0.3 Admin Password Reset

Simple Machines Forum is a popular web community software written in PHP. Its password reset mechanism had some issues back in 2008. The vulnerability was caused by insecure random numbers generation and was patched right after the exploit was published. This time I found a more interesting vulnerability however at Positive Technologies we didn’t manage to raise awareness of SMF developers. After continuous silence of SMF devs I am disclosing the vulnerability details but I am not going to publish the exploit.

Читать дальше »

ZeroNights HackQuest ErsSma Task Writeup

ErsSma task was one the most interesting puzzles at ZeroNights HackQuest, here is detailed solution.
We have a form with a single input:

POST /missions/ErsSma/index.php HTTP/1.0
Content-Type: multipart/form-data; boundary=--------336730954
Content-Length: 99

----------336730954
Content-Disposition: form-data; name="login"

admin
----------336730954--
->
Password is incorrect!

What do we do here? Fuzz all the things! Читать дальше »

Прокачиваем Burp Suite

Burp Suite является если не основным то, пожалуй, одним из главных инструментов пентестера. С момента выхода первого релиза Burp приобрел множество новых функций, появилась платная и бесплатная версии. Однако зачастую при проведении пентеста встроенного функционала не хватает, и в этом случае на помощь приходит Burp Extender — набор интерфейсов для расширения возможностей Burp. Сама программа написана на Java, и писать расширения предлагается также на этом языке. Тем не менее усилиями сторонних разработчиков в настоящее время появилось несколько проектов, цель которых — дать возможность создавать расширения и на других языках. Среди них:

  • Buby — позволяет писать расширения на Ruby с использованием jRuby;
  • Resty Burp — предоставляет REST/JSON-интерфейс для функционала Burp, что позволяет писать расширения на любом языке (к сожалению, работает только с платной версией Burp).
  • Jython Burp API — открывает доступ к интерфейсам Burp Extender на Jython (реализация Python на Java);

Читать дальше »

Конкурс «Большой ку$h» на PHDays — райтап

Буквально пару дней назад завершился PHDays, познакомился со многими интересными людьми, в целом форум оставил самые позитивные впечатления, за что огромный респект организаторам, компании Positive Technologies. Уже появилось довольно много отчетов (shr, d0znpp, toxa, asintsov), напишу лишь о том, что больше всего запомнилось лично для меня — о конкурсе Snatch, он же «Большой ку$h».

Читать дальше »

Выполнение произвольного кода на серверах с PHP CGI

Накануне был обнаружен, пожалуй, самый эпичный баг в истории PHP. Уязвимость позволяет атакующему выполнить произвольный код, используя лишь адресную строку браузера, на любом сервере, где PHP работает как CGI. Нашла уязвимость голландская команда Eindbazen, известная по своим выступлениям на различных CTF. Хронология событий:

Читать дальше »

Расшифровка и деобфускация PHP-скриптов

Тема декодирования зашифрованных PHP-скриптов уже однажды мной затрагивалась в посте PHP и зашифрованный код. В нем я описал способ получения значений всех инициализированных переменных и списка объявленных функций в скрипте, зашифрованным протектором ionCube. Тогда, в 2009 году, расшифровать скрипт под ionCube было проблематично — на тот момент существовали лишь платные сервисы. Однако с ростом популярности ionCube стало ясно, что рано или поздно его постигнет участь Zend Encoder (сейчас Zend Guard), павшего в 2008 году перед ставшими повсеместно доступными «дезендерами». Действительно, за последнее время появилось множество декодеров ionCube, можно даже найти бесплатные онлайн-сервисы. Один из них позволяет расшифровать практически любые скрипты. О нем, а также о других способах расшифровки расскажу в данной статье.

Читать дальше »

5 бесплатных онлайн сервисов для предотвращения заражения и борьбы с malware

В этом посте хочу представить 5 онлайн сервисов, которые могут быть полезны для профилактики заражения различной малварью, а также для изучения и анализа вредоносного ПО — зашифрованных javascript-сценариев, подозрительных исполняемых файлов и т.д.

  1. SurfPatrol

    Бесплатный онлайн сервис от отечественной компании Positive Technologies, специализирующейся в области информационной безопасности. SurfPatrol предназначен для проверки безопасности браузера и его плагинов. Работает очень быстро, позволяет получить общее представление об устаревших компонентах почти мгновенно. Читать дальше »

Expression Language Injection

В списке уязвимостей, связанных с различного рода инъекциями (SQL, LDAP, XPath, etc) появилось новое наименование — Expression Language Injection. Новая разновидность инъекций описана в свежем исследовании Стефано ди Паолы (Stefano Di Paola) и Аршана Дабирсиаги (Arshan Dabirsiaghi). Уязвимость затрагивает JSP-приложения, написанные с использованием популярного в этой среде фреймворка Spring MVC. В результате успешной атаки EL Injection может привести к утечке данных как со стороны сервера (пути, значения глобальных переменных, etc), так и пользователя (обход httpOnly, получение идентификаторов сессий). Уязвимость возможна в том случае, когда внутри JSP-тэгов фреймворка Spring используется Expression Language — скриптовый язык, позволяющий получить доступ к Java-компонентам из JSP:

<spring:message scope=”${param.foo}”/>

В чем заключается уязвимость?
Дело в том, что в Spring MVC выражения Expression Language внутри определенных атрибутов выполняются дважды, поэтому, приложение, получающее входящие данные посредством Expression Language как в примере выше, уязвимо к внедрению произвольных EL-выражений. Читать дальше »

FuzzDB — умный фаззинг

Прежде чем начать рассмотрение проекта FuzzDB, нужно сказать пару слов о самом фаззинге. Итак, фаззинг (англ. fuzzing) — это способ тестирования приложений, в основе которого лежит передача некорректных, случайных или непредвиденных логикой программы данных. Чаще всего фаззинг применяется при blackbox-тестировании, т.е. в условиях отсутствия исходных кодов приложения. У фаззинга имеются как отрицательные, так и положительные стороны. К числу первых можно отнести низкую скрытность процесса тестирования, так как после проверки всех возможных параметров остаются следы, которые невозможно не заметить, если, конечно, проводится мониторинг журналов и нагрузки на систему. Среди положительных моментов выделяется полная автоматизация процесса, позволяющая значительно сэкономить время. Эффективность фаззинга в значительной степени зависит от программы-фаззера и базы, с которой она работает. Говорить, что фаззинг лучше метода ручного точечного тестирования или наоборот, некорректно, так как оба метода должны дополнять друг друга при blackbox-пентесте.

Читать дальше »

« Предыдущая страницаСледующая страница »