bandit系列21--27

level21:linux计划任务

ls /etc/cron.d/    #发现可疑文件cronjob_bandit22

cat cronjob_bandit22    #发现执行命令/usr/bin/cronjob_bandit22.sh,查看该文件属性,发现group组有x权限。

/usr/bin/cronjob_bandit22.sh

cat t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv    #这里注意,用户没有ls /tmp的权限,但可以访问tmp里面的文件。

level22:linux下求算md5

echo I am user bandit23 | md5sum | cut -d ‘ ‘ -f 1    #结果是8ca319486bfbbc3663ea0fbe81326349

cat /tmp/8ca319486bfbbc3663ea0fbe81326349       #由于crontab定时执行相应脚本,所以/tmp/下存在这个文件

level23:bash脚本(当然只是为了解体,可以使用level22的方法,因为总有人已经做好脚本了)

cat /ect/cron.d/cronjob_bandit23  #* * * * * bandit23 /usr/bin/cronjob_bandit23.sh  &> /dev/null

ls -l /usr/bin/cronjob_bandit23.sh

#-rwxr-x--- 1 bandit23 bandit22 211 Nov 14 10:32 /usr/bin/cronjob_bandit23.sh  具备写权限

#编写脚本:这里使用人家已经写好的

#!/bin/bash

myname=$(whoami)

mytarget=$(echo I am user $myname | md5sum | cut -d ‘ ‘ -f 1)

#由于执行的时候是将输出重定向到了/dev/null,所以下面一句没意义

#echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"

cat /etc/bandit_pass/$myname > /tmp/$mytarget

脚本写好,等待一段时间,使用level22的方法,获取下一关密码。

//原来只有到此为止,如今整理的时候发现新增加了几题

level24:brute-forcing

#题目要求$passwd_bandit24 {0000..9999}暴力出下一关的密钥

echo "$passwd_bandit24 0000" | nc localhost 30002

#发现返回结果第二行以Wrong!开头,所以暴力脚本如下:

#!/bin/bash

passwd="$passwd_bandit24"

for i in {0..9999}

do

#printf "try $passwd %04d\n" $i

a=`printf "$passwd %04d" $i | nc localhost 30002 | awk "NR==2" | grep -v Wrong`    #awk那段是取返回结果的第二行

if [ -n "$a" ]    #判断返回结果是否为空,如果不为空,再次访问获取结果。因为结果在第三行,所以要加这个。

then

printf "$passwd %04d" $i | nc localhost 30002

break

fi

done

level25:非bash的shell

时间: 2024-10-28 22:24:40

bandit系列21--27的相关文章

Mysql高手系列 - 第27篇:mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发设计及跨库转账问题

Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第27篇. 本篇文章我们先来看一下mysql是如何确保数据不丢失的,通过本文我们可以了解mysql内部确保数据不丢失的原理,学习里面优秀的设计要点,然后我们再借鉴这些优秀的设计要点进行实践应用,加深理解. 预备知识 mysql内部是使用b+树的结构将数据存储在磁盘中,b+树中节点对应mysql中的页,mysql和磁盘交互的最小

[Android学习系列21]webview的一些事

android webview里设置cookie  (webview的cookie和httpclient的cookie同步) http://blog.csdn.net/encienqi/article/details/7912733 [Android学习系列21]webview的一些事,码迷,mamicode.com

redis 系列21 复制Replication (上)

原文:redis 系列21 复制Replication (上) 一.   概述 使用和配置主从复制非常简单,每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本.这个系统的运行依靠三个主要的机制: (1) 当一个 master 实例和一个 slave 实例连接正常时, master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身(m

Hyper-V 2016 系列教程27 Hyper-v平台串口外设解决方案介绍

一般企业中串口在以下设备中比较常见交换机.老款工业设备.PLC控制设备.小型标签打印机.精密电子秤等为了跟上工业4.0的潮流所有工厂内的生产监控数据采集等老旧设备已经跟不上现代流行的趋势原来以串口RS232.RS422.RS485方式管理的串口设备必须通过串口转网络的设备完成升级和系统整合提高管理效率这里我推荐的串口转网络设备的品牌有MoxaZLAN并且这二家厂家都有串口转无线网络设备的解决方案. 串口设备联网服务器有如下的优点 所有设备统一通过TCP/IP的标准方式进行管理集中控制更加方便管理

Python Twisted 学习系列21(转载stulife最棒的Twisted入门教程)

第二十一部分 惰性不是迟缓: Twisted和Haskell 简介 在上一个部分我们对比了Twisted与 Erlang,并将注意力集中在它们共有的一些思想上.结果表明使用Erlang也是非常简便的,因为异步I/O和反应式编程是Erlang运行时和进程模型的关键元素. 今天我们想走得更远一点,去看一看 Haskell —— 另一种功能性语言,然而与Erlang有很大不同(当然与Python也不同).这里面没有太多的平行概念,但我们仍然会发现藏在下面的异步I/O概念. F —— 功能性 虽然Erl

深入理解JavaScript系列(27):设计模式之建造者模式

介绍 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式. 建造者模式可以将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.也就是说如果我们用了建造者模式,那么用户就需要指定需

bandit系列0--10

这个系列是基础linux命令学习 level0:最简单的命令 cat readme level1:特殊文件名 cat ./- level2:特殊文件名 cat "spaces in this filename" level3:隐藏文件 cat inhere/.hidden level4:查看文件格式 file inhere/-file* cat inhere/-file07 level5:查找指定大小的文件 find inhere -size 1033c cat inhere/mayb

游戏系列~21点扑克牌(1)

#include<ctime>//#include<stdio>#include<iostream>//#include<stdlib>#include<conio.h>#include <bits/stdc++.h> using namespace std;//定义扑克类class game{private:int wins,lose,draw,money;int bet,playerturns,cputurns;float pla

补习系列(21)-SpringBoot初始化之7招式

目录 背景 1. @PostConstruct 注解 2. InitializingBean 接口 3. @Bean initMethod方法 4. 构造器注入 5. ApplicationListener 6. CommandLineRunner 7. ApplicationRunner 测试代码 参考文档 背景 在日常开发时,我们常常需要 在SpringBoot 应用启动时执行某一段逻辑,如下面的场景: 获取一些当前环境的配置或变量 向数据库写入一些初始数据 连接某些第三方系统,确认对方可以

小酌重构系列[21]&mdash;&mdash;避免双重否定

避免双重否定 在自然语言中,双重否定表示肯定.但是在程序中,双重否定会降低代码的可读性,使程序不易理解,容易产生错觉.人通常是用"正向思维"去理解一件事情的,使用双重否定的判断,需要开发者以"逆向思维"的方式去理解它的含义.另外,在写程序时,"!"符号很容易被疏忽和遗漏,一不小心则会编写出错误的代码,从而产生bug.所以,在程序中,我们应当尽量避免使用双重否定. 优惠券是否未被使用? 还是以在线商城给用户发放优惠券为例,由于优惠券的初始状态是未被