| 关键词:unscrew, GitHub, Git, Shell, HTTPS, 命令注入, AI, IP, 弱口令, 数据库 |
本文知识点:
首先随便输入个密码,然后查看返回包,通过错误密码发现里面的特殊关键字 ![]() 这种情况可以直接筛选返回包不存在“Authentication failed”关键字的,即可认为他登录成功,虽然有误报的可能,但是机会还是很大的;将所有的目标资产收集好以后,批量测试一下密码admin的弱口令,成功的发现了几个存在弱口令的目标 ![]() 而后登录进行,快速的定位到了一个RCE漏洞,这块也是老演员了,很多网络设备的命令注入漏洞都在这里 ![]() 运气很好,这块还是个未授权 ![]() 看了下固件版本号,发现版本应该是最新的,也可能是次新的,但是经过批量测试发现效果反响平平,不是所有设备都存在这个漏洞,不排除修复的可能,但是我猜测更多的是这里的未授权修复了,因为我批量测试的时候是利用未授权的方式进行测试的 利用tar指令将源码进行备份打包,而后存放到web目录即可下载,下载到本地后,发现代码是MVC架构,但是又不全是,上面发现的ping功能的代码很显然就不符合,奇奇怪怪的 定位到代码打开查看,发现代码加密了 ![]() 通过PM9SCREW能大致推测出加密方法,screw加密,这个项目在github是有的,想要解密文件需要找到他的加密密钥和加密的长度,这个东西其实藏在 php_screw.so 文件里,想要找到这个文件,要不就是在他的phpinfo里找到 extension-dir 目录,要不就通过find指令直接搜索,正好这里有命令注入,通过命令注入漏洞可以进行检索
![]() ![]() 也可以下载工具https://github.com/DaBoQuan/php_unscrew 将文件解压到kali里,然后编译,这个工具也可以获取key和length g++ unscrew.cpp -o unscrew -lz ![]() ![]() ![]() ./unscrew config.php 10 e1xxxxxxxxxxxxx
此时再次查看漏洞接口代码,发现程序从请求里获取hostname,然后拼接到cmd变量里执行sudo指令,最后利用popen完成实际执行步骤,因此这里有回显并且存在系统命令注入风险; ![]() 同时在此接口里没有任何对session的校验,因为不需要认证即可完成命令执行; 代码拿到手了,还是希望能想办法拿下更多的漏洞,于是先看了下代码的登录逻辑,发现这个程序的数据库是sqllite ![]() ![]() 可以看到,通过用户名获取对应密码,然后进行md5编码,与sqllite数据库里的值进行比较,所以下一步就是如何能获取这个数据库? 通过进一步的代码审计,发现了一处不需要认证的任意文件下载漏洞 ![]() 很好,非常的光棍,让我们验证一下漏洞效果 ![]() 把文件下载到本地后,利用navicat打开 ![]() 而后只需要解密md5即可获取admin用户的密码,这样就能做到登录效果了,这么做的原因是因为有一些漏洞是做了认证的,只有经过认证才能进行漏洞利用,比如这个注入漏洞 ![]() 因为后边发现了一些漏洞是需要认证才能用的,所以获取密码是有必要的,获取密码后构造登录数据包获取session值,而后就可以针对一些其他型号的设备进行测试,扩大攻击面,代码就不展示了 后发现的漏洞不多,就很尴尬,因为这几个洞都能黑盒测出来,可能是运气成分,接下来说一下如果想上传webshell想解析,应该怎么做 首先在github下载项目https://codeload.github.com/Luavis/php-screw/zip/refs/heads/master apt-get install php-dev phpize #编译环境 ![]() ./configure ![]() 修改密钥和长度 ![]() 进入到tools目录进行编译 ![]() 加密info文件 ![]() 参考:https://www.cnblogs.com/StudyCat/p/11268399.html |
| 本文出处: https://mp.weixin.qq.com/s/6jm1d98O83bnA2fFha1riA |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|