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,权限很高 接下来就是常规操作了,使用命令创建新用户,然后登录进去 使用远程桌面登录服务器 攻击成功!!!
|