吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2219|回复: 8
收起左侧

[CTF] pwnable.kr题目笔记

[复制链接]
047xw 发表于 2022-12-5 00:23

pwnable.kr笔记

本人是新学pwn的一个小菜鸟,最近在边学习边做pwnable.kr网站中的习题.现将一些菜鸟的解题方法与心得整理如下,欢迎各位大佬批评指正,谢谢!!!
本文环境:

  1. Windows11家庭中文版,版本21H2(OS 内部版本 22000.978)
  2. WSL 2
  3. Ubuntu-18.04.05 LTS

    1. Toddler's Bottle

    1.1 fd

2022-12-04-22-58-15.png
第一题是一道关于Linux系统中的文件描述符(File Descriptor)的比较简单的题目.

预备知识: 文件描述符是系统用于唯一标识文件的一串无符号整型数字,它们由小到大依次分配.其中,每个进程开始时都会有三个打开的文件,为:标准输入(描述符0),标准输出(描述符1),标准错误(描述符2).在<unistd.h>中定义了成了常量STDIN_FILENO,STDOUT_FILENOSTDERR_FILENO.

首先我们使用题目给的命令进入远程服务器,括号内的guest为登录密码(:输入密码时不可见):

ssh fd@pwnable.kr -p2222
# ssh(Secure Shell)是登录远程服务器的命令
# 其中,fd@pwnable.kr表示远程服务器的域名,-p2222表示端口(port)2222
# 使用exit命令退出连接
# 相关参数及用法可参考https://cloud.tencent.com/developer/article/1594881

之后我们就得到这样的界面
2022-12-04-23-12-48.png
使用命令ls查看目录下文件或使用ls -la查看目录下文件以及相关权限
2022-12-04-23-14-27.png
我们发现目标文件fd,fd.cflag.但是在这个过程中,我们发现该服务器访问较慢,于是使用如下命令下载本地.但在此之前,为了方便管理,可先使用命令mkdir namefile创建以namefile为名文件夹,再进入该文件夹,将文件下载到该文件夹下:

mkdir fd
# 本文创建文件夹名为fd
cd fd
# 进入fd文件夹中
scp -P2222 fd@pwnable.kr:fd .
scp -P2222 fd@pwnable.kr:fd.c .
# scp(Secure Copy)用于复制文件和目录
# 其中,fd@pwnable.kr表示远程服务器的域名,-P2222表示端口2222(注意是大写P),
# .表示本地当前目录
# 相关参数及用法可参考https://www.runoob.com/linux/linux-comm-scp.html

2022-12-04-23-28-19.png
随后我们可以使用vim命令查看fd.c的内容(注释为本人后加之):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
// argc表示文件参数的的个数,argv表示文件参数的地址,envp表示环境变量
int main(int argc, char* argv[], char* envp[]){
    // 判断是否有参数,在命令行,可执行文件的文件名本身算作一个参数,其地址为argv[0],所以argc始终大于等于1
    if(argc<2){
        printf("pass argv[1] a number\n");
        return 0;
    }
    // atoi()为标准库函数,位于<stdlib.h>
    // 它将参数所指的字符串转化成int整型
    // 可参考: https://www.runoob.com/cprogramming/c-function-atoi.html
    int fd = atoi( argv[1] ) - 0x1234;
    int len = 0;
    // read()函数为系统调用函数,它从文件描述符为fd的拷贝32个字符到buf中
    // 返回值为真正拷贝的字符的个数.这是EOF的存在导致的,因为它可能没有那么多的字符供拷贝
    // 可参考: https://blog.csdn.net/zjhkobe/article/details/6633446
    len = read(fd, buf, 32);
    // strcmp用于比较两个字符的大小,如果两字符相等,则返回0
    if(!strcmp("LETMEWIN\n", buf)){
        printf("good job :)\n");
        system("/bin/cat flag");
        exit(0);
    }
    printf("learn about Linux file IO\n");
    return 0;
}

由上述代码及注释可知,本题需要传递一个合适参数,使得fd标识的文件中的32位字符为LETMEWIN\n.根据预备知识可知,我们可以使用fd=0的标准输入,来输入所需的字符.我们的输入值应为十进制,0x1234的十进制为4660.如下图所示:
2022-12-05-00-12-43.png

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

akillking 发表于 2022-12-7 20:22
支持原创,感谢分享
jjghaa1234 发表于 2022-12-7 23:15
Hmily 发表于 2022-12-29 18:14
 楼主| 047xw 发表于 2023-1-3 02:50
Hmily 发表于 2022-12-29 18:14
文章的MD语法有问题吧?好像显示不太好。

嗯呢,在我vscode里面显示得好比较好的。我下次发帖的时候,再仔细比对修改一下

点评

有空的话重新编辑下看看。  详情 回复 发表于 2023-1-3 10:56
Hmily 发表于 2023-1-3 10:56
047xw 发表于 2023-1-3 02:50
嗯呢,在我vscode里面显示得好比较好的。我下次发帖的时候,再仔细比对修改一下

有空的话重新编辑下看看。
 楼主| 047xw 发表于 2023-1-3 11:24
Hmily 发表于 2023-1-3 10:56
有空的话重新编辑下看看。

嗯呢,主要我没看到哪有重新编辑的选项

点评

主题左下角,或者你在浏览器里搜编辑  详情 回复 发表于 2023-1-3 11:26
Hmily 发表于 2023-1-3 11:26
047xw 发表于 2023-1-3 11:24
嗯呢,主要我没看到哪有重新编辑的选项

主题左下角,或者你在浏览器里搜编辑
 楼主| 047xw 发表于 2023-1-3 13:02
Hmily 发表于 2023-1-3 11:26
主题左下角,或者你在浏览器里搜编辑

现在好啦,谢谢H大
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-24 04:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表