sql语句
SELECT schema_name FROM information_schema.schemata
查询结果
TABLES
TABLES表存储表名及表所属数据库,字段为TABLE_NAME、TABLE_SCHEMA
TABLES表
一般是查询当前数据库或者从上面得到的数据库中指定一个。
查询当前数据库sql语句
SELECT table_name FROM information_schema.`TABLES` WHERE table_schema=database()
当前数据库的表
指定数据库sql语句,以pikachu为例
SELECT table_name FROM information_schema.`TABLES` WHERE table_schema='pikachu'
结果
COLUMNS
COLUMNS表存储列名及所属数据库名、所属表名,字段为COLUMN_NAME、TABLE_SCHEMA、TABLE_NAME
COLUMNS表
查询当前表的列,sql语句
SELECT COLUMN_NAME FROM information_schema.columns WHERE table_name=table_name
结果
查询指定表的列,通过上面,我们已经知道pikachu数据库有表users,以这个为例。
sql语句
SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='pikachu' AND table_name='users'
结果
字段值
通过利用这个数据库我们已经知道了所有的数据库、表、列,接下来我们就可以得到想要的数据了。以数据库pikachu的users表的username和password为例。
sql语句
SELECT username,password FROM pikachu.users
结果:
结果
当然,实际的sql注入没有这么简单,本篇文章列出所有知识点,接下来的文章以本地靶机讲解几种注入技术,然后再分析dvwa的过滤代码以及绕过,都学完后差不多就可以解决中低级的sql注入问题,然后可以去一些CTF在线靶场来进一步提高了。
常用函数
在上面的Sql语句中,我们提到了databse(),这是mysql的函数,接下来我们就看看在sql注入时常用到的函数。
基本函数
1.返回当前使用数据库的用户
user()/system_user()/current_user()/session_user()
2. 返回当前数据库的版本
version()/@@version
3. 返回当前使用的数据库
database()
4. 返回当前数据库所在位置
@@datadir
5. 返回当前操作系统版本
@@version_compile_os
6.将多个字符串连接成一个字符串
concat(s1,s2…sn)
7.将多行字符串拼接成一行
group_concat()语法如下:
group_concat(
[DISTINCT] 要连接的字段
[Order BY 排序字段 ASC/DESC]
[Separator ‘分隔符’]
)
主要用来处理一对多的查询结果,通常会结合GROUP BY一起使用。
盲注(字符串处理函数)
length(s) :返回目标字符串的长度
常用于盲注时数据库等信息的判断,sql语句
select length(database());
结果
substr(),substring(),mid():用法基本相同,截取字符串的一部分,会一个就可以了
SUBSTR(s, start, length)
SUBSTRING(s, start, length)
MID(s, start, length)
从字符串s的start(包含且>=1)位置开始截取length个字符。
常用于盲注时截取字符串的某一个字符,判断是什么,例如使用substr(database(),1,1)获取数据库的第一个字符进行判断,再结合length函数,最后拼接成整个数据库名。
ascii(s)/ord(s):返回字符串s的第一个字符对应的ASCII码,记一个就可以了
常用于盲注,结合substr函数
sql语句
SELECT ascii(substr(database(),1,1))
结果
再查询ascii码表就知道105对应的是字符i。
char(num):返回ASCII码对应的字符
上面函数的逆函数
sql语句
SELECT char(97)
97对应的是字符a
结果
hex():将目标字符串装换成16进制格式的数据
select hex(“dvwa”)
返回结果:70696B61636875
unhex():将16进制格式的数据装换成原字符串
语句:unhex(64767761)
解释:返回结果:dvwa
left()/right() :从规定字符串的左边/右边开始截取字符串
LEFT(s,n) 、RIGHT(s,n)
从字符串s左/右边开始截取n位字符串
报错注入
UPDATEXML函数
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,一般写1就可以了
第二个参数:XPath_string (Xpath格式的字符串) ,不必了解Xpath语法,我们一般是写sql语句查询表名等,通过报错信息显示出来。
第三个参数:new_value,String格式,替换查找到的符合条件的数据,一般写1就可以了
作用:改变文档中符合条件的节点的值
还有floor、extractvalue等函数也可以用于报错注入
时间盲注
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!