ssh-keygen提权
pwn.college的level51卡了好久,写文章记录一下做题过程
前置知识
suid(set uid)是linux中的一种特殊权限,suid可以让调用者以文件拥有者身份运行该文件,所以利用suid提权的核心就是运行root用户所拥有的suid的文件,那么运行该文件的时候就得获得root用户的身份了。
suid特点是用户运行某个程序时,如果该程序有suid权限,程序运行进程的属主不是发起者,而是程序文件所属的属主。
准备
运行challenge目录下的babysuid_level51,题目告诉我们ssh-keygen设置了suid位,并给了要加载自己的代码的提示
1 | This challenge is part of a series of programs that |
ssh-keygen -D ./
可以加载动态链接库文件,所以我们就编写一个动态链接库看看
ls -l
orll
查看目录权限,发现hacker用户(用户)在home/hacker
目录下有rwx权限
cd home/hacker
进入hacker目录,touch test.c
创建c文件
1 |
|
gcc test.c -shared -o test.so
编译动态链接库
易出错点
ssh-keygen -D ./test.so
加载动态链接库,然后会出现如下报错
1 | test.so does not contain expected string C_GetFunctionList |
报错提示我们test.so不包含字符串C_GetFunctionList(test.so does not contain expected string C_GetFunctionList),只需让我们的test.c包含字符串C_GetFunctionList即可
1 |
|
重新执行上述命令,成功让ssh-keygen执行了代码
1 | hello world |
修改代码使其读取flag
1 |
|
成功
1 | pwn.college{xxxxxx} |
参考链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 waddle's blog!