2024年11月第四周周报

ljnljn Lv6

2024年12月第一周周报

完成事项

  1. WSL+Pwn环境的配置(安装pwntools、WSL+IDA动态调试、WSL+VSCode半本地编程)
  2. 学习了C++字符串函数
  3. Pwn学习路线规划

未完成事项

  1. 复盘新生赛Pwn题目
  2. NewStar CTF Pwn题目复盘

如何解决未完成事项

下周开始刷

下周待做事项

  1. 完成上周未完成事项(两个比赛的复盘)
  2. 看Cyberangel的语雀

本周学习的知识分享

一、WSL2+VSCode编译环境的搭建(在Windows配置WSL2+VSCode编程环境 - _ljnljn - 博客园

感觉周围的人都是用的虚拟机运行linux+vscode,今天我想到一个更好的方法,用wsl2+vscode混合,可以在windows本地编代码,然后在linux内编译运行,非常的高效

1、开始菜单里搜索功能,并打开启用或关闭Windows功能

image
打开框出的三个功能
image
然后重启

2、在微软应用商店搜索kali linux(或者任何一个linux版本)安装

image

3、安装完成后,在kali linux下输入如下命令,安装工具集

1
2
sudo apt update && sudo apt upgrade
sudo apt install -y kali-linux-default

image
(如果想要GUI的话可以安装win-kex,大佬链接:https://zhuanlan.zhihu.com/p/263658960)

4、vscode连接wsl

拓展里搜索wsl
image
按ctrl+shift+p打开命令界面,输wsl,选择WSL:Connect to WSL
image

5、vscode拓展的安装

由于wsl连接的vscode拓展安装在wsl内,所以要重新安装拓展
image
点击“在WSL:”这个按钮安装

6、vscode(wsl)的基本使用

C++的运行

直接运行debugger就行
image
没有的话先在终端运行

1
apt install gcc

Python的运行

可以这样(右键-Run Python-Run Python in Terminal)
image
如果想要用Python Debugger运行的话看这个教程:https://blog.csdn.net/weixin_49895216/article/details/131696960

二、WSL中搭建Pwn环境(Kali Linux的Pwn环境搭建

链接指北:
1、安装pwntools、gdb等插件
参考链接:https://blog.csdn.net/Bossfrank/article/details/130213456
2、途中出现以下问题解决方案
链接:https://blog.csdn.net/2202_75762088/article/details/134625775#/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.

If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.

If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.

See /usr/share/doc/python3.11/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

3、简易快速入门
链接:https://blog.csdn.net/weixin_45004513/article/details/117332121
导入Pwntools

1
from pwn import *

链接

1
2
r = remote("目标地址str类型", 目标端口int类型)#与服务器交互
r = process("目标程序位置")#与本地程序交互

构造payload之打包

1
2
p64(int)#将int类型打包成64位存储
p32(int)#将int类型打包成32位存储

发送

1
r.sendline(playload)#发送playload为一行(自动在尾部加上\n)

接收

1
2
r.recv()#接收到结束
r.recvuntil(end, drop=True)end(str)#接受到end之后截至,drop=True时不包括end,drop=False时包括end

打开交互

1
r.interactive()#一般在末尾都要加

三、WSL2+IDA实现半本地动态调试(IDA+WSL2实现本地linux动态调试

1、首先在ida安装目录找到dbgsrv这个文件夹,打开后把“linux_server”这个文件拖到你的linux中(我放在/root位置)
image
2、然后赋予两个文件权限(linux-server和要调试的文件)

1
2
chmod +x /root/linux_server
chmod +x 你的待调试文件位置

然后运行调试组件

1
/root/linux_server64

参数:
“-p端口”:用于设置备用TCP端口,以便服务器进行监听。默认端口是23946
“-P密码”:用于设置客户端连接调试服务器必需的密码,防止未授权连接。
“-v”:将服务器置于详细模式。
image
然后打开ida,按F9选择调试器
image
如果出现这个选择Yes
image
上面的前两个输文件所在linux的目录,第三个输文件路径,下面填上终端显示的my ip,密码为linux账号的密码
image
image
(当然,如果懒得移动文件,ida也可以把文件自动导入到linux中,只需要路径不正确就行)
如果配置都没有问题,接下来应该就会进入动态调试界面了
image
image

四、C++字符串函数(C++字符串函数 - _ljnljn - 博客园

两种字符串定义(C++):

字符串变量 字符数组
定义 string str; char str[100];
求长度 str.length();/str.size(); strlen(str);
输入字符串 getline(cin,str);可以读入一行字符串,可以包含空格,遇到回车结束/cin>>str;可以读入一连串的字符,遇到空格or回车结束/scanf(“%s”,&str);遇到空格结束 cin.getline(str,sizeof(str));需要提前固定好输入的字符串的长度,避免输入的字符超出界限
分割截取 str.substr(7,3); // 从下标7开始截取子字符串,截取长度为3的字符串
查找指定子字符串 place=str.find(“hi”);
替换字符串中的一部分 str.replace(7, 5, “helloa”);替换从下标7开始的5个字符为”helloa”
在指定位置插入字符串 str.insert(5, “try”);
复制字符串 string str3(str1)/str3=str1; str3 = str1;
排序 需要头文件#include <algorithm> sort(s.begin(), s.end());
删除 s.erase(s.begin()+2);使下标2的字符删掉
在字符串中添加字符 s.push_back(‘a’);

C语言:

#include<cstring>
(1)复制字符串:strcpy(s1,s2);//复制s2到s1中
(2)连接字符串:strcat(s1,s2);连接字符串 s2 到字符串 s1 的末尾。
string str = str1 + str2;连接字符串也可以用+号
(3)返回字符串长度strlen(s1);
(4)比较字符串:strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
(5)查找字符strchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。

五、Pwn的基本学习路线(Pwn学习路线 - _ljnljn - 博客园

来源:CTF竞赛权威指南(Pwn篇)

带索书号的是可以在图书馆借的

1、底层代码学习

编程基础:Python/C/C++/汇编语言
其他知识:计算机组成原理、操作系统、编译原理
课程:
网易云课堂的“顶尖中文大学计算机专业课程体系”
https://study.163.com/curricula/cs.htm
image

2、静态反编译

熟练掌握IDA、Radre2等
熟练阅读反汇编代码,理解x86、ARM、MIPS二进制程序

3、动态调试

熟练掌握GDB、x64dbg等
2/3推荐资料:

  • Secure Coding in C and C++, 2nd Edition(TP312C/775)
  • The Intel 64 and IA-32 Architectures Software Developer’s Manual
  • ARM Cortex - A Series Programmer’s Guide
  • See MIPS Run, 2nd Edition
  • Reverse Engineering for Beginners
  • 《程序员的自我修养 —— 链接、装载与库》(TP311.1/65)
  • 《加密与解密,第 4 版》(有PDF)

4.软件漏洞学习

多读WriteUp

  • 常见漏洞(溢出、UAF、double - free 等)的原理
  • Linux 漏洞缓解机制(Stack canaries、NX、ASLR 等)
  • 针对这些机制的漏洞利用方法(Stack Smashing、Shellcoding、ROP 等)
    推荐资料:
  • RPI CSCI - 4968 Modern Binary Exploitation
  • Hacking: The Art of Exploitation, 2nd Edition
  • The Shellcoder’s Handbook, 2nd Edition
  • Practical Malware Analysis
  • 《漏洞战争:软件漏洞分析精要》

5.程序分析理论

  • 数据流分析(工具如 Soot)
  • 值集分析(BAP)
  • 可满足性理论(Z3)
  • 动态二进制插桩(DynamoRio、Pin)
  • 符号执行(KLEE、angr)
  • 模糊测试(Peach、AFL)
    这些技术对于将程序分析和漏洞挖掘自动化非常重要,是学术界和工业界都在研究的热点。
    感兴趣的还可以关注一下专注于自动化网络攻防的 CGC 竞赛。
    推荐资料:
  • UT Dallas CS-6V81 System Security and Binary Code Analysis
  • AU Static Program Analysis Lecture notes

6.继续提升

  • 阅读论文
  • 收集和订阅一些安全资讯(FreeBuf、SecWiki、安全客)、漏洞披露(exploit - db、CVE)、技术论坛(看雪论坛、吾爱破解、先知社区)和大牛的技术博客,这一步可以通过 RSS Feed(我用的tiny tiny rss)来完成。
  • 随着社会媒体的发展,很多安全团队和个人都转战到了 Twitter、微博、微信公众号等新媒体上,请果断关注他们(操作技巧:从某个安全研究者开始,遍历其关注列表,然后递归)

本周自己学习过程中遇到的问题和疑问点

  1. IDA还不是很会用┭┮﹏┭┮
  2. 对Pwn题目不是很熟悉(其实就是不会),还需要多学image

情感、思考、观点

初来乍到,要学的东西还很多,加油,奥利给image

  • 标题: 2024年11月第四周周报
  • 作者: ljnljn
  • 创建于 : 2024-12-01 17:41:00
  • 更新于 : 2026-05-25 22:04:46
  • 链接: https://ljnljn2005.github.io/2024/12/01/2024年11月第四周周报/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。