尝试自动访问使用Javascript加密表单数据的Web界面

时间:2017-06-23 23:13:28

标签: javascript php curl encryption

首先,感谢您抽出宝贵时间阅读本文。我很确定这不是我谷歌的失败。

我正在尝试构建一个自动化工具来访问具有HTTP / HTML接口的设备。 (具体来说,它是IP电话。)登录页面有一个用户名字段和一个密码字段,但该表单未提交。在提交隐藏表单之前,隐藏的表单会使用来自设备的额外数据(用作RSA密钥),然后是字符串的MD5哈希和AES加密来填充。

它还通过Javascript设置会话cookie,通过Ajax获取会话ID。一年或两年前,当我陷入尝试将Javascript函数移植到php和/或复制结果时,我放弃了类似的项目,但我不得不相信有更好的方法。

function ajaxSucceedCallBack(req, res)
{
if (/^[\w,]+$/.test(res))
{
    var res = res.split(",");
}
var rsa = new RSAKey();
var sessid = "";

if (res.length == 3)
{
    rsa.setPublic(res[0], res[1]);
    sessid = res[2];
    document.cookie = "JSESSIONID=" + sessid;
}

var key = CryptoJS.MD5(Math.random().toString()).toString();
document.formInput2.key.value = rsa.encrypt(key);
key = CryptoJS.enc.Hex.parse(key);
var iv = CryptoJS.MD5(Math.random().toString()).toString();
document.formInput2.iv.value = rsa.encrypt(iv);
iv = CryptoJS.enc.Hex.parse(iv);
var data = "rand=" + Math.random() + ";";
data += "sessionid=" + sessid + ";";
data += "username=" + document.formInput.username.value + ";";
data += "pwd=" + document.formInput.pwd.value + ";";
data = "MD5=" + CryptoJS.MD5(data) + ";" + data;
var encrypted = CryptoJS.AES.encrypt(data, key, 
  { iv:iv, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.ZeroPadding });
document.formInput2.data.value = encrypted.toString();
document.getElementById("notice").innerHTML="";
document.formInput2.submit();
}

最终目标是在单个系统上拥有一个Web界面,该界面能够自动登录并从/向所有设备上载和上载配置文件。我在php中开始这个,但如果它有效,我很高兴perl,python,调用curl,甚至是bash脚本,如果它完成了工作。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

如果您不关心自动化的性能,一种简单的方法就是使用WebDriver。查看Python中的示例: http://selenium-python.readthedocs.io/getting-started.html

基本上它启动了一个可以从Python(或其他语言)控制的浏览器。如果您不想要启动浏览器的开销,可以使用Node.js。