0x0前言 虎符比赛遇到了一题极其类似p神做过的题,只是底层操作系统是Debian,无法使用p神的思路解决。
本着遇到了就调一调的精神 尝试了一下调试 验证p神的操作 也试着“完成p神未完成之路”
调试所需环境:
Macos
CLion
Vscode
 
php
1 <?php  (empty ($_GET ["env" ])) ? highlight_file (__FILE__ ) : putenv ($_GET ["env" ]) && system ('echo hfctf2022' );?> 
nginx/default.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 server  {        listen  80  default_server;         listen  [::]:80  default_server;         root  /var/www/html;         index  index.html index.htm index.nginx-debian.html;         server_name  _;         location  / {                 try_files  $uri  $uri / =404 ;         }         location  ~ \.php$  {                 include  snippets/fastcgi-php.conf;                 fastcgi_pass  127.0.0.1:9000 ;         } } 
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 FROM  php:7.4 .28 -fpm-busterLABEL  Maintainer="yxxx"  ENV  REFRESHED_AT 2022 -03 -14 ENV  LANG C.UTF-8 RUN  sed -i 's/http:\/\/security.debian.org/http:\/\/mirrors.163.com/g'  /etc/apt/sources.list RUN  sed -i 's/http:\/\/deb.debian.org/http:\/\/mirrors.163.com/g'  /etc/apt/sources.list RUN  apt upgrade -y && \     apt update -y && \     apt install nginx -y ENV  DEBIAN_FRONTEND noninteractiveCOPY  index.php /var/www/html COPY  default.conf /etc/nginx/sites-available/default COPY  flag /flag EXPOSE  80 CMD  php-fpm -D && nginx -g 'daemon off;'  
0x1源码获取 https://command-not-found.com/ 
这个网站可以输入命令来获取该命令对应的软件包
比如我们输入echo 可以发现网站提示了在各种编程语言下获取该软件的方式
因为赛题环境是debian我们前往Debian Package 搜索coreutils
搜索后会发现Debian Package提供了完整匹配和部分匹配的软件包地址
点击完整匹配对应的软件包路径 可以看到网站右侧即可下载源码
如果我们想确定我们目标环境中coreutils的版本 可以使用dpkg -l的方式来检索软件包版本
0x2dash调试环境搭建 dash源码获取途径如0x1节
解压后进入目录
cd /Users/su/Desktop/code/c/dash-0.5.10.2/
我们首先编译dash 并添加调试符号
1 2 3 CFLAGS="-g" ./configure --prefix=/Users/su/Desktop/code/c/dash-0.5.10.2/  && \ make && \ make install  
等待编译完成后在当前目录下会出现bin目录 目录中存放着dash的可执行文件
运行一下测试
我们需要在vscode中安装c/c++扩展
随后在Debug菜单中选择创建launch.json
然后选择C++(GDB/LLDB)
在生成的json文件中添加调试信息 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 {                    "version" :  "0.2.0" ,      "configurations" :  [ {          "name" :  "Debug" ,          "type" :  "cppdbg" ,          "request" :  "launch" ,          "program" :  "/Users/su/Desktop/code/c/dash-0.5.10.2/bin/dash" ,           "args" :  [ 		             "-c" ,              "echo suanve"          ] ,          "stopAtEntry" :  false ,          "cwd" :  "${fileDirname}" ,          "environment" :  [              {                  "name" :  "test" ,                  "value" :  "test"              } ,          ] ,          "externalConsole" :  false ,          "MIMode" :  "lldb"      } ]  } 
配置完成保存 打开src/main.c找到主函数下一个断点  点击调试即可断在main函数