Как хешировать password_type 4 средствами BAS
-
Здравствуйте, подскажите кто сталкивался, как решить такую задачу средствами BAS?
За верное решение подкину монет. Заранее спасибо.private function login(){ if($this->password_type == '4') { $password = base64_encode(hash('sha256', $this->username . base64_encode(hash('sha256', $this->password)) . $this->TokInfo)); } else { $password = base64_encode($this->password); }` -
@HustleMan said in Как хешировать password_type 4 средствами BAS:
Здравствуйте, подскажите кто сталкивался, как решить такую задачу средствами BAS?
За верное решение подкину монет. Заранее спасибо.Используйте действие "Контрольная сумма строки" из модуля "Контрольная сумма"

-
@Fox благодарю за ответ, пробовал, не могу сообразить последовательность. В снифере длинная строка получается, а у меня короткая
psd = "admin" psd = b64(sha256(psd)) psd = "admin" + psd + token psd = b64(sha256(psd))и в снифере явно кодировка не base64
-
@Fox вот такой хеш должен выйти
290d60b713098096ae8d4018f609c403b145c71165dedd9ed392ba245a6036ae712d15f81c3ac348d1801781783b995f4b8c96b72e7f9397fa8176510e37c72f036222c9ce09a79b1744b51ecf542844fc454443f4fcffe6cb32bbf3cbbb3e6f160aa74af3a1a6af036210e4cd36a601003a9a2e8d549523c94a84a74f4e8a437f75bc8697efa7a726ad95e4258a8919a7a67b0efe4a7ac5a9c2e68cab16e1b397c90d238dbe99815d1a748490d013028cf8a6d94cec22d22b6fe3a7e16235de89de5a5c8f2f8f924cef25faa07240b080d06bbfe95ab42431dfa58334ec7fceb8709c9b966288e6a1cc95da49ff606edf06f8c82cbb679f6689cf6584805f9d09584132f29367f88f22ebd45055aecee464292598dfd927299bc107e2894e656438f6b097ed071a1ac56e5c26f48074aa6652386fe700bc4509edc098619174cdd1c87607f1431ebd3abf1884eff4dae793cc9ced6dbab6c0ef7bf795d2ee446e3bdef865830745dc02cbd968ab353059aec62ace8e32a562ab4b2c038ffe3140bb284877a84d9a6ee5fdf06fbd9835da6e8f21c8527a309b8c831adbd9f1b58d53e3be8bb14f27fcc2bad0d76e34f5a019d19915a95458e7027400240a37f3be7512b661791308d04e65841c31e75501800e34276f3911e5f76ccb458dc5b8b0930d3ea1b8fb7a35f99f59267644c2c2f2c9d9871ba3696231aa94a113534f -
@HustleMan said in Как хешировать password_type 4 средствами BAS:
@Fox благодарю за ответ, пробовал, не могу сообразить последовательность. В снифере длинная строка получается, а у меня короткая
psd = "admin" psd = b64(sha256(psd)) psd = "admin" + psd + token psd = b64(sha256(psd))и в снифере явно кодировка не base64
В таком случае смотрите код данных функций на сайте или хотя бы приложите значения переменных "username", "password", "TokInfo"
-
@Fox Это веб морда модема Huawei E8372h-153
Проблема с авторизацией, не могу никак побороть из-за этой беды
Если получиться разгадать хеш выложу шаб с функционалом отправки смс для данного модемаДано: username = admin password = adminadmin token = dSKEGHkAHQKVFgDNBOfKIwaDXi4+RvZc password = "adminadmin" password = sha256(password) password = b64(password) password = "admin" + password + token password = sha256(password) password = b64(password) Итог: 3f1489ff1a632ab7fc31e7d1b899c5946eb6fa3ee8b6b86e53bfcac88ffc7227dc832f76e71fe38261673f310d2da3a42318fd32eaba43bd4e0ec96e33dbd0bcad25c771260a8dd1ae45828846660c17e1986f4d12313fd11e160175b45f8adc3eb804f6b84feacd1758dc26762e2e4d57d6d39b845f8415fd302cdcfd5e2ee0631c843c35c76e1766c91bb9369c6705d1cb3a6a1f5f85e8b641b694681c10f863c15fe0c9a231e1e2e18277d93828ff80bf3d62a0b4a340b987c042bf098eb700c00d1d224da3a97e9d77f7b0a34d81481aaf17644aac1bd870af70a23150109148137fc9c1122463561f8df9e34016eb874887a4b34f15ad2bea684b233dd61422094df08437a0064387d2acb7d64b61a0010d917d65c19131b8f9612530f84d6b2e98dd13a4f9a981b04632aa913118a953b4d11a9b51f9bbc733949a925d6dae198ade5b651a881452caf85777a0d5c36473201881417d37674cf4e9671b9390c363bdee9cf2566c8786c6263f1d98f53d96fb177357c67eaa19fbff9302d33c29318ac7e0e2d5afecc99bcc8ddc5d835a5c276d77d8f1e2e7bcc07f6805d336a60e06b4dcf3ef8f195787a66bf7da99db77671f7163e2a6b68d7ec2fe4cbc94e32553fcddc92251b521233e679d852aeb035e6deb540c5de75e4122e4e0bff2424e19dc36ea310a26f10e91a89e180a153db53506f9c64c9fc638867555 -
@HustleMan said in Как хешировать password_type 4 средствами BAS:
@Fox Это веб морда модема Huawei E8372h-153
Проблема с авторизацией, не могу никак побороть из-за этой бедыОбратите внимание на последние две строки кода:
password = sha256(password) password = b64(password)Предыдущие преобразования данных неважны, так как функция sha256() получает хеш фиксированной длины в 64 символа:

Преобразование 64 символов в base64 ни как не превратит их в 1024 символа. Смотрите код формирования токена более внимательнее
-
@Fox нашел запрос который отдает чет похожее: http://192.168.8.1/api/webserver/publickey
<?xml version="1.0" encoding="UTF-8"?> <response> <encpubkeyn>afe8cd6241e06477736584e66df85dfd4b2baf45c443267c87a2fbf987e174bf607ef1cfa6027400ece641436b333debcf5e7a5cfb3670e86b30add0b739c92cd8829892dd51a15b16176abf9a265141ca51b5bfd8fbc953ab40f7c0694747dd2a1265c2a7c5da0a56d8d068205de521825ca6f0f702ed4d6b520cee5f48b8a0858c8a2bbc80ea17f6ab81fa7e3d3dcb69ffcd05cd23f57bec12442763f726f5b8b9928131f890f821b310d4c6307d860fea419edba188fbe3d09a4d668cbd473abd68be269f39a30424c6bde5f15ceeabc7953dce76447e20839249840be3b85e41436a9e8ee8f2f3296bd645fd6f131f64f3c101cfb2fddeba3fc7f58f967f</encpubkeyn> <encpubkeye>010001</encpubkeye> </response> -
@Fox если это поможет
VerificationToken: Ng+eeWAmJV6JFIb+ls4yjwXZKblG5zvn name = admin password = adminadminКонечный результат:
37b3c1697b91968c306a64ad9b89a93889e7bc8571f790b33dca6e78d62642e477364473dec964c331635ee115ba2fc019f9df5cd37dd4f03228117737f7ef6231b831c04dbab9ffb5197f87518b142cbe9d42f7ab8f5001398c50fa97818a9d984095946cfdb9b97937cde87a2122f1c10aad4e387395c93201df0ac68bd67dae43a5a36ade1e1c0a6c159f558ca5c3d1fd83142de5dedda1217b175d6050f182f831a4ef0f6bfc18ec02e481867a31420569814fbab640bb0b327c4464af35e83ce44358f94a6e6632af898aebcc231362d997de89c04629a7594da679eaa3f4bacf1fb0c2c7f195db659d665940afbea878c925256302f3655c1000cb5890a164dab2c5c82f2b06e01a6b3d9fa85a297cb95c96636c6ddbae0c4c3bb7877b3b4eb4eab3f3fb9f39be627804f62e13c913635c323e89dd831b9065b469db8dce0f90ef0139d33111683a129cd1fc1ea5370b0bd5b6051045671b8a8309d3d60ad8655e1070e89014f5f4bf7d06339f56a269aa621b612e6aa9c0fdb5b4d76db76e498fc369d1773a3c6eb647d16ce8b69b11e705bcd5b38a1f094e7d37de4b2b742aeaa265967d30c0fafa49041fb2646b7a737df62da40b5566a8b07d3387ba0245119c3f5b469b5383eda9fdc3fb70630458e3e19cbd14e3cd265886197348d6380f10d9066b703dc3e6f7139f00f0ca17deaeefa7dd36e6810d8fec579e -
import base64 import binascii import hashlib import json import huaweisms.api.webserver from huaweisms.api.common import ApiCtx, common_headers, get_from_url, post_to_url def b64_sha256(data): # type: (str) -> str s256 = hashlib.sha256() s256.update(data.encode("utf-8")) dg = s256.digest() hs256 = binascii.hexlify(dg) return base64.urlsafe_b64encode(hs256).decode("utf-8", "ignore") def quick_login(username, password, modem_host=None, uri_scheme="http", verify=True): # type: (str, str, str, str, bool) -> ... ctx = ApiCtx(modem_host=modem_host, uri_scheme=uri_scheme, verify=verify) token = huaweisms.api.webserver.get_session_token_info(ctx) session_token = token["response"]["SesInfo"].split("=") ctx.session_id = session_token[1] if len(session_token) > 1 else session_token[0] ctx.login_token = token["response"]["TokInfo"] response = login(ctx, username, password) if not ctx.logged_in: raise ValueError(json.dumps(response)) return ctx def login(ctx, user_name, password): # type: (ApiCtx, str, str) -> ... headers = common_headers() url = "{}/user/login".format(ctx.api_base_url) password_value = b64_sha256(user_name + b64_sha256(password) + ctx.login_token) xml_data = """ <?xml version:"1.0" encoding="UTF-8"?> <request> <Username>{}</Username> <Password>{}</Password> <password_type>4</password_type> </request> """.format( user_name, password_value ) # setup headers headers["__RequestVerificationToken"] = ctx.login_token headers["X-Requested-With"] = "XMLHttpRequest" r = post_to_url(url, xml_data, ctx, headers) if r["type"] == "response" and r["response"] == "OK": ctx.logged_in = True return r def state_login(ctx): # type: (ApiCtx) -> ... url = "{}/user/state-login".format(ctx.api_base_url) return get_from_url(url, ctx)что то как то так там (это питон)
ковыряй https://pypi.org/project/huawei-modem-api-client/#description -
@HustleMan said in Как хешировать password_type 4 средствами BAS:
@Fox походу не мой уровень(
https://stackoverflow-com.translate.goog/questions/60422836/c-sharp-encrypt-string-to-rsa-based-on-public-key-huawei-e8372?_x_tr_sl=en&_x_tr_tl=ru&_x_tr_hl=ru&_x_tr_pto=nui,scА вы искали готовые библиотеки на node js? Первые ссылки в выдаче на npm:
https://www.npmjs.com/package/hilink-nodejs-sms
https://www.npmjs.com/package/hilinkhuawei
https://www.npmjs.com/package/hilink-modem
https://www.npmjs.com/package/sms-forward
https://www.npmjs.com/package/huawei-lte-api -
@HustleMan said in Как хешировать password_type 4 средствами BAS:
@Fox Не искал, но эти не подойдут
Я бы на вашем месте посмотрел подключаемые библиотеки на сайте и просто использовал их готовый код. Для этого можете посмотреть вкладку source в фаербаге, или сохранить страницу ctrl+s и посмотреть какие файлы лежат в папке с сохранённой страницей
-
@HustleMan said in Как хешировать password_type 4 средствами BAS:
@Fox короче сделаю авторизацию через веб интерфейс, а смс уже через api. Может у кого-то потом появиться решение, потому велком в топик
Что бы у кого то появилось решение вы бы загрузили сюда архив с сохранённой страницей (со всеми файлами скриптов внутри). Ну и контрольные данные на входе и выходе для проверки
-
@Fox Задача решена.
Те кракозябры на самом деле являлись хешированным xml запросом.

Вот так собственно он выглядит.

Тему можно закрывать.
Вот рабочий скрипт авторизации для модема Huawei e8372h-153
Версия ПО: 21.328.03.00.00
Версия веб-интерфейса: 17.100.18.03.143-Mod1.21
authorization_huawei_E8372H-153.xml