0x00 写在前面
首先说一句,我真的好久 好久 好久 好久 好久没碰过渗透了,一方面是因为太菜,之前从来都没完整的走完一套getshell,半路卡住是常有,做着做着就give up;另一方面是从实习以来一直做的是安全开发相关的工作,以后工作方向大概率也是安全开发而不是攻防。
那为什么我会忽然想起搞学弟的网站呢?事情是这样的,之前有指导过学弟怎么搭建一套作业提交系统,然后学弟就开始自己研究,中间过了好久,我也忘了这码事。
今天晚上他忽然来找我
顺便问他要了网址,也想登上去看看是啥样
本来以为就是个简单的作业提交接口,打开一看,好家伙,还做了个登录页,瞬间起了杀心23333333
开搞!
0x01 尝试
看到登录框,那SQL注入必须安排上,上来一通操作猛如虎,各种payload试了一遍,结果网页啥回显都没有,顿时觉得很蹊跷,你好歹给个弹窗吧,什么提示都没有是啥意思?于是直接F12,想看下他的js是咋写的,一打开,好家伙,人傻了
前端直接验证用户名和密码,没有使用cookie标记登录用户身份,就直接返回一个静态页面23333333
看来学弟还有很长一段路要走啊
继续,打开主界面
看到文件上传,没抱太大希望,毕竟现在主流安全策略对文件上传限制已经很严格了,随手传了个文件试一下
…
…
…
笑死
不仅传上去了,还贴心地给你回显出了上传点233333,并且目录里文件可以直接访问
直接php一句话木马安排上
竟然404了,看来被秒删,高兴早了
既然这样,先搜集一波信息吧,传了个phpinfo上去,成功打开
收集到信息:Windows+宝塔面板部署的网站,有点难搞了
再次尝试传另一种一句话木马
这会看来成功了,上蚁剑
这里记一个坑,用assest写的一句话必须要用base64编码连接,别问我为啥,我也不知道
先看下文件管理,因为是用宝塔部署的,权限很高,可以操作所有目录下的文件
按理来说,现在已经算是getshell了,打开终端就能随意执行命令了
但…
你以为这么简单就结束了吗
0x02 困难
所有命令返回的都是ret=127,之前从来没遇到过这种情况,上网查找资料得知,宝塔部署的PHP禁掉了大部分命令执行函数,所以蚁剑自然无法执行任何命令
又去搜了一下解决方案,发现可以通过环境变量 LD_PRELOAD 劫持系统函数,加载自己的so文件,来突破disable_functions限制执行操作系统命令
刚准备开始操作,忽然一想,这是windows系统啊,有个毛的环境变量 LD_PRELOAD
于是继续搜索windows下的disable_functions绕过方法,无果…
山重水复疑无路,又想give up,不过这次真不甘心,这都能任意操作文件了,还拿不到shell,于是开始漫无目的地逛服务器里的文件,希望能寻求到一点突破
0x03 突破
因为之前我自己也用过宝塔,所以换个思路,想从宝塔入手,看看是否能直接登进面板
宝塔的面板监听在8888端口,但是很久很久以前,宝塔就开启了随机登录入口,直接访问是进不去的,url后面需要跟一个一开始生成的随机路径
继续查找关于宝塔的相关信息得知,随机路径信息在C:/BtSoft/panel/data/default.pl文件里
接下来就是找用户名和密码了,在同目录下看到有一个default.db文件,推测可能是宝塔使用的SQLite数据库,下载到本地,使用navicat打开
看到users表,存的应该就是管理帐号了
password字段看上去是md5加密的,扔进解密网站
很意外,没解出来,再回头一看,表里最后一列是salt字段,看来是加盐了,由于不知道加盐规则,此路不通,淦…
0x04 成功
面板是登不进去了,于是开始翻宝塔的数据库,一张一张表往下看,忽然看到一个config表
mysql_root ?
忽然想起,学弟在部署宝塔的时候,应该也是同时部署了LNMP环境的,所以这里极有可能通过这个密码登录进本地数据库
继续安排上蚁剑
成功连上数据库!
于是开启另外一种新思路,利用mysql执行系统命令,正好,前两天在准备面试的时候有看过利用mysql UDF进行提权,这里就可以借助它来实现任意命令执行
因为我们目前已经拿到了文件操作的权限了,所以我们不需要再通过SQL向系统目录里写一个udf文件,直接将udf文件上传到lib/plugin目录下即可
udf文件可以在kali的MSF目录中找到,具体路径为 /usr/share/metasploit-framework/data/exploits/mysql/,这里我们根据得到操作系统信息,下载64位的.dll文件
再用蚁剑上传
接下来就可以使用sql语句执行命令了
create function sys_eval returns string soname 'udf.dll';
select * from mysql.func where name = 'sys_eval';
成功执行命令,并且可以看到,当前的身份是system,权限很高
接下来就是常规操作了,使用命令创建新用户,然后登录进去
使用远程桌面登录服务器
攻击成功!!!