Wargames与bash知识12

Wargames与bash知识12

Bandit20

关卡提示:

主目录中有一个setuid二进制文件,它执行以下操作:它在您指定为命令行参数的端口上连接到localhost。然后,它从连接中读取一行文本,并将其与前一级别的密码(bandit20)进行比较。如果密码正确,它将传输下一级别(bandit21)的密码。

注意:试着连接到您自己的网络守护程序,看看它是否如您所想的那样工作

推荐命令:

ssh, nc, cat, bash, screen, tmux, Unix 'job control' (bg, fg, jobs, &, CTRL-Z, ...)

有没有觉得的这个关卡有点眼熟:某个关卡我们使用nc给一个端口(好像是30000)发送一个字符串,然后服务器给回复一个密码。这个关卡是展现服务器端是如何实现的吧,不过细究的还有有很大的区别:那个关卡回复是自动的,但在这个关卡我们需要手动运行一个程序才能实现。

Nc的命令前面已经谈过了,就不再复述。

解决这个问题需要使用两个终端,咱们继续使用windows的wls2子系统unbuntu来做演示。

使用ssh登录服务器

g

bash 复制代码
yj@guyanjun:~$ ssh -l bandit20 -p 2220 bandit.labs.overthewire.org
The authenticity of host '[bandit.labs.overthewire.org]:2220 ([51.20.13.48]:2220)' can't be established.
ECDSA key fingerprint is SHA256:IJ7FrX0mKSSHTJ63ezxjqtnOE0Hg116Aq+v5mN0+HdE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[bandit.labs.overthewire.org]:2220,[51.20.13.48]:2220' (ECDSA) to the list of known hosts.
                         _                     _ _ _
                        | |__   __ _ _ __   __| (_) |_
                        | '_ \ / _` | '_ \ / _` | | __|
                        | |_) | (_| | | | | (_| | | |_
                        |_.__/ \__,_|_| |_|\__,_|_|\__|


                      This is an OverTheWire game server.
            More information on http://www.overthewire.org/wargames
           .........

运行命令获得相关信息:

bash 复制代码
bandit20@bandit:~$ ./suconnect
Usage: ./suconnect <portnumber>
This program will connect to the given port on localhost using TCP. If it receives the correct password from the other side, the next password is transmitted back.

使用左边的终端向端口11000发送字符串(端口可以自行指定,注意不要使用知名端口),使用右边的终端运行./suconnect 11000命令获得所需密码

现在尝试发送一个错误是字符串看看会有什么报错

如果不喜欢使用的两个终端,可以尝试将nc放入后台

b

bash 复制代码
andit20@bandit:~$ nc -l 11000 <<< "VxCazJaVykI6W36BkBU0mJTCM8rR95XT" &
[1] 383771
bandit20@bandit:~$ ./suconnect 11000
Read: VxCazJaVykI6W36BkBU0mJTCM8rR95XT
Password matches, sending next password
NvEJF7oVjkddltPSrdKEFOllh9V1IBcq
[1]+  Done                    nc -l 11000 <<< "VxCazJaVykI6W36BkBU0mJTCM8rR95XT"
bandit20@bandit:~$

将linux命令放入后台的方法很简单,直接在命令结尾添加一个 & 符号。为演示效果,我使用while做了一个死循环。

bash 复制代码
gyj@guyanjun:~$ while true ; do sleep 200; done &
[1] 693

返回的信息:1 是任务后 693是进程号

可以使用jobs 查看后台运行的命令

bash 复制代码
gyj@guyanjun:~$ jobs
[1]+  运行中               while true; do
    sleep 200;
done &

可以使用kill %1或者 kill 693 "杀死"后台进程

bash 复制代码
gyj@guyanjun:~$ kill %1
gyj@guyanjun:~$ jobs
[1]+  已终止               while true; do
    sleep 200;
done

使用fg 任务号将命令放回前台

bash 复制代码
gyj@guyanjun:~$ fg
while true; do
    sleep 200;
done

使用crtl-z 将命令暂停且放入后台

bash 复制代码
gyj@guyanjun:~$ fg
while true; do
    sleep 200;
done
^Z
[1]+  已停止               while true; do
    sleep 200;
done

使用bg %1 恢复后台暂停的命令,使其在后台运行

bash 复制代码
gyj@guyanjun:~$ bg %1
[1]+ while true; do
    sleep 200;
done &

这个技巧可以解决命令忘记放入后台的情况。

使用&将命令放入后台,如果关闭了shell终端,后台的命令也会退出。为了解决这个问题,可以使用 nohup命令

bash 复制代码
gyj@guyanjun:~$ nohup sleep 2000 &
[2] 1261
gyj@guyanjun:~$ nohup: 忽略输入并把输出追加到'nohup.out'

gyj@guyanjun:~$ nohup sleep 3000 >aa.out &
[3] 1264
gyj@guyanjun:~$ nohup: 忽略输入重定向错误到标准输出端

gyj@guyanjun:~$ nohup sleep 3000 &>aa.out &
[4] 1265

gyj@guyanjun:~$ jobs
[1]   运行中               while true; do
    sleep 200;
done &
[2]   运行中               nohup sleep 2000 &
[3]-  运行中               nohup sleep 3000 > aa.out &
[4]+  运行中               nohup sleep 3000 &> aa.out &
gyj@guyanjun:~$

请注意使用nohup需要将后台的进程的输出处理一下,shell退出以后,后台程序原本输出到屏幕的输出就无处可去了。

相关推荐
hccee19 分钟前
C# IO文件操作
开发语言·c#
hummhumm24 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊34 分钟前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
zmd-zk1 小时前
flink学习(2)——wordcount案例
大数据·开发语言·学习·flink
好奇的菜鸟1 小时前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
Alive~o.01 小时前
Go语言进阶&依赖管理
开发语言·后端·golang
花海少爷1 小时前
第十章 JavaScript的应用课后习题
开发语言·javascript·ecmascript
手握风云-1 小时前
数据结构(Java版)第二期:包装类和泛型
java·开发语言·数据结构
喵叔哟1 小时前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生2 小时前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea