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退出以后,后台程序原本输出到屏幕的输出就无处可去了。

相关推荐
wjs20241 小时前
XSLT 实例:掌握 XML 转换的艺术
开发语言
萧鼎1 小时前
Python第三方库选择与使用陷阱避免
开发语言·python
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)
开发语言·前端·javascript·信息可视化·数据可视化·d3.js
一颗星星辰1 小时前
C语言 | 第十章 | 函数 作用域
c语言·开发语言
lxp1997411 小时前
php函数积累
开发语言·php
科技资讯早知道1 小时前
java计算机毕设课设—坦克大战游戏
java·开发语言·游戏·毕业设计·课程设计·毕设
白拾1 小时前
使用Conda管理python环境的指南
开发语言·python·conda
从0至12 小时前
力扣刷题 | 两数之和
c语言·开发语言
总裁余(余登武)2 小时前
算法竞赛(Python)-万变中的不变“随机算法”
开发语言·python·算法
NormalConfidence_Man2 小时前
C++新特性汇总
开发语言·c++