很抱歉,博主也是个PWN的入门者。PWN的入门不可能是无痛的。能做到的只是减少一点初学者的痛苦。这篇博客会长期维护,也会越来越好。后期还可能会在B站出视频(博主社恐,要迈出这一步可能需要好长时间)。
PWN是个啥?我懒得讲那些学术性术语(绝对不是因为我不会)。其实就是二进制漏洞利用,就是利用漏洞,拿到目标服务器的控制权。执行指令,对这个服务器为所欲为。
一、PWN必备的那些工具
想啥呢你?刚入门你就啥都装起来,会用吗?这是篇循序渐进的博客,别想着90度直角起飞。工具我会慢慢引入,不然提前装起来让它们吃灰?
现在我只需要你装3个东西
- IDA7.0pro
- python库pwn
- Linux虚拟机
啥?找不到资源。我分享行了吧
IDA pro7.7
链接:https://pan.baidu.com/s/11YzTTBgDzlrg8a_k-raqqw?pwd=6666
提取码:6666
解压后
执行,选择yes即可完成破解
python安装pwn教程,推荐去看B站星盟安全PWN入门第一集环境安装。不是引流啊,我是确实觉得还可以,小哥哥声音很好听的,对于我这种声控来说简直爱了爱了。
【星盟安全】PWN全集,从入门到精通,最通俗易懂的CTF,持续更新中_哔哩哔哩_bilibili
Linux虚拟机的话,我觉得CTF选手应该都有吧。没有的话建议装Kali。界面很帅,内置工具多,专业攻击机。CentOS,Unbuant也行,其实没那么高要求。安装教程?先百度去吧,后面有可能我自己补一篇。^----^
二、刷题加学习
我会以NSSCTF,BUUCTF平台的题目做教学,后面也会加其他平台。
NSSCTF网址 https://www.ctfer.vip/indexhttps://www.ctfer.vip/index
注册教程,这个网站有提示,照着走呗。
BUUCTF
BUUCTF在线评测BUUCTF 是一个 CTF 竞赛和训练平台,为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.cn/challenges
1.test_your_nc ----nc的使用与系统命令执行1
BUUCTF平台--test_your_nc
不要跳着看,接下来细节满满开始啦。
可以在搜索栏,搜索题目名称,开启环境。
学习目标:
- 学会nc指令的使用
- 学会使用拿到系统控制权后的指令执行
- kali控制台使用
解题流程(我会很细心的写,不像他们大多数的wtrite up,只能做出来,但很难懂):
开启环境
是不是看到node4.buuoj.cn:27399啦,这个就是你的服务器地址,啥?你个大聪明想用浏览器打开,想啥呢?协议不对啊,这不是HTTP。
基本上题目服务器地址就是以下2种形式
域名:端口号 如本题
IP地址:端口号 如192.168.32.12:10001
打开虚拟机,使用nc连接服务器
开机
桌面右键点击在这里打开终端
大黑框出现了,但至少比Windows那个好看,这个可是半透明的呀,朦胧的美感,啧啧。
写指令
指令形式
nc ip 端口号
nc 域名 端口号
本题
nc node4.buuoj.cn 27399
连上去发现光标不动了
尝试输入指令ls(linux系统中显示当前文件下文件名的指令) ,红色为你输入的指令,绿色是执行后显示的当前目录下的文件名。看到flag了吧。是不是很想打开
使用cat指令可以读取Linux上的文件
cat 文件名
本题:
cat flag
去吧,提交你的flag。
2.[SWPUCTF 2021 新生赛]nc ----nc的使用与系统命令执行2
学习目标:
- 学会nc指令的使用
- 学会使用拿到系统控制权后的指令执行
- 学一点点过滤绕过(大部分题不会有要求绕过过滤)
开启环境
打开虚拟机,使用nc连接服务器
写指令
指令形式
nc ip 端口号
nc 域名 端口号
本题
nc node1.anna.nssctf.cn 28456
弹出乱七八糟的玩意。
看不懂,去把附件下载下来
里面是python代码,分析一下
权限直接给我们了,但看程序逻辑,当用户输入列表blacklist中字符串时,自动结束程序。
此时如果输入ls(Linux系统中查看当前目录下文件的指令),就会退出。所以需要绕过这个过滤。
使用l\s,执行时l\s=ls,但在字符串判断时肯定不是相同的。
如图,我输入了l\s,列出了当前目录下的文件,那么大个flag看到没有,那接下来就要访问它。
我们使用cat指令,读取文件(回头看一下,cat也被过滤了,没事,再加条\,变成c\at flag)
cat 文件名
cat flag
此题存在过滤
要绕过处理
c\at$IFS$9flag
$IFS$9可以替换空格
出来了。
练习题(想起来我就会添加上来)
以下内容--编写中
3.rip---极简栈溢出
BUUCTF rip
学习目标:
- 使用IDApro7.7
- 理解栈溢出
- 了解危险函数gets()
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s[15]; // [rsp+1h] [rbp-Fh] BYREF
puts("please input");
gets(s, argv); //危险函数,不受限制的读取,导致栈溢出
puts(s);
puts("ok,bye!!!");
return 0;
}