SQL注入

可以通过查看我的之前的blog:https://jhl328.github.io/2020/12/19/SQL%E6%B3%A8%E5%85%A5%E5%AE%9E%E9%AA%8C/

首先,查看source code

1

可以看到用的是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列

2

3

接下来可以查看所有的数据库,输入1 union select database(),user()

4

之后就能够通过上面相同的形式来查看表, union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

5

之后如果要查询当前表名的所有列,注意要进行转义,通过16进制可以实现

之后high在本质上只是通过⼀个中转的session,通过向这个session的url注⼊,报错回显显示在之前的那个url⽽已。其实做法都一样


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

安全攻防综合实验9 上一篇
安全攻防综合实验7 下一篇