本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
0x03 单元调试
由于安装包在安装时对许可证进行了限制,因此无法有效地进行安装和调试。为了能够高效地进行动态调试,我们采取了以下优化策略:创建一个独立的空项目,将存在漏洞的 Servlet 进行重写,用于单元模拟。通过这种方法,我们可以在没有任何依赖的情况下最小化地运行漏洞点,并顺利完成研究和分析的工作。
通过修复的方式来推断,该漏洞通过目录穿越的方式来指定上传的路径(accountId
参数)以及上传内容来完成利用。
再收到 accountId
参数值后会通过 a
函数来完成对该路径的拼接,由于该拼接方式存在一定的问题就导致了目录穿越,然后将传入的数据流写入到 accountId
可控的路径。
在写入完毕之后通过调用 a(var31, var46, var7);
完成对传入数据的解压到指定的目录中。
根据漏洞分析得出漏洞的核心利用点主要取决于 accountId
和 POST 请求传入的字节数据,所以我们可以将存在可能利用的代码进行抽象。
package com.example.sysaid;
import com.ilient.server.IlientConf;
import java.io.\*;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Comparator;
import java.util.zip.InflaterInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.servlet.ServletException;
import javax.servlet.http.\*;
import javax.servlet.annotation.\*;
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
private String message;
public void init() {
}
public void doGet(HttpServletRequest var1, HttpServletResponse var2) throws IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse var2) throws ServletException, IOException {
String accountId = request.getParameter("accountId");
InflaterInputStream inputStream = new InflaterInputStream(request.getInputStream());
byte[] bytes = InputStreamUtils.InputStreamToBytes(inputStream);
String var46 = a(accountId);
String var7 = request.getParameter("symbolName");
File var31 = new File(var46 + File.separator + Long.toString(Calendar.getInstance().getTimeInMillis()) + ".zip");
FileOutputStream var38;
(var38 = new FileOutputStream(var31)).write(bytes);
var38.flush();
var38.close();
// var46
a(var31, var46, var7);
if (!var31.delete()) {
var31.setWritable(true);
var31.delete();
}
}
private static void a(File var0, String var1) {
File var2;
if ((var2 = new File(var1)).exists() && var2.isDirectory()) {
File[] var6 = var2.listFiles();
String var3 = Long.toString(Calendar.getInstance().getTimeInMillis()) + ".bad";
File var5 = new File(var1, var3);
if (var0.renameTo(var5)) {
System.out.println("UserEntry.renameAndMoveFile: File renamed and moved successfully.");
} else {
System.out.println("UserEntry.renameAndMoveFile: Failed to rename and move the file.");
}
if (var6.length >= 10) {
Arrays.sort(var6, Comparator.comparingLong(File::lastModified));
for(int var4 = 0; var4 < var6.length - 9; ++var4) {
if (var6[var4].isFile() && !var6[var4].delete()) {
System.out.println("UserEntry.renameAndMoveFile: Failed to delete file: " + var6[var4].getName());
}
}
}
} else {
System.out.println("UserEntry.renameAndMoveFile: Invalid output folder specified.");
}
}
private static void a(File var0, String var1, String var2) {
if (!var2.startsWith("LDAP\_REFRESH\_")) {
IlientConf.logger.error(String.format("Error on UserEntry: symboleName %s not validated.", var2));
a(var0, var1);
} else {
byte[] var8 = new byte[1024];
try {
ZipInputStream var3;
for(ZipEntry var4 = (var3 = new ZipInputStream(new FileInputStream(var0))).getNextEntry(); var4 != null; var4 = var3.getNextEntry()) {
String var9;
if ((var9 = var4.getName()) != null && var9.indexOf("..") >= 0) {
System.out.println("Error in UserEntry.unZipIt - Found path manipulation!");
a(var0, var1);
return;
}
File var10 = new File(var1 + File.separator + var9);
String var5 = (new File(var1)).getCanonicalPath();
System.out.println(var10.getCanonicalPath());
System.out.println(var5 + File.separator);
if (!var10.getCanonicalPath().startsWith(var5 + File.separator)) {
System.out.println("Error in UserEntry.unZipIt - File is outside of the output directory!");
a(var0, var1);
return;
}
System.out.println("File unzip : " + var10.getAbsoluteFile());
FileOutputStream var11 = new FileOutputStream(var10);
int var12;
while((var12 = var3.read(var8)) > 0) {
var11.write(var8, 0, var12);
}
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
***93道网络安全面试题***
![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)
![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)
![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)
内容实在太多,不一一截图了
### 黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
#### 1️⃣零基础入门
##### ① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。
![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)
##### ② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**