- HWS-CTF-第七期山大站-inverse
看星猩的柴狗
HWS-CTF-第七期山大站java服务器开发语言
文章目录inversemainworkread_intread_n思路onegadgetexp第一次真正意义上独立在比赛中做出题目来了,距离真正意义接触CTF-PWN差不多正好两个月。但由于不知道靶场要自己开而且端口每次自己打开会改,交flag稍微晚了些(我太菜了)inversemainwork这里很明显发现符号转换的bug,即nbytes对应有符号数为-1时可以造成溢出read_int将输入的字
- CTF-PWN中patchelf更换libc和ld的完整详细过程
看星猩的柴狗
CTF-PWN-前置网络安全安全系统安全学习
查看当前链接ldd可执行文件名第一行不用管第二行是libcl,ibc是C语言标准函数库,第三行是ld,ld是动态链接器查看当前的libc和ld的版本查看正确的的libc和ld对应的版本为2.31-0ubuntu9.9,与当前不符合在glibc-all-in-one下载对应版本或相近的查看是否有对应版本下载patchelf修改libc和ldpatchelf--set-interpreter新的ld文
- 从零开始搭建Ubuntu CTF-pwn环境
C0Lin
PWN学习笔记学习pwn安全
最近因为学校考试所以没怎么看pwn,但是中间虚拟机崩掉过,问题还挺严重。前几天发现能正常打开了,但是一用gdb就会出现下面让人窒息的提醒:怎么调都不知道是怎么回事,很奇怪的是只有在开gdb的时候才会弹出这个错误,其他都是正常的。问过师傅时候无奈只能放弃这个与我并肩作战这么长时间的ubuntu20.04,重装一个虚拟机。一不做二不休,干脆就将整个过程记录下来,便于日后查询。(最后有本人的CTF学习路
- pwnable.tw之hacknote
Kdongdong
ctfpwnuafmalloc
uaf漏洞产生的主要原因是释放了一个堆块后,并没有将该指针置为NULL,这样导致该指针处于悬空的状态(有的地方翻译为迷途指针),同样被释放的内存如果被恶意构造数据,就有可能会被利用。再怎么表述起始还不如真的拿一道题自己调自己看内存看堆状态来的好理解。这也是我觉得ctf-pwn的意义所在,可以把一些漏洞抽象出来以题的形式,作为学习这方面的一个抓手。此篇尽量做的细致基础,但仍然假设读者已经初步了解ua
- 【Github链接失败】不使用github的CTF-Pwn环境部署(ubuntu 18.04)
N1c3wn
系统安全pythonc++网络安全
前言在IT界,或者说所有涉及到软件编程的工作岗位的人,估计都知道GitHub的大名。GitHub是世界顶级开发者的聚集地,在这里几乎可以找到任何想要的东西。上面分享有许多优秀、著名的开源项目,在遵守其License的前提下,我们可以免费使用、下载这些开源项目。这也是GitHub最为吸引人的地方。它是程序员们的天堂~大部分地区都是能上github的,但是作者上学的地方很多知识或技术网站都访问不了,谷
- CTF-PWN学习-为缺少指导的同学而生
予我心安A3
CTF学习网络安全CTF比赛CTF-PWN入门PWN
更新公告:2023-7-5晚上21:12已更新,对内容做了些调整。调整如下:添加解题步骤描述添加专业名词描述博主也是个PWN的入门者。PWN的入门不可能是无痛的。能做到的只是减少一点初学者的痛苦。这篇博客会长期维护,也会越来越好。PWN是什么CTF中PWN题型通常会直接给定一个已经编译好的二进制程序,然后参赛选手通过对二进制程序进行逆向分析和调试来找到利用漏洞,并编写利用代码发送playload,
- CTF-PWN笔记(二)-- 格式化字符串漏洞
Chiaki_0ff
CTF-PWN网络安全网络安全
文章目录漏洞介绍格式化字符串的格式漏洞原理及利用例题漏洞介绍格式化字符串(英语:formatstring)是一些程序设计语言的输入/输出库中能将字符串参数转换为另一种形式输出的函数。例如C、C++等程序设计语言的printf类函数,其中的转换说明(conversionspecification)用于把随后对应的0个或多个函数参数转换为相应的格式输出;格式化字符串中转换说明以外的其它字符原样输出。格
- CTF-PWN环境搭建
L1nYuan
网络安全
CTF-PWN环境搭建注:此次环境搭建使用的系统是最新版kali2022,从官网下载直接导入虚拟机,按下图操作即可,不会出什么问题这里使用的默认的kali官方源,如有需要也可以换,不过我这里测试的是默认源,没有出一点问题kalihttps://www.kali.org/get-kali/#kali-virtual-machinesGDBkali2022默认是不带gdb的,需要安装sudoaptup
- CTF-pwn入门–基础环境安装
Aurora_Mengzc
c语言pythonubuntu
pwn的入门–环境安装:虚拟机安装–Linux–ubuntu:PWN的题大多数是在Linux上打,先安装一个Ubuntu是成为pwn手的开始。VMwareWorkstationPro:VMwareWorkstationPro官网Ubuntu镜像网站:Ubuntu镜像网站Ubuntu官网:Ubuntu官网pwn环境搭建:#换源先备份一下自带的源,以防以后再用cp/etc/apt/sources.li
- CTF-PWN笔记(一)-- 栈溢出 之 基础ROP
Chiaki_0ff
网络安全python网络安全
文章目录栈linux内存布局原理文件保护机制CanaryNX(DEP)PIE(ASLR)RELROROPret2txtret2shellcoderet2syscallret2libc栈栈是一种典型的后进先出(LastinFirstOut)的数据结构,其操作主要有压栈(push)与出栈(pop)两种操作,如下图所示(维基百科)。两种操作都操作栈顶,当然,它也有栈底。高级语言在运行时都会被转换为汇编程
- Shellcode的生成和利用
Fasthand_
CTFPwn信息安全
构造shellcode是CTF-PWN和渗透当中经常需要进行的一项活动,有合适熟练的构造shellcode的方法途径,可以使得pwn的过程更加流畅和舒服。下面列出了几种shellcode的获得方法,与各位交流分享。法一LibcSearcher与one_gadget特点:安装简单,好理解,构造思路清晰。frompwnimport*#pwntool生成shellcodeshellcode=asm(sh
- CTF-pwn 2014-stkof writeup
Vicl1fe
pwn
题目链接:Github参考链接:传送门堆的一些基础这里就不再介绍了,网上有很多,也可以加qq群一起讨论:946220807准备开始正文读懂题目拿到题目,开启我们的IDA查看伪代码。运行程序并没有使用帮助,只能自己慢慢琢磨了。可以看到输入不同的数字对应不同的函数(ida不同函数名可能也不同),共4个函数:fill():这个函数用来向分配的空间填充数据。free_chunk():用来释放malloc分
- ctf-pwn的一些小技巧
钞sir
Pwn
当我们在写exp的时候有些需要去复制粘贴某些函数在plt表,got表的地址,或者找ROP的地址,有些时候复制粘贴不方便且不方便阅读,这样时候我们就可以用pwntools中提供的一些函数;以32位程序的exp为例:ROPgadget:0x0804872f:popebp;ret0x0804872c:popebx;popesi;popedi;popebp;ret0x0804843d:popebx;ret
- linux笔记 CTF-pwn环境搭建
我也不知道起什么名字呐
ctf小白成长ing#过程记录
个人博客:点击进入此文章作为linux笔记整理归纳,不定时更新此文章已不再更新,以后更新在个人博客点击进入:【linux笔记:CTF-pwn环境搭建】目录此文章作为linux笔记整理归纳,不定时更新安装Ubuntu时候语言选择默认英文将Ubuntu系统语言更换为简体中文安装VMwareToolsctf环境安装Ubuntu系统更新软件为64位系统提供32位运行环境支撑安装GDB安装peda安装pyt
- CTF-PWN相关程序素材积累
中国挑山工
CTF
PWN简介pwn,在安全领域中指的是通过二进制/系统调用等方式获得目标主机的shell。pwn是一个黑客语法的俚语词,是指攻破设备或者系统。发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵Linux下的pwn常用到的工具有:gdb:Linux调试中必要用到的gdb-peda:gdb方便调试的工具,类似的工具有gef,gdbinit,这些工具的安装
- CTF-Pwn入门及栈溢出原理解释
charlie_heng
”Pwn”是一个黑客语法的俚语词,是指攻破设备或者系统。发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵。以上是从百度百科上面抄的简介,而我个人理解的话,应该就是向目标发送特定的数据,使得其执行本来不会执行的代码,前段时间爆发的永恒之蓝等病毒其实也算得上是pwn的一种。1.准备阶段这里介绍一些在接下来的教程中用到的工具ida——交互式反汇编器专业
- CTF-PWN Noleak (unsortedbin attack+fastbin attack+malloc_hook)
SuperGate
CTF-PWN
漏洞简述[*]'/home/supergate/Desktop/Pwn/timu'Arch:amd64-64-littleRELRO:FullRELROStack:CanaryfoundNX:NXdisabledPIE:NoPIE(0x400000)RWX:HasRWXsegments发现没有开启NX保护,因此大概能猜到需要我们写入shellcode并执行。IDA打开后发现是一个典型的菜单类题目,
- re学习笔记(37)BUUCTF-re-[GUET-CTF2019]re Z3约束求解器
我也不知道起什么名字呐
ctf小白成长ing#reverse
新手一枚,如有错误(不足)请指正,谢谢!!个人博客:点击进入题目链接:[GUET-CTF2019]re题目下载:点击下载IDA64位载入大概率被加壳,使用exeinfope查看upx壳,使用官方upx脱壳脱壳后IDA64载入,shift+F12查找字符串找到关键代码查看sub_4009AE()函数典型z3约束器求解题(当然你想一个个挨个手动算的话也行……)z3安装请查看linux笔记CTF-pwn
- 入坑 CTF-PWN 之 栈溢出入门
Nevv
好久没看过pwn题目了,写一个入门的教程顺便复习了:1.安装gdb-pedagitclonehttps://github.com/longld/peda.git~/pedaecho"source~/peda/peda.py">>~/.gdbinitecho"DONE!debugyourprogramwithgdbandenjoy"2.一些比较有用的技巧printsystem直接输出__libc_
- *CTF-pwn部分题解
白红rookie_hacker
Quicksort简单的漏洞点,gets(&s)溢出。程序开了nx与canary。图中有v0=ptr+4*i。*v0=atoi(&s)ptr是我们gets能够溢出到的地方,所以有一个任意地址写的漏洞。具体可以先覆盖__stack_chk_fail的got到main,可以循环利用。然后再覆盖free_got为puts_got正好可以打印got,因为我的i为1,所以泄露的是gets。得到libc后。再
- 【CTF-PWN】TJCTF2018_RE&&PWN
Kirin_say
面向高中生的CTF,题目很简单,记录一下过程和几个脚本0x01Validator首先定义了一段字符串movdwordptr[ebp+s1],74636A74hmov[ebp+var_34],756A7B66hmov[ebp+var_30],635F3735hmov[ebp+var_2C],5F6C6C34hmov[ebp+var_28],725F336Dhmov[ebp+var_24],72337
- pwnable.tw记录之hacknote
BJChangAn
0x00漏洞简介uaf漏洞产生的主要原因是释放了一个堆块后,并没有将该指针置为NULL,这样导致该指针处于悬空的状态(有的地方翻译为迷途指针),同样被释放的内存如果被恶意构造数据,就有可能会被利用。再怎么表述起始还不如真的拿一道题自己调自己看内存看堆状态来的好理解。这也是我觉得ctf-pwn的意义所在,可以把一些漏洞抽象出来以题的形式,作为学习这方面的一个抓手。此篇尽量做的细致基础,但仍然假设读者
- 数字经济云安全共测大赛CTF-Pwn amazon、fkroman
Nevv
数字经济云安全ctfPwn1.amazonmenuintmenu(){puts("1.buy");puts("2.show");puts("3.checkout");puts("4.exit");returnprintf("Yourchoice:");}showintshow(){__int64v0;//raxsignedinti;//[rsp+Ch][rbp-4h]for(i=0;i=0&&v1
- CTF-pwn环境配置
leehaming
ctf
CTF-pwn环境配置换了一个环境,要在新电脑上配置pwn环境做题;但是无奈配置环境用了很久,为了以后不再在这上边浪费太多时间,记录一下必备的环境以及安装过程。顺便附过程中遇到的问题和理解。环境配置本机环境:windowss10+vmware+ubuntu16.04ubuntu安装这里主要是两种不同的ubuntu安装方式:1.直接引导安装程序光盘映像文件这里就是会直接将iso镜像文件加载。省却了后
- 开发者关心的那些事
圣子足道
ios游戏编程apple支付
我要在app里添加IAP,必须要注册自己的产品标识符(product identifiers)。产品标识符是什么?
产品标识符(Product Identifiers)是一串字符串,它用来识别你在应用内贩卖的每件商品。App Store用产品标识符来检索产品信息,标识符只能包含大小写字母(A-Z)、数字(0-9)、下划线(-)、以及圆点(.)。你可以任意排列这些元素,但我们建议你创建标识符时使用
- 负载均衡器技术Nginx和F5的优缺点对比
bijian1013
nginxF5
对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器。
目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高
- LeetCode[Math] - #9 Palindrome Number
Cwind
javaAlgorithm题解LeetCodeMath
原题链接:#9 Palindrome Number
要求:
判断一个整数是否是回文数,不要使用额外的存储空间
难度:简单
分析:
题目限制不允许使用额外的存储空间应指不允许使用O(n)的内存空间,O(1)的内存用于存储中间结果是可以接受的。于是考虑将该整型数反转,然后与原数字进行比较。
注:没有看到有关负数是否可以是回文数的明确结论,例如
- 画图板的基本实现
15700786134
画图板
要实现画图板的基本功能,除了在qq登陆界面中用到的组件和方法外,还需要添加鼠标监听器,和接口实现。
首先,需要显示一个JFrame界面:
public class DrameFrame extends JFrame { //显示
- linux的ps命令
被触发
linux
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行
- Android 音乐播放器 下一曲 连续跳几首歌
肆无忌惮_
android
最近在写安卓音乐播放器的时候遇到个问题。在MediaPlayer播放结束时会回调
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
Log.i("H
- java导出txt文件的例子
知了ing
javaservlet
代码很简单就一个servlet,如下:
package com.eastcom.servlet;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.Resu
- Scala stack试玩, 提高第三方依赖下载速度
矮蛋蛋
scalasbt
原文地址:
http://segmentfault.com/a/1190000002894524
sbt下载速度实在是惨不忍睹, 需要做些配置优化
下载typesafe离线包, 保存为ivy本地库
wget http://downloads.typesafe.com/typesafe-activator/1.3.4/typesafe-activator-1.3.4.zip
解压r
- phantomjs安装(linux,附带环境变量设置) ,以及casperjs安装。
alleni123
linuxspider
1. 首先从官网
http://phantomjs.org/下载phantomjs压缩包,解压缩到/root/phantomjs文件夹。
2. 安装依赖
sudo yum install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6
3. 配置环境变量
vi /etc/profil
- JAVA IO FileInputStream和FileOutputStream,字节流的打包输出
百合不是茶
java核心思想JAVA IO操作字节流
在程序设计语言中,数据的保存是基本,如果某程序语言不能保存数据那么该语言是不可能存在的,JAVA是当今最流行的面向对象设计语言之一,在保存数据中也有自己独特的一面,字节流和字符流
1,字节流是由字节构成的,字符流是由字符构成的 字节流和字符流都是继承的InputStream和OutPutStream ,java中两种最基本的就是字节流和字符流
类 FileInputStream
- Spring基础实例(依赖注入和控制反转)
bijian1013
spring
前提条件:在http://www.springsource.org/download网站上下载Spring框架,并将spring.jar、log4j-1.2.15.jar、commons-logging.jar加载至工程1.武器接口
package com.bijian.spring.base3;
public interface Weapon {
void kil
- HR看重的十大技能
bijian1013
提升能力HR成长
一个人掌握何种技能取决于他的兴趣、能力和聪明程度,也取决于他所能支配的资源以及制定的事业目标,拥有过硬技能的人有更多的工作机会。但是,由于经济发展前景不确定,掌握对你的事业有所帮助的技能显得尤为重要。以下是最受雇主欢迎的十种技能。 一、解决问题的能力 每天,我们都要在生活和工作中解决一些综合性的问题。那些能够发现问题、解决问题并迅速作出有效决
- 【Thrift一】Thrift编译安装
bit1129
thrift
什么是Thrift
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and s
- 【Avro三】Hadoop MapReduce读写Avro文件
bit1129
mapreduce
Avro是Doug Cutting(此人绝对是神一般的存在)牵头开发的。 开发之初就是围绕着完善Hadoop生态系统的数据处理而开展的(使用Avro作为Hadoop MapReduce需要处理数据序列化和反序列化的场景),因此Hadoop MapReduce集成Avro也就是自然而然的事情。
这个例子是一个简单的Hadoop MapReduce读取Avro格式的源文件进行计数统计,然后将计算结果
- nginx定制500,502,503,504页面
ronin47
nginx 错误显示
server {
listen 80;
error_page 500/500.html;
error_page 502/502.html;
error_page 503/503.html;
error_page 504/504.html;
location /test {return502;}}
配置很简单,和配
- java-1.二叉查找树转为双向链表
bylijinnan
二叉查找树
import java.util.ArrayList;
import java.util.List;
public class BSTreeToLinkedList {
/*
把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \
- Netty源码学习-HTTP-tunnel
bylijinnan
javanetty
Netty关于HTTP tunnel的说明:
http://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/socket/http/package-summary.html#package_description
这个说明有点太简略了
一个完整的例子在这里:
https://github.com/bylijinnan
- JSONUtil.serialize(map)和JSON.toJSONString(map)的区别
coder_xpf
jqueryjsonmapval()
JSONUtil.serialize(map)和JSON.toJSONString(map)的区别
数据库查询出来的map有一个字段为空
通过System.out.println()输出 JSONUtil.serialize(map): {"one":"1","two":"nul
- Hibernate缓存总结
cuishikuan
开源sshjavawebhibernate缓存三大框架
一、为什么要用Hibernate缓存?
Hibernate是一个持久层框架,经常访问物理数据库。
为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。
缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
二、Hibernate缓存原理是怎样的?
Hibernate缓存包括两大类:Hib
- CentOs6
dalan_123
centos
首先su - 切换到root下面1、首先要先安装GCC GCC-C++ Openssl等以来模块:yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel2、再安装ncurses模块yum -y install ncurses-develyum install ncurses-devel3、下载Erang
- 10款用 jquery 实现滚动条至页面底端自动加载数据效果
dcj3sjt126com
JavaScript
无限滚动自动翻页可以说是web2.0时代的一项堪称伟大的技术,它让我们在浏览页面的时候只需要把滚动条拉到网页底部就能自动显示下一页的结果,改变了一直以来只能通过点击下一页来翻页这种常规做法。
无限滚动自动翻页技术的鼻祖是微博的先驱:推特(twitter),后来必应图片搜索、谷歌图片搜索、google reader、箱包批发网等纷纷抄袭了这一项技术,于是靠滚动浏览器滚动条
- ImageButton去边框&Button或者ImageButton的背景透明
dcj3sjt126com
imagebutton
在ImageButton中载入图片后,很多人会觉得有图片周围的白边会影响到美观,其实解决这个问题有两种方法
一种方法是将ImageButton的背景改为所需要的图片。如:android:background="@drawable/XXX"
第二种方法就是将ImageButton背景改为透明,这个方法更常用
在XML里;
<ImageBut
- JSP之c:foreach
eksliang
jspforearch
原文出自:http://www.cnblogs.com/draem0507/archive/2012/09/24/2699745.html
<c:forEach>标签用于通用数据循环,它有以下属性 属 性 描 述 是否必须 缺省值 items 进行循环的项目 否 无 begin 开始条件 否 0 end 结束条件 否 集合中的最后一个项目 step 步长 否 1
- Android实现主动连接蓝牙耳机
gqdy365
android
在Android程序中可以实现自动扫描蓝牙、配对蓝牙、建立数据通道。蓝牙分不同类型,这篇文字只讨论如何与蓝牙耳机连接。
大致可以分三步:
一、扫描蓝牙设备:
1、注册并监听广播:
BluetoothAdapter.ACTION_DISCOVERY_STARTED
BluetoothDevice.ACTION_FOUND
BluetoothAdapter.ACTION_DIS
- android学习轨迹之四:org.json.JSONException: No value for
hyz301
json
org.json.JSONException: No value for items
在JSON解析中会遇到一种错误,很常见的错误
06-21 12:19:08.714 2098-2127/com.jikexueyuan.secret I/System.out﹕ Result:{"status":1,"page":1,&
- 干货分享:从零开始学编程 系列汇总
justjavac
编程
程序员总爱重新发明轮子,于是做了要给轮子汇总。
从零开始写个编译器吧系列 (知乎专栏)
从零开始写一个简单的操作系统 (伯乐在线)
从零开始写JavaScript框架 (图灵社区)
从零开始写jQuery框架 (蓝色理想 )
从零开始nodejs系列文章 (粉丝日志)
从零开始编写网络游戏 
- jquery-autocomplete 使用手册
macroli
jqueryAjax脚本
jquery-autocomplete学习
一、用前必备
官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
当前版本:1.1
需要JQuery版本:1.2.6
二、使用
<script src="./jquery-1.3.2.js" type="text/ja
- PLSQL-Developer或者Navicat等工具连接远程oracle数据库的详细配置以及数据库编码的修改
超声波
oracleplsql
在服务器上将Oracle安装好之后接下来要做的就是通过本地机器来远程连接服务器端的oracle数据库,常用的客户端连接工具就是PLSQL-Developer或者Navicat这些工具了。刚开始也是各种报错,什么TNS:no listener;TNS:lost connection;TNS:target hosts...花了一天的时间终于让PLSQL-Developer和Navicat等这些客户
- 数据仓库数据模型之:极限存储--历史拉链表
superlxw1234
极限存储数据仓库数据模型拉链历史表
在数据仓库的数据模型设计过程中,经常会遇到这样的需求:
1. 数据量比较大; 2. 表中的部分字段会被update,如用户的地址,产品的描述信息,订单的状态等等; 3. 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态, 比如,查看某一个用户在过去某一段时间内,更新过几次等等; 4. 变化的比例和频率不是很大,比如,总共有10
- 10点睛Spring MVC4.1-全局异常处理
wiselyman
spring mvc
10.1 全局异常处理
使用@ControllerAdvice注解来实现全局异常处理;
使用@ControllerAdvice的属性缩小处理范围
10.2 演示
演示控制器
package com.wisely.web;
import org.springframework.stereotype.Controller;
import org.spring