【web逆向】某省开放大学登陆接口(上)
本帖最后由 wuye4 于 2024-3-20 21:32 编辑# 【web逆向】某省开放大学登陆接口(上)
---
#### 打开网站
发现cookie无明显变化使用下面代码自动保存cookie
```python
import requests
requests = requests.session()
```
#### 点击登陆
发现跳转到了这个网址,上方idsLogin来判断是否登陆成功,输入账号密码发现password和execution参数有有加密。
#### 获取加密密码
先搜索encrypt,一个一个找,找到加密地方,发现这段js代码最可疑,仔细一看是RSA加密,打个断点。
发现确实是这段js代码进行加密,进入到security.js扣取整段代码,最终获取加密的密码
```python
#pip install PyExecJS使用该库运行js代码获取password加密后的参数
import execjs
def encryptpwd(password):
#使用node.js运行js代码
node = execjs.get()
# 读取文件并编译
test = open("password.js", encoding="utf-8").read()
exe = node.compile(test)
# password.js中的encryptAES方法,传入参数 password
encrypt_result = exe.call("encryptAES", password)
return encrypt_result
```
```javascript
//js部分代码,完整代码见附件
function encryptAES(val) {
var thisPwd = val;
if (thisPwd.length != 256) {
window.RSAUtils.setMaxDigits(131);
var key = window.RSAUtils.getKeyPair("010001", '', "008aed7e057fe8f14c73550b0e6467b023616ddc8fa91846d2613cdb7f7621e3cada4cd5d812d627af6b87727ade4e26d26208b7326815941492b2204c3167ab2d53df1e3a2c9153bdb7c8c2e968df97a5e7e01cc410f92c4c2c2fba529b3ee988ebc1fca99ff5119e036d732c368acf8beba01aa2fdafa45b21e4de4928d0d403");
var result = window.RSAUtils.encryptedString(key, thisPwd);
}
return result
}
```
#### 获取execution参数
直接搜索execution发现就在该网页的源代码中,直接请求网址使用正则表达式获取
```python
def getloginservices():
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Referer': 'http://xuexi.jsou.cn/',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
}
params = {
'service': 'http://xuexi.jsou.cn/jxpt-web/auth/idsLogin',
}
response = requests.get('https://ids3.jsou.cn/login', params=params, headers=headers)
execution = re.findall(r' <input type="hidden" name="execution" value="(.*?)" />', response.text)
return execution
```
#### 请求登陆
发现重定向了Location这个网址,requests默认会自动跳转,我们需要让allow_redirects=False来停止跳转,拿到参数,最后在请求Location这个网址,实现登陆成功。
```python
def login(username, password, execution):
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Origin': 'https://ids3.jsou.cn',
'Referer': 'https://ids3.jsou.cn/login?',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
}
params = {
'service': 'http://xuexi.jsou.cn/jxpt-web/auth/idsLogin',
}
data = {
'username': username,
'password': password,
'submit': '登录',
'execution': execution,
'encrypted': 'true',
'_eventId': 'submit',
'loginType': '1',
}
response = requests.post('https://ids3.jsou.cn/login', params=params, headers=headers, data=data,
allow_redirects=False)
return response.headers['Location']
```
```python
def idslogin(Location):
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
}
response = requests.get(
Location,
headers=headers,
verify=False,
)
```
---
# 结语
**完整js代码**
https://wwm.lanzn.com/b05l314kf
密码:7bpq
下一期更新此学习网站一键看视频,回帖,看文档。 虽然不太懂,不过下来我得试试可不可以{:1_893:} wuye4 发表于 2024-3-22 16:55
已评分的作业也是自己写的,它只会显示你做的答案,你写的对,它的答案就是你的答案,你写的不对,它的答 ...
是这样的,但应该可以根据题目得分判断对错,采集对的就可以了,然后生成csv保存,在重复提交的时候调用题库csv答题,错误的选项可以人工在题库里补足,起码解决大部分问题,毕竟全正确题库爬不到啊~~老哥,下期就解决这个呗....乱序答题写的脑子疼~ @FCGkitty 新的来了{:1_927:} 漂亮,拿走了。 楼主牛逼啊!!! kongP5 发表于 2024-3-20 22:11
楼主牛逼啊!!!
一起学习 学习了,非常感谢 27316c 发表于 2024-3-20 21:46
漂亮,拿走了。
不谢不谢 等下一期,这个能做题吗 nanwang666 发表于 2024-3-20 23:40
等下一期,这个能做题吗
能,估计要下下期。现在还没有思路,代码写不出来。 这也行的吗?