某音乐类App评论相关API的分析及SQL注入尝试

*本文作者:molibird,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

关键字:APIfen、工具使用、sql注入

涉及工具/包:Fiddler、Burpsuite、Js2Py、Closure Compiler、selenium、phantomjs、sqlmap

摘要:

记录分析某音乐类App评论相关API的过程,以及一些工具/包的基本使用(部分工具对最后尝试没有影响,但在其它场景或许有用),最后结合sqlmap进行注入尝试。本文对于sql注入没有深入展开(水平不够…)。

想法来源:本想写个程序获取零评论的歌曲,去占沙发…分析发现获取评论的POST请求参数有点复杂…既然花时间研究了,顺便进行一下sql注入的尝试。

目录:

一、获取相关代码

1、获取评论的HTTP请求

2、寻找主要JS文件

3、Fiddler:将JS文件替换成本地JS文件 便于调试

4、Fiddler + Burpsuite

5、具体发送请求的JS代码 / 构造参数的代码

二、分析代码:

1、windows.asrsea()函数

2、JSON.stringify(j7c)

3、最关键的加密函数b()

三、用Python完成JS加密函数的功能

1、Js2Py包:直接将JS转换成Python(失败尝试)

2、Closure Compiler:JS简化压缩(失败尝试)

3、selenium + phantomjs

四、sqlmap使用自定义tamper

1、编写tamper

2、sqlmap尝试

五、总结

正文

一、获取相关代码

1、获取评论的HTTP请求

评论的分页功能一般会用到的参数:第几页、获取几条 等等。

但此处POST请求参数并不简单,直接加密成了一长串字符串。

2、寻找主要JS文件

这里的JS文件都是被混淆过的,但如果最后要构造/发送参数,参数名是不能被混淆的。因此,利用参数名encSecKey在JS内容中进行搜索,发现core.js中出现了3次,初步猜测相关的代码都在这里。

3、Fiddler:将JS文件替换成本地JS文件 便于调试

4、Fiddler + Burpsuite对Fiddler 还不熟悉,在这里仅利用fiddler的替换功能,其它查看分析都在Burp中完成。

Fiddler 好像没有Burp的截断暂停/方形功能?

Burpsuite好像没有Fiddler 那么方便的替换文件功能?

只需要将Fiddler设置代理 将流量导向Burp的8080即可。

选择 Tools-Options 打开设置

5、具体发送请求的JS代码 / 构造参数的代码

搜索参数名

进行调试 发现:

bLN7G对象、相关的 window.asrsea()成为关键

对应

对应

浏览器工具输出内容与Burp内容不完全一样,因为burp内容经过了URL编码

二、分析代码:

1、windows.asrsea() 函数

函数:

返回一个固定长度的随机字符串,后续的a(16)可以直接取16个a,”aaaaaaaaaaaaaaaa”。

函数即 函数

其中的函数传入的3个参数都是常数,猜测就是一个常数,用抓到的请求包中的参数值直接代替,发现页面成功响应说明猜测正确。

到目前为止,的有效参数只剩下第一个

2、JSON.stringify(j7c)

和评论API相关的 就是

在代码中直接修改 :

发现页面获取的评论 出现偏移(首页热门评论消失,时间排序从第2条开始获取)。

到这里就和平时进行sql注入的情形很像了。

3、最关键的加密函数b()

发现对象的内容绕来绕去…代码量太多(这里就不贴出来了,太占篇幅)

想要寻找简单点的办法

三、用Python完成JS加密函数的功能

1、Js2Py包:直接将JS转换成Python(失败尝试)基本使用:

注意:Js2Py无法识别JS用法:

使用发生错误,还有很多JS的用法Js2Py不能识别。

想先将JS进行简化,再进行转换尝试。

2、Closure Compiler:JS简化压缩(失败尝试)

智能模式如下 JS代码:

压缩后:自动删除所有无用的代码

注意:Compiler无法识别JS非严格模式的用法

解决办法:

1、被弃用:给函数增加一个函数名

2、修改为

简化压缩后,再次尝试Js2Py的转换,依然失败…

被混淆的JS代码,暂时没能力去修改到复核Js2Py的格式。

只能换个思路:Python调用浏览器,让浏览器去执行JS

PyV8,没安装成功…

3、selenium + phantomjs

selenium 结合 浏览器(比如Firefox需要下载 geckodriver)

selenium 结合 phantomjs(类似:不显示内容的浏览器) 速度更快

第一步、下载phantomjs、geckodriver并将路径添加到系统的PATH环境变量

第二步、本地服务器创建php文件,利用原有的JS进行加密然后输出:

第三步、selenium结合phantomjs:

四、sqlmap使用自定义tamper

1、编写tamper

2、sqlmap尝试

五、总结:

使用selenium效率肯定没有直接Python直接加密好,但对于混淆过的JS代码,可以省去很大的分析精力…对于类似存在加密的场景,也可以快速进行尝试。

对于应用开发来说,即使在前端对参数值进行加密,后端在使用中依然需要进行过滤。

*本文作者:molibird,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

本文来自企鹅号 - FreeBuf媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

某音乐类App评论相关API的分析及SQL注入尝试

涉及工具/包:Fiddler、Burpsuite、Js2Py、Closure Compiler、selenium、phantomjs、sqlmap 摘要: 记录...

2166
来自专栏小特工作室

基于微软RDLC报表控件示例(含源码)

      五一放假,研究了下RDLC,之前一直有人说如何强大?研究之后才发现,确实很强大.微软的这套东西,感觉是借鉴了Sybase的数据窗口,配置方式大同小异...

19410
来自专栏Golang语言社区

【前端编程】加载第三方JS的各种姿势

从网站开发者的角度来看,第三方JS相比第一方JS有如下几个不同之处: 下载速度不可控 JS地址域名与网站域名不同 文件内容不可控 不一定有强缓存(Cache-C...

2759
来自专栏Python中文社区

用python搭建一个校园维基网站(二)—— 可编辑内容的首页的创建

專 欄 ❈ treelake ,Python中文社区专栏作者 项目Github地址: https://github.com/zr777/school-wik...

2488
来自专栏数据科学学习手札

(数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

  接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库...

1184
来自专栏向治洪

React Native项目组织结构介绍

代码组织: 目录结构: . ├── components //组成应用的各个组件 │   ├── Routers.android.js //每个组...

1967
来自专栏python学习指南

Python爬虫Scrapy(二)_入门案例

本章将从案例开始介绍python scrapy框架,更多内容请参考:python学习指南 入门案例 学习目标 创建一个Scrapy项目 定义提取的结构...

1806
来自专栏软件开发

一个小时学会Maven

在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。

1903
来自专栏Java技术分享

Apache Maven 入门篇

写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法。 这个入门篇分上下两篇。本文着重...

2069
来自专栏walterlv - 吕毅的博客

如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

发布于 2018-05-11 16:04 更新于 2018-09...

581

扫码关注云+社区