题目:

首先根据题目EasySQL,猜测是SQL注入

知识点:

mysql语句中 and  or 和 () 的优先级

()>and>or

分析:

先只输入用户名admin看看会不会报错

只输入密码也是报这个错,说明这里用户名和密码都有值才能进行sql语句验证

要点:

1.有数据交互的地方容易产生注入点

2.sql注入的核心:将用户输入的数据拼接到代码中,并被当成 sql 语句执行

第一步——找到页面与数据库产生交互的地方

这里找到一个登陆点,先输入任意,点登陆

看到点登陆后跳转到check.php页面,并得到结果如下红字。可知此页面,即check.php这个页面会与数据库产生交互,并且接收的是登陆点的数据,也就是登陆点页面也会与数据库产生交互

那我们就知道了可与数据库产生交互的地方是登陆点

第二步——判断SQL语句闭合方式

现在判断他是什么闭合

先尝试注入单引号,输入用户名admin 密码admin’

报错了,拿到报错信息如下

判断SQL语句闭合方式的原理:

MYSQL数据库的包容性比较强。例如输入1)、1″、1-等,这些数字后面的字符不是闭合符,数据库也会把这些输入的错误数据转换成正确的数据类型。 但是,若输入的数字后面的字符恰好是闭合符,则会形成闭合。如果闭合后形成的sql语句是错误的,那么sql语句执行就会错误,从而造成页面显示错误。

分析:

输入1、1’、1″判断SQL语句闭合方式

一般情况下,SQL语句闭合方式是单引号

输入用户名:1 密码:1″时,没有发生SQL语句报错,即没有产生报错信息,只是提示我们输入的值是不对的(提示”Input your username and  password”),说明这里注入双引号并没有使sql语句报错,因此我们可以先假设SQL语句闭合方式是单引号

假设闭合方式是单引号,那么形成的sql语句是SELECT * FROM table_name WHERE username=” and password=”;

密码统一给1

username传入1时,形成的sql语句是SELECT * FROM table_name WHERE username=’1′ and password=’1′; 这样不会报错,闭合没问题,只是会提示账号密码不正确,“Input your username and  password” 不会有报错信息返回

username传入1″时,形成的sql语句是SELECT * FROM table_name WHERE username=’1″‘ and password=’1’; 这样也不会报错,形成的sql语句是正确的,因为单引号包裹一个双引号时,这个双引号当做普通字符处理,并没有引号作用

同理,当字符串内需要包含单引号时,除了使用转义字符外,也可以使用一对双引号来包括字符串。字符串内的单引号被当做普通字符

username传入1′时,形成的sql语句是SELECT * FROM table_name WHERE username=’1” and password=’1′; 这样的sql语句是错误的,因为第一个’和我们传入的’闭合了,剩下第三个单引号’没有东西来闭合,所以sql语句出错了,带入数据库产生了报错信息

结合实际尝试,我们输入1″ 1的时候没有报错,输入1′ 1的时候返回了报错信息,逆着推说明假设是成立的,可以推出SQL语句闭合方式是单引号

猜测后台的sql语句如下:

sql=”select * from user where username=’$username&’and password=’$password&'”

第三步——进行SQL注入

方法一:万能账号密码

一般来说,有登陆点的题,在判断完闭合方式后,可以优先尝试用万能账号密码登陆

使用万能密码尝试登陆

知道该数据库闭合方式为单引号闭合 所以此处使用单引号字符型的万能密码

‘ or 1=1 #

好文阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。