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

相关推荐
ServBay15 分钟前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954483 小时前
CTF 伪协议
php
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php