RDot

RDot (https://rdot.org/forum/index.php)
-   Web-среда/Web-applications (https://rdot.org/forum/forumdisplay.php?f=9)
-   -   Инъекция в JSON-RPC (https://rdot.org/forum/showthread.php?t=3025)

big_Brat 03.02.2014 09:09

Инъекция в JSON-RPC
 
Добрый день, нужна помощь, существует самописный сервер который принимает команды через json-rpc v2.
Пример уязвимого кода:
PHP код:

$userid $_GET['userid'];
$code '{"method":"GetUser", "id":"1", "params":["$userid"]}'

Пример запроса:
Код:

{"method":"GetUser", "id":"1", "params":["777"]}
Уязвимый параметр userid, через него формирую второй запрос на добавление пользователя, на выходе получаю такой запрос:
Пример запроса:
Код:

{"method":"GetUser", "id":"1", "params":["777"]},{"method":"AddUser", "id":"1", "params":["system"]}
Но есть проблема так как у нас сразу определено что это объект (начинается с { сервер обрабатывает только первый запрос, второй игнорирует), если бы сразу было определено что это массив объектов (начинался бы с [{), то запрос выполнился на все 100%.

Вопрос: как то можно заставить сервер выполнить второй запрос?

oRb 03.02.2014 10:22

PHP код:

var_dump(json_decode('{"method":"GetUser", "id":"1", "params":["777"], "method":"AddUser", "id":"1", "params":["system"]}',1)); 

Код:

array(3) {
  ["method"]=>
  string(7) "AddUser"
  ["id"]=>
  string(1) "1"
  ["params"]=>
  array(1) {
    [0]=>
    string(6) "system"
  }
}


big_Brat 03.02.2014 10:36

Спасибо все так но, я уже пробовал, и есть проблема что проверяется количество аргументов, и он выбрасывает ошибку о том что слишком много параметров передано.


Часовой пояс GMT +3, время: 12:58.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot