二次注入

本文最后更新于:2024年4月6日 下午

学到一个新姿势叫二次注入

意思大抵就是说又两个操作,先写入数据到数据库,然后再利用写入的数据进行数据库注入。

我说不太清楚,这里引用一下大佬的博客

二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。二次注入,可以概括为以下两步:

  • 第一步:插入恶意数据
    进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
  • 第二步:引用恶意数据
    开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。

配合下图可以有更好的理解:

img****

作者:Ackerzy
链接:https://www.jianshu.com/p/3fe7904683ac
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

大抵就是这么个意思,现在回想起来以前也碰到过好多次类似的情况,完全没有考虑到数据库注入上面。

来练手一波

image-20220426211435441

这个题目很符合这个模式噢,一个登录一个注册。

通过注册来向数据库写入数据

正常情况下登录是这样image-20220426211543839

他这里这个简介的数据应该是有个语句类似于select {username} from xxx这里没有对username进行处理直接引入了。

构造一个payload试试

1
union select database()#

用这个当用户名

截屏2022-04-26 21.18.30

可以看到啊,简介这里查到数据了

接下来就是正常三步走了

1
'union select flag from flag#

最后查一下数据

image-20220426212013485

学到新姿势了记录一下


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!