(一)SQL注入—基础


  • 在SQL注入的过程中,如果网站的Web服务器开启了错误回显,则会为攻击者提供极大的便利,比如攻击者在参数中输入一个单引号', 引起执行查询语句的语法错误,服务器直接返回了错误信息。
  • 下面我们来看个例子 靶场由知识盒子提供,地址:https://tofu.exeye.run/sql/log_page
  • 这是一个登录页面

登录界面

  • 这个登录界面给了我们默认的账户名:staff_jack
  • 然后我们随便输入一个密码,开启抓包,点击登录

  • 将这个包发送到Repeater,直接发送,我们可以看到响应的信息提示账号密码错误

  • 那么我们将123直接改成一个单引号'看看能不能造成语法错误,让他回显错误
  • 点击Go收到响应,可以看到确实收到错误代码,而且提示了sql语法错误

  • 所以这个地方可能存在sql注入,接下来我们可以尝试在语句中加入or‘1=1’让语句无条件返回正确值

  • 那么就应该在密码处输入

  • 123'or 1=1#  
    #这里123后面的单引号是为了闭合前面的引号,#是为了注释掉后面的引号
    #所以构造的语句完整是
    select s_user,s_power from staff where s_user ='staff_jack' and s_psw ='123' or 1=1
  • 改完密码后提交后响应内容是这样的

  • 可以看到返回的code值为0,但是权限不够,直接登录网站也可以看到

  • 我猜想响应内容中,s_power字段应该就是用来标记权限用的

  • 既然可以注入’1=1‘,那为什么不可以直接注入update的语句将权限字段改为1呢

  • 所以要修改权限,payload就应该改成这样:

  • 123' OR '1=1';update staff set s_power=1 where s_user='staff_bob'#
    这段的意思从表staff中找出用户staff_bob,然后将权限字段s_power=1改为1
  • 接下来再看看响应内容,可以看到返回的是404 not found

  • 返回404,说明我们的代码可能执行成功了,导致后端没有返回值
  • 接着我们可以尝试下重新登录账号,成功修改权限拿到flag


  • 通过分析上述操作,其实我们可以更进一步,修改已经有的密码或者创建自己的管理员账号
  • 那么就来试试吧

  • 首先尝试构造语句,尝试直接修改staff_bob的密码

  • 123' OR 1=1;update staff set s_psw='123456' where s_user='staff_bob' #
    #这段的意思是从表中找出用户staff_bob,然后将密码设置为123456
  • 然后尝试用123456登录,登录成功,但是不知道为啥,权限又变回了0,可能是靶场的规则吧

  • 接着我们试试能不能直接创建一个账户

    • 目前已经知道的字段有s_users_psws_power

    • 构造payload

      • 123' OR 1=1;INSERT INTO  staff (s_user,s_psw,s_power) VALUES ('wkai','wkai','1')#
        #向表staff中插入用户名wkai,密码wkai,权限1
      • 最后再用wkai这个账号登录,发现不仅能登录,而且权限也直接是1


文章作者: wkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wkai !
 上一篇
(二)SQL注入—sqlmap注入 (二)SQL注入—sqlmap注入
上篇我们说到如何利用报错信息进行sql注入,那么本篇我们将会使用工具sqlmap对网站进行爆库 还是上篇的靶场,靶场由知识盒子提供,地址:https://tofu.exeye.run/sql/log_page 因为登录发出的是POS
2020-08-05
下一篇 
(六)跨站脚本XSS之数据库存储 (六)跨站脚本XSS之数据库存储
一 靶场说明 本篇是对存储型xss的认识和利用。绕过过滤的方法也用到了前面介绍过的几个技巧。除此之外,我还分析了下靶场的实现原理。 需要用到的技能:拼接绕过,引号转换 靶场由知识盒子提供,靶场地址:https://tofu.exeye.
2020-07-30
  目录