红包

又快过年了, 又到了发红包的时候。

学习之余, 受到网友的启发, 我做了个小谜题发送给大家, 让他们解开之后获得红包口令。

说明文字是这样的

快过年了,我们来发红包吧。
我把红包隐藏在了这里:
ssh hb@hb.twd2.net

红包总额不多,希望你能玩得开心。
(提示:在手机版支付宝钱包中输入红包口令就可以拿到红包了。)

这个实际上是从iceboy那里抄来的, 他之前发了个类似的红包谜题。

这段文字应该是iceboy从44670那里抄来的。

一、谜题之hb

ssh hb@hb.twd2.net

这个ssh的shell, 实际上是一个Python脚本shell.py, 代码如下:

#!/usr/bin/python

import hashlib
import time
import resource

resource.setrlimit(resource.RLIMIT_NPROC, (1, 1))
resource.setrlimit(resource.RLIMIT_CPU, (1, 1))

def secret_hash(x):
    sha1 = hashlib.sha1()
    sha1.update(x)
    sha1.update('35154430')
    return sha1.hexdigest()

def hash(x):
   for i in xrange(1,300000):
        x=secret_hash(x)
   return x[0:16]

if hash(eval('"' + raw_input('Password: ') + '"')) == 'c986a42cad72b740':
    print 'Correct!'
else:
    print 'Incorrect!'

使用了resource来限制Python程序, 阻止它死循环或者创建新进程等。

使用了299999次带salt的sha1, 增加了爆破的难度(不过正解应该还是爆破)。

其中的35154430只是一个随机数罢了, 不是真正的红包口令。

用户通过ssh登录之后, 会看到Password的提示, 他们会设法猜测密码。

一旦他们按下Ctrl+C之后, 他们就会发现这个脚本中的漏洞所在, 之后他们可以使用一些”注入”的手法来执行任意代码。

比如


" + raw_input(open('/home/hb/shell.py').read()) + "

就可以输出这段程序, 用户分析程序后, 就该知道下一步行动了。

为了确保程序不被篡改, 我使用chattr给这个shell.py脚本加上了i标记, 也就是不能修改的标记。

但是, 我忘记把/home/hb目录的w权限去除了, 因此, 别人可以创建文件。

所以就有人创建了resource.py, 这样resource被绕过了。接着, 他经过简单的操作, 成功运行bash等真实的shell, 不过好像没什么实际的用处。iceboy的版本是不允许创建文件的, 所以我也把目录的w权限关掉了。

这个红包的口令是23654454, 不过现在失效了, 没有一个人领取到。

二、谜题之hb2

ssh hb2@hb.twd2.net

在hb进行的过程中, 我发现hb比较繁琐, 爆破的可能性小, 不好玩, 于是我创建了hb2。

它的代码如下

#!/usr/bin/python

import hashlib
import time
import resource

resource.setrlimit(resource.RLIMIT_NPROC, (1, 1))
resource.setrlimit(resource.RLIMIT_CPU, (1, 1))

def secret_hash(x):
    sha1 = hashlib.sha1()
    sha1.update(x)
    sha1.update('9591405162440479')
    return sha1.hexdigest()

def hash(x):
   for i in xrange(1,300000):
        x=secret_hash(x)
   return x[0:16]

pwd=eval('"' + raw_input('Password: ') + '"')
stat=hash(pwd) == '598cd93940fbf173'
f=open('login.log','a')
f.write(pwd + ' ' + str(stat) + '\n')

if stat:
    print 'Correct!'
else:
    print 'Incorrect! This incident will be reported.'

用户尝试密码错误之后, 会发现提示和hb不一样, 多了”This incident will be reported.”。

我其实是在向他们暗示login.log的存在。

如果能够成功获取hb中shell.py的代码的话, 那么这个hb2就显得十分简单了。

因为只需要获取login.log的内容即可了, 而不是暴力破解。聪明的你, 想到了没有呢?

login.log中会有一行”67275994 True”, 就是口令。

另外, 为了确保login.log能够成功写入并且不被删除, 我使用chattr, 给这个login.log脚本加上了a标记, 也就是只能添加的标记。

然而, 有的人抢到红包之后还不罢休, 向login.log写入了好玩的东西, 比如”xxxxxx True”来误导之后的人, 增加他们抢红包的难度。

这个红包, 一共5个, 共50元, 每个的金额随机, 被领光了。

另外, 这个运行红包的vps其实是用36cloud(一个长得很像digitalocean的vps提供商)发放的免费的39HKD额度购买的。

现在把所有文件上传上来: hbgame.zip, 里面包含有谜题结束之后的login.log文件, 这个文件里面包含有十分有趣的内容。

发表评论?

5 条评论。

  1. 感谢万呆呆的分享!我定认真学习!

  2. 吓尿了

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

Trackbacks and Pingbacks:

本文链接:https://twd2.me/archives/6815QrCode