NSSCTF [第五空间2021]yet_another_mysql_injection,[HNCTF 2022 WEEK2]ez_ssrf
NSSCTF[NSSROUND 8]yet_another_mysql_injection
一共两种解法,爆破密码 和 quine注入,本文只介绍第一种方法,第二种方法网上也有很多脚本
知识:
- % 只在 SQL 的 LIKE 语句中生效
- _ 只匹配一个字符
- 在sql里面匹配前一个字符x次
爆破密码password
经过尝试,发现过滤了空格和等号,用/**/和like来绕过,一个字母一个字母来爆破,构建查询语句:
1'or/**/password/**/like/**/'{flag+i}%'#
#的作用是匹配还未爆破到的密码,如果用*则只能匹配单个字母,所以用#匹配后面所有的字符
脚本:
1 | import requests |
去掉末尾的11111即可拿到flag
HNCTF 2022 WEEK2 ez_ssrf
首先用disearch扫一下看看
发现有flag.php打开后显示localhost
知识:
- fsockopen() 函数是用于建立一个 socket 连接,一般出现这个函- 数都是有ssrf的
- fsockopen(hostname, port, errno, errstr, timeout)
- 允许连接另一个服务器
- 设置主机为127.0.0.1 从而造成ssrf
- 参数:
- hostname 如果安装了OpenSSL,那么你也许应该在你的主机名地- 址前面添加访问协议ssl://或者是tls://,从而可以使用基于- - TCP/IP协议的SSL或者TLS的客户端连接到远程主机。
- port 端口号。如果对该参数传一个-1,则表示不使用端口,例如- unix://。
- errno 如果errno的返回值为0,而且这个函数的返回值为 - - - - FALSE ,那么这表明该错误发生在套接字连接(connect())调用- 之前,导致连接失败的原因最大的可能是初始化套接字的时候发- 生了错误。
- errstr 错误信息将以字符串的信息返回。
- timeout 设置连接的时限,单位为秒。
1 | <?php |
出来是
1 | R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo= |
为什么不用在线base64编码呢,因为tmd格式一直不过,\r\n加了不行
那为什么port是80端口呢,因为80端口是 HTTP 服务的默认端口,其他的试了没回显
1 | ?host=127.0.0.1&port=80&data=R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo= |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 乃敢与君绝!