前言

学习,dash即Debian系统中sh指向的系统程序,目标是学习vscode远程调试c程序的手法。


源码下载

根据p牛讲述的方法,可以在command-not-found找到命令对应的包,再在Ubuntu Packages中搜索包名得到对应包的下载地址,就可以下载到源码:

然后解压并用Vscode打开就可以开始阅读源码了。

环境搭建

启动虚拟机,准备好源码,首先允许autogen脚本,遇到问题:

aclocal: not found

似乎是由于没有安装automake导致的,安装一下:

sudo apt-get install automake

再次运行,目录下生成了configure程序,然后准备编译安装一个用于调试的dash程序,类似编译用于调试的PHP,需要加上-g参数用于添加调试信息和prefix参数避免对系统原有环境造成影响:

./configure --prefix=/home/aluvion/桌面/docker/dash-0.5.11/run CFLAGS="-g"

最后编译安装生成命令程序dash:

make && make install

简单测试一下:

接下来动态调试代码有两种选择,第一种是分离源码阅读和调试,在vscode里面看源码,在Linux里用gdb动态调试。第二种就是按照vscode拓展,直接在vscode里进行动态调试,如这篇文章所讲的ssh+gdb的调试方法。

首先需要在虚拟机中安装好sshd:

sudo apt-get install openssh-server

然后启动:

service sshd start

并且在主机powershell上测试一下ssh连接:

然后安装vscode的ssh扩展remote ssh:

装上去之后连接ssh,

可以通过配置SSH主机选项修改用户目录下的ssh文件,加上host和username的配置:

Host remoteVM
    HostName 192.168.88.129
    User aluvion

然后连接ssh,就可以直接打开远程主机上的源码文件夹了,然后在项目文件夹下面新建.vscode文件夹和launch.json文件,然后添加配置gdb launch:

随便下个断点,然后修改launch.json配置:

{
    "configurations": [
        {
            "type": "cppdbg",
            "request": "launch",
            "name": "GDB",
            "program": "${workspaceFolder}/run/bin/dash",
            "stopAtEntry": true,
            "args": ["-c", "id"],
            "cwd": "${fileDirname}",
            "environment": [],
            "MIMode": "gdb",
        }
    ]
}

最后启动调试,调试环境搭建完成:


参考

vscode的远程开发与调试——以C/C++为例

我是如何利用环境变量注入执行任意命令


Linux

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

破壳漏洞调试学习
2022 lineCTF Haribote Secure Note学习