欢迎访问Sunbet官网(www.sunbet.us),Allbet欧博官网(www.ALLbetgame.us)!

首页Sunbet_安全预警正文

渗透测试实战(一)

b9e08c31ae1faa592020-01-07174申博_新闻事件

写在前面

准备分享一些实战向的、思路比较有趣的文章,算不上系列吧,只是不知道怎么命名好一些。
​ 工作中某迂回目标的c段服务器,由于各种原因需要迂回战术去搞,所以遇到了文中的站点。对于上传点的利用过程感觉比较有意思,所以准备分享出来当作各位茶余饭后的休闲文章。 注: 由于不可抗拒因素,站点相关图片可能较少,分析过程尽可能详细一些。

登录认证

工作以后,很多时候目标可能只有一个登录框,通常都很头疼。其实常规的手段都尝试一下,深入理解功能点、接口、数据传输形式等等,还是有可能突破的。希望在准备的一些实战总结文章中可以给各位提供一些思路。
通过c段端口扫描发现 .81这台机器开放82端口,服务为http。访问后为xx文档系统登录页面,需要认证登录,无验证码。因此可以考虑弱口令爆破、测试SQL注入、目录扫描、查看js/抓包寻找接口等等。 经过测试存在注入,并且目录扫描扫到了.git。我似乎已经看到了root权限,但是在进一步漏洞利用的过程中的的确确遇到了一些有意思的问题

突破认证

毫无过滤的注入,让我直接放弃了去看代码的想法,准备好了黑盒注入+上传一条龙。
经过简单的判断为盲注,但是当注入语句未闭合时会返回详细的mysql报错信息,返回的语句单引号经过转义,所以无法利用报错注入。直接用sqlmap跑就好了,发现非root用户,挂在vps去跑表和字段,准备找一个账号密码登录进去看看。 同时利用lijiejie的.git泄露exploit脚本,将源码下载了回来。 渗透测试实战(一)  申博_新闻事件 第1张 找到了登录 认证出的代码,发现在未闭合sql语句返回错误处可以利用,利用错误日志功能达到回显注入的目的。 渗透测试实战(一)  申博_新闻事件 第2张 通过测试发现$row['usr_id']内容为post的username参数值,将错误语句写入日志,再通过getErrorMsg函数select读取出来,导致了可以利用该功能进行回显注入,直接利用sqlmap跑出来的表名字段名读取了用户密码。 渗透测试实战(一)  申博_新闻事件 第3张 登录到系统后很快就找到了上传点,管理文档处可以上传pdf文件,但是只是单纯的前端校验。上传php文件后访问却404,观察url发现上传的文件名被写入数据库,通过参数调用的方式来加载文件(url:project.php?fn=1.pdf&file=1.php),这种形式的调用文件通常会将文件放在非web应用程序目录,而且就算放在了web目录由于没有返回路径也无法直接访问。 但是我们有源代码,这下shell没跑了吧?

其他上传接口

此时遇到了个严重的问题,登录后的默认文件project.php,在我利用lijiejie脚本还原的文件里并不存在??
这种情况其实很常见,网上有很多.git泄露利用工具,但是每种还原的都不相同。暂时没有考虑还原全部commit,通过全局搜索危险函数,准备用最便捷的方式getshell。只找到了move_uploaded_file函数,简单的阅读代码,让我眼前一亮。
/**
*api.php
**/
渗透测试实战(一)  申博_新闻事件 第4张 从代码中可以看出,文件后缀名路径皆可控,只要post $_FILES[\'snapshot\'][\'name\']参数,以及正确的用户名密码即可上传任意文件。所以尝试直接,访问api.php文件,通过自己构造上传类型的数据包上传正常文件。
phpweb前台任意文件上传 测试环境:WindowsXP+PHPnow1.6.5+phpwebV2.0.35 在 base/appplus.php 文件中,我们发现一处未过滤的文件上传。但是要利用这处任意文件上传,我们得先绕过第15行的密钥校验。 全局搜索下 md5(strrev($dbUser.$dbPass)) ,看看有没办法将这个值 leak 出来。这里共搜出4处,而 base/post.php 文件中的代码明显和其他不一样,我们看其具体代码。 我们在 base/post.php 文件中,发现当 $act="appcode" 时,程序就会将 md5(strrev($dbUser.$dbPass)) 输出,而 $act 完全可控。 那么攻击步骤就很清晰了。先利用 base/post.php 文件 leak 出 md5(strrev($dbUser.$dbPass)) 的值,然后再利用 base/appplus.php 上传文
渗透测试实战(一)  申博_新闻事件 第5张 的确执行了上传的操作,通过响应body中的 2 可以知道上传失败了,根据报错信息查看了config文件,发现出大问题
define( 'PATH_ROOT',    'c:/wamp/www/webname' );
/* ...... */
define( 'PATH_UPL_PA',              PATH_ROOT . '/files/pa' );
下载回来的配置文件中的绝对路径是windows目录,然而此时的web运行在linux上。这个运维直接将windows下的web程序迁移到了linux中。。。。 TQL 仔细下面这段代码,发现很有意思。 最直观的想法是,利用../可以控制上传目录,并且文件名可控,完全可以利用下面构造的文件名直接上传至根目录。那么可不可以利用目录跳转跳过定义的c盘目录,拼接前面爆出的此时linux的绝对路径。
../-../-../../../../../../../webpath/a.php
发现同样是失败的,后来经过同事提醒发现并不可以,因为在linux中无法跳过并不存在的目录。 渗透测试实战(一)  申博_新闻事件 第6张 同事在测的时候发现还有一个问题就是,../在php上传文件的时候反斜线后面就会被截断,也就是说根本不能通过../这样的形式进行目录跳转。 如果该api在迁移后仍在用,可以利用“..-..-a.php”文件名跳转绕过目录的限制(使用该文件名上传了一次发现依旧返回为2)。为了确认api还在使用,尝试还原所有commit看能否找到更改后的代码。

.git还原问题

网络上的工具还原方式不同,导致还原的文件也不相同,推荐使用GitTools工具,还原的代码很全面,就是比较耗时。
GitTools,将所有commit还原后我找到了最新的config文件,发现了代码修改的部分。 config.php文件在/inc目录下。 渗透测试实战(一)  申博_新闻事件 第7张 发现迁移到linux以后的代码验证了host,之前一直用ip:port访问并不能上传成功,修改host为beauty.xxxx.net(ip为.81),上传文件..-..-a.php成功。 渗透测试实战(一)  申博_新闻事件 第8张 渗透测试实战(一)  申博_新闻事件 第9张

写在后面

在构造上传包和文件名处是比较有趣的,同时自己也学到了一些东西。不知道为什么,当想尽办法绕过的时候觉得是个很有趣的点,回过头来写文章却发现平平无奇,由于项目暂停了也没法搞内网了,看了一下内网还是挺大的,linux代理进去搞一波可能会有收获,文章就到这里吧。  

网友评论