CTFweb类型(二十七)gopher对mysql的利用及例题讲解

2020-04-20 7,379

本次来讲一下gopher协议在MySQL中的利用,其实CTF题目中已经有出现过了,比如说红帽杯还有CTF都有出现过,不管是像之前讲的Redis还是MySQL,就是这种协议的利用,都是有可以做转化,现在我们讲的只是一个demo,毕竟这些协议最终它的本质其实都是对MySQL,对Redis的一个使用,但是应用能够扩展成什么类型的题目,都可以在变。

先讲一下对MySQL的利用:

我这边创建一个demo,简单了解一下。到时候你也可以去拿本地测试,先把后面的对数据库应用找到,然后我们再去讲探测,现在我们假设已经发现了这个地方存在SSRF就能够发请求,然后也发现里面有MySQL,也确认了MySQL就是没有密码。基于这种前提,如何对它实现一个利用?

首先,我们要理解一下,在讲Redis的时候利用gopher协议,是对let is做一些类似于操作的行为,比如说设置值,然后去设置一个输出文件的位置,其实就是去使用命令在MySQL无密码的状态下,其实跟Redis基本是一个思路。也是通过gopher协议直接对它做一个操作,比如说我们现在已经确定了,SSRF数据库中有这个数据库。

你可以做一个登录,数据库中有个数据表,就是SSRF然后数据表中都存在一个flag,相当于我要去拿SSRF数据库中的SSRF张数据表的数据,正常情况下我们去登录去看到里面到底有哪些数据库,然后去查库里的表,我们就拿到数据了。


 gopher协议对MySQL的利用

图片1.png

总的来说登录数据库查询数据这样去操作,既然讲到gopher协议去发请求,请求肯定是有流量的。必然有在连接状态下做一个操作。MySQL数据库它是能够有远程连接的,所以存在一个远程链接的操作方法。

图片2.png

MySQL中如果用命令行下,你可以用-h后跟IP,以及设置端口等等,图形化界面可以去填IP地址,这账号密码就连上去了,连上去之后,要wireshark去抓数据包,就看到MySQL的一些操作内容。比如说刚才讲了我们整个操作过程首先登录数据库,在查询数据。

图片3.png

所以你会看这个地方连上去了,红色的数据发给数据库的数据,蓝色的数据数据库返还给我们的一个数据,下面就是一个实际的数据。只不过这个数据我们接下来,因为它是指通过MySQL给抓出来的,接下来的话我们通过用gopher协议去做一个发送。用curl模拟,转化过程在这里,后面就是一个整合过程比如说我这边去开一个MySQL、wireshark。因为Kali里面像MySQL、wireshark等工具,它都自带了,就方便一点。

图片4.png

注意一下,现在相当于用了本地的数据库,去查询的时候,发现这里其实是没有任何波动的,其实像我这些操作,是没有走网卡。像wireshark都是一些网卡所以说的话,要实现wireshark抓取MySQL的操作行为,必须让MySQL走网卡,就要MySQL做远程连接。MySQL -h 127.0.0.1 -u ssrf_user -p肯定能抓到流量,我们确认之后,我们就可以确认网卡,看哪个地方会有波峰波谷,确定好了登录进去。协议出来后去做查询,相当于我整个过程就已经完成了。

图片5.png

图片6.png

第1个,这是一个登录操作,这个地方你就会看到他的一些请求的数据。

图片7.png图片8.png

这边要做协议做转化,把它转化成gopher协议,接下来就是我们关注的一个重点内容了。之前经常提到的URL编码其实相当于转化成一些16进制的字符,16进制字符,理论上来说,用http请求数据做了URL编码之后,其实也是可以做传递的。

图片9.png

转化过程中的话,对这种数据做处理其实是会比较麻烦的,因为你直接把它当成点的话,其实不一定是真实的数据。最好用它的原始数据,选中它的原始数据做操作。要做登录操作,肯定要把登录的数据给拿出来,可以看一下我们如何转化

图片10.png图片11.png


有了请求数据之后,我们主要是对它来实现一个URL编码,现在已经是16进制状态了,其实你只要把两两分割就行了,这样已经两两拆分了。

图片12.png图片13.png

我这样子就可以了,相当于给他做了一整串url编码。这边就能够实现一个登录操作,直接先看一下它效果。接下来要做的就是查询语句,是包含在这么两个东西之内的。第1个00 00 00 03这是一个查询语句,然后select * from ssrf.ssrf 然后01 00 00 00 01你可以看到的其实是这个数据内容,这个其实是这边可以拷贝出来更对比一下。

图片14.png 

其实我们已经查询成功了,那么我们其实就只要把拷贝一下,发送过来,就已经能够成功了,其实整个思路转化过程还是比较简单的。再回过头来看,如果真的发现一个接口,要去做的第1件事情就是去测试,看能不能发请求。各种方法尝试一下,数据返回,说明对外能够发请求,80端口开的。可能它是一种curl_exec的PHP函数,第2种可能调用我们系统的curl,如果是系统curl。

图片15.png图片16.png

如果是第1种情况的话,考虑能否绕过,然后实现一个系统命令执行,这个就是比较容易好想法的,就是系统的命令执行。

如果是第2 种的话,基本上来说去执行系统命令就困难了,整体思路可能就变了,要看一下curl的本身的一个操作行为了,本身是能够发起发出一个命令的,你的思路就是集中在能够发请求的点上。


本文作者:牛油果 1472301220

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/128702.html

Tags:
评论  (0)
快来写下你的想法吧!

牛油果 1472301220

文章数:20 积分: 166

微信同QQ 1472301220 认证相关问题随便问我都知道 我是可爱的小姐姐

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号