Web for Pentester ii -- sql injection

    @noneface  28 Aug 2016


PentesterLab

这是一个提供渗透测试课程的网站,并且提供了许多漏洞环境演练系统。

Web for Pentester ii

漏洞环境演练系统。

存在诸如:

  • sql injection
  • Authentication issues
  • Captcha
  • Authorization
  • Mass-Assignment attacks
  • Randomness Issues
  • MongoDB injections

sql injection

Example 1

通过输入框提交数据,但不是POST方式提交,而是GET。

现在输入框提交一个 ‘ 测试看看。

会有报错提示

’’’’ AND password=’’’ at line 1:

并且会将执行的语句显示出来

SELECT * FROM users WHERE username=''' AND password=''

这样就可以利用最简单的在Username输入: ‘ or 1#

进行语句的闭合并且注释掉AND后面的语句。

达到后面条件为TRUE。

最后执行的语句也就类似于:

SELECT * FROM users

最后的结果为:

Example 2

在输入框内提交 ‘做测试。

显示的结果和Example里面的一样。

但是又不可能两道题目都一样吧。

在Username提交:’ or 1#

直接回到最初的页面,也没有错误提示。

可以肯定的是,语句是被正确执行了。

再来分析一下。

作为一个登录的地方。

一般会是:

SELECT * FROM USER WHRER USERNAME='' AND PASSWORD=''

或者是:

SELECT * FROM USER WHRER USERNAME='' AND PASSWORD='' LIMIT 0,1

这两者的差别只在于最后的limit。

第一条会返回所有满足条件的查询,

第二条只会返回满足条件的查询的里面的一条结果。

设想一下如果原作者在sql语句返回结果集上做手脚呢?

也就是去判断返回结果是否唯一。

那么试试注入语句,让返回结果只有一条。

也就是在Username框提交:’ or 1 limit 0,1 #

最后执行的语句会是:

SELECT * FROM users WHERE username='' or 1 limit 0,1 # ' AND password=''


Follow your heart  |   nonefacesay@gmail.com