SQL注入
可以通过查看我的之前的blog:https://jhl328.github.io/2020/12/19/SQL%E6%B3%A8%E5%85%A5%E5%AE%9E%E9%AA%8C/
首先,查看source code
可以看到用的是post
方法来获取参数,用户只能通过选择来进行,不能进行输入
当我们输入id(例如:1)之后,所构造的SQL的完整语句就是
SELECT first_name, last_name FROM users WHERE user_id = '1';
意思是在名为users
的表中找到user_id
这个列中内容为"1"
的那一条数据的first_name
以及last_name
的值
所以之后我们可以通过控制输入的参数id的值来调整执行的SQL语句
输入1' order by 1#
,此时php所要执行的SQL语句就变为了
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#';
此时SQL会把#后面内容屏蔽来避免语句错误,但是此时会发现提示语法错误,会发现是由于’ 被转义为了\,之后注入的时候只需要输入1 order by 1#
即可
同时测试1 order by 2#
,发现也成功,但是到了order by 3#的时候,会发现出现错误,说明这个名为users
的表应该是2列
接下来可以查看所有的数据库,输入1 union select database(),user()
之后就能够通过上面相同的形式来查看表, union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
之后如果要查询当前表名的所有列,注意要进行转义,通过16进制可以实现
之后high在本质上只是通过⼀个中转的session,通过向这个session的url注⼊,报错回显显示在之前的那个url⽽已。其实做法都一样
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!