Struts2-S2 001详细分析
前言:本篇文章是站在一个只会一丁点java基础,没有任何Java开发经验的的菜鸡眼中去完成的.所设计知识点繁多,杂乱,从Struts2的执行流程到漏洞Rce,适合小白看.本次分析的是Struts2-S001,版本为2.0.8
0X01:OGNL表达式OGNL 是 Object Graphic Navigation Language (对象图导航语言)的缩写,是一个开源项目。它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法。
Struts2 中支持以下几种表达式语言:OGNL、JSTL、Groovy、Velocity。Struts 框架使用 OGNL 作为默认的表达式语言。
为什么这里要提到OGNL表达式呢?因为就是OGNL存在可以执行java代码的函数,而Struts2使用了OGNL进行开发,但是在这个过程中由于疏忽导致用户可控OGNL处理的表达式数据从而造成注入.
打个比方,就好比php里面开发者用了eval()函数,但是呢由于开发不严谨导致eval()函数的参数被用户可控了,那肯定就直接RCE了.
OGNL表达式到底怎么用呢?我们来举 ...
代码审计:信呼oa
这个忘记写了,先留着…
利用SSRF打Redis
SSRF&Gopher协议最近研究通过Gopher协议构造post,get请求来攻击内网的一些服务。遂继续研究Gopher协议,Gopher协议不仅可以进行post,get请求的修改,还能构造TCP数据流攻击一些内网的服务。如redis,mysql等。这次分析通过SSRF和Gopher协议攻击redis,以及对攻击原理进行分析。
未授权的Redis未授权redis服务即不需要密码即可使用的redis服务,这种暴露在网络中而且不需要授权的服务非常危险,可以直接构造payload执行文件写入,反弹shell等危险操作。
安装redis后使用root用户启动。(手动关闭redis后重新使用redis-server命令启动,不然默是redis用户,没有文件写入权限)
使用工具生成payload,直接打。
成功写入:
流量包分析抓出攻击流量包进行流量分析
1tcpdump -i eth0 port 6379 -W 1234.pcap
流量包结构如上,redis使用了RESP协议进行通信的。该协议内容如下:
截取了流量包前半部分分条解析RESP协议
1234567 ...
美团CTF 2021 web writeup
web1 sql
登录页面,首先fuzz测试一下过滤关键字。
过滤了select ascii substr if 各种比较,引号。而开放了regexp,/**/等特殊字段。不考虑bool盲注,时间盲注。考虑
regexp正则盲注,关于正则盲注可以去我的sql总结中看。
思路:正则盲注,使用16进制编码绕过引号限制,使用/**/绕过空格限制。使用||绕过OR限制,而\用来转义引号从而使其闭合。
payload:
1username=admin\&password=||password/**/regexp/**/0x5e542a#
脚本Python3:
1234567891011121314151617import requestsimport stringurl = "http://eci-2ze10cbxg19yyr2ee727.cloudeci1.ichunqiu.com/"ALLSTR = string.ascii_lowercase+s ...
常见SQL注入总结,原理分析
[TOC]
sql常见运算符,注释符。众所周知sql存在注入的本质是在代码层面sql语句存在拼接,过滤不严谨等,用户可以通过控制sql语句从而达到注入的目的。在进行sql总结时先总结下常见的sql符号。
注释符123456单行注释#--多行注释/*...*/
算数运算符123456算术运算符+(加)-(减)*(乘)/(除)%(取模)
比较运算符1234567=(等于)>(大于)<(小于)<>(不等于)>=(大于等于)<=(小于等于)!=(不等于)
逻辑运算符123AND(两边为真返回真)OR(两边为假返回假)NOT(对布尔表达式值取反)
False注入为何叫False注入呢,是因为mysql存在隐式类型转换。抛开官方文档各种复杂的解释。最简单的就是mysql在进行比较运算的时候,如果将字符串与数字进行比较,就会将字符串进行类型进行转换,而这个转换会失败从而转为false。
举个栗子。
现在有个sql语句:select ‘a’ = false;
这个sql语句执行的时候’a’ ...
记一次一血,CBC字节翻转攻击/bmp隐写
ISCC客服一号冲冲冲(二)考点:CBC字节翻转攻击,bmp隐写
进入题目发现就给了一张图片,扫目录,看返回包,没有发现有用信息。
发现图片是个登录框,联想到手动传参登录。尝试get,post最后发现post可以成功发送登录请求,根据题目提示,账户为admin,密码为上一道题的flag:‘1SCC_2o2l_KeFuu’,我这里没用是因为只是为了掩饰,真正打的时候密码得用1SCC_2o2l_KeFuu,然后提示admin账户无法登录。
更换账户尝试,发现响应头中含有iv,cipher。属于CBC字节翻转攻击标志。
现在需要后端的加密源码,尝试寻找源码泄露途径。发现登陆的哪个图片是bmp格式的,bmp存在隐写。下载下来使用工具发现源码就藏在其中,红色部分为泄露的源码。
因为这个隐写只找出了这么点代码,就通过源码特征在网上搜到了全部源码。
整理后如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606 ...
SSRF gopher协议构造
SSRF利用中的万能协议gopher在一次CTF的SSRF利用中构造gopher协议对内网靶机构造post请求时出现了一些问题导致请求400,而原因大多都是构造出的gopher协议存在编码上的问题,现记录gopher协议构造方法。
gopher协议构造gopher协议请求包,回车换行使用%0d%0a,然后进行url编码后发包。其他与http协议类似。
下面按照此要求构造一个gopher请求包。
GOPHER://172.21.0.2:8080/_POST /login HTTP/1.1%0d%0aHost: localhost:1000%0d%0aConnection: close%0d%0aContent-Type: application/x-www-form-urlencoded%0d%0aContent-Length: 31%0d%0a%0d%0ausername=admin&password=c9a5d20c9f84
往172.21.0.2:8080/login下发起post请求。带上必须要的http请求头字段,发起请求。
GET构造方式与其相似,下面贴上自动生成脚本 ...
ThinkPhp5.0.x反序列化链分析
前言:之前花了很大的功夫审计了Thinkphp5.1.x的反序列化利用连,对整个反序列化的利用过程和整个代码审计的逻辑,过程都学到了很多,这次继续来分析Thinkphp5.0.X的反序列化利用连比第一次轻松,容易了许多,也学到了不少新的东西,对代码逻辑的理解又更深了。
复现环境:thinkphp5.0.24,windows10
0x01:从与5.1不一样的地方开始入手因为所用到的知识以及配置的环境都和5.0.24的哪一条链很类似,只不过利用的类,方式不同了,大同小异,所以我们跳过与5.1相似的地方直接从不一样的地方开始分析。
先放出payload方便分析:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596<?phpnamespace think\process\pip ...
Golang-Windows环境配置踩坑(超详细)
0x01:下载,安装Go访问https://golang.google.cn/dl/
选择对应版本,一路默认(注意一下安装路径,或者你自己选),安装即可。
0X02:配置系统环境变量1.配置系统环境变量找到我们刚刚安装go的位置,我默认安装在了”C:\Program Files\Go“下,那么”C:\Program Files\Go\bin“就是系统环境变量的值,将它添加到其中即可。
起一下cmd验证一下,配置成功。
0X03:建立工作目录,配置GOPATH1.GOPATH工程结构在 GOPATH 指定的工作目录下,代码总是会保存在 $GOPATH/src 目录下。在工程经过 go build、go install 或 go get 等指令后,会将产生的二进制可执行文件放在 $GOPATH/bin 目录下,生成的中间缓存文件会被保存在 $GOPATH/pkg 下。
这里的$GOPATH指的便是我们的工作路径。举个例子
现在,我需要在D盘建立一个文件夹用来存放我的go代码文件,我会现在D盘下新建一个名字叫“go”文件夹,那么这个时候$GOPATH=D:\go,我们在D:\go ...
ThinkPhp5.1.x反序列化漏洞分析利用
前言:最近开始审计thinkphp的一些漏洞,理解其原理,加深对框架工作模式的认知。由于在CTF中了解一些反序列化的基本知识以及基本原理,但是没有分析过一条真正意义上的反序列化链,这次直接上手thinkphp的反序列化链开头也比较困难,不过在用了差不多一周的时间反反复复研究也差不多看懂了这条链,在学习网上大师父们的思路后自己也有了一些新的理解,遂记录。
复现环境:thinkphp5.1.37,windows10
0X01:基础配置总所周知反序列化漏洞的触发的基础来自于php自带的魔法函数,这一类函数他们非常具有特点。特点就在于当对象被执行特定操作时就会触发。在本次pop链中使用到的魔法函数有
1234__construct()在对象被实例化时调用__destruct()在对象被销毁时调用__toString()在对象被当作字符串处理的时候调用__call()在调用对象不存在的方法的时候调用
要开始pop链的分析,必须要添加一个入口,unserialize()函数会将我们的序列化数据还原,从而开始pop链的执行。我在index模块的index控制器下增加了如下代码
用一个paylo ...