dash分析-0x0环境搭建

0x0前言

虎符比赛遇到了一题极其类似p神做过的题,只是底层操作系统是Debian,无法使用p神的思路解决。

本着遇到了就调一调的精神 尝试了一下调试 验证p神的操作 也试着“完成p神未完成之路”

调试所需环境:

  1. Macos

  2. CLion

  3. 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-buster

LABEL 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 noninteractive



COPY 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 可以发现网站提示了在各种编程语言下获取该软件的方式

image-20220321100706306

因为赛题环境是debian我们前往Debian Package搜索coreutils

image-20220321100839790

搜索后会发现Debian Package提供了完整匹配部分匹配的软件包地址

image-20220321100912251

点击完整匹配对应的软件包路径 可以看到网站右侧即可下载源码

image-20220321100946695

如果我们想确定我们目标环境中coreutils的版本 可以使用dpkg -l的方式来检索软件包版本

image-20220321101348993

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的可执行文件

image-20220321102005557

运行一下测试

image-20220321102315255

我们需要在vscode中安装c/c++扩展

image-20220321102355203

随后在Debug菜单中选择创建launch.json

image-20220321102450454

然后选择C++(GDB/LLDB)

image-20220321102514176

在生成的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
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"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": [ // 这里是运行时的参数。因为赛题执行了dash -c 'echo xxxx' 所以需要配置一下
"-c",
"echo suanve"
],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [
{
"name": "test",
"value": "test"
},
],
"externalConsole": false,
"MIMode": "lldb"
}]
}

配置完成保存 打开src/main.c找到主函数下一个断点 点击调试即可断在main函数

image-20220321102852964

作者

Suanve

发布于

2022-03-21

更新于

2022-03-21

许可协议