php使用sqli获取一条记录,sqli-labs-php7记录随笔1

sqli-labs-php7 Lesson1:

7355dff89a5a

网页叫我们传个ID值给服务器,实际访问网页http://127.0.0.1/sqli-labs-php7/Less-1/?id=1,会返回给我们用户id=1的用户名及密码:

7355dff89a5a

很明显,sql语句格式是select name, password from users where id = '1';(PS:或许是id=1?id是数值型还是字符型?)

在http://127.0.0.1/sqli-labs-php7/Less-1/?id=1最后加个‘,报sql语句错误:

7355dff89a5a

这里拿Lesson 2的报错信息比较:

7355dff89a5a

可以推断Lesson 1是字符型注入,而Lesson 2是整形注入,因为最后加了',两者的语句分别为select name, password from user where id = '1'' LIMIT 0,1; 以及select name, password from user where id = 1' LIMIT 0,1; 错误信息和语句形式吻合。

既然报错,就很明显存在sql注入漏洞。参数显示在URL,说明与服务器交互使用的方法是GET,所以这是一个GET交互的报错型注入。接下来的工作是通过URL拼接sql语句,来找出服务器使用的数据库名、表名、字段名、以及整条记录等等信息(sql语句忘得差不多,得复习复习)。

网上的方法是使用union语句,具体做法是http://127.0.0.1/sqli-labs-php7/Less-1/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+,类似这样。

稍微解释一下,这里注入后的sql语句为select name, password from users where id = '0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() -- LIMIT 0,1;

单引号闭合了对id字段为0记录的查询,然后使用union语句输入想要获取的所有数据库名称,group_concat()函数的功能是把多个字段组合成1个,之所以多两列固定值1,3是因为union需要两条select语句字段数相同(有一点不明白的是为什么id需要等于0?id为有效值时,只返回此id对应的name,password),最后的-- LIMIT 0,1将LIMIT限制注释掉了。

这里有个有趣的知识点,为什么URL上明明是--+,到了sql变成了--0x20了呢?

根据RFC-1738标准和RFC-2396标准,‘ ’所对应的URL编码是不一样的,1738标准即HTML4.0.1所用的标准,而RFC-2396标准只有JS会使用到。所以如果用JS编写转换URL编码的程序,会将‘ ’转成0x20,但主流的URL编码都是将‘ ’转成‘+’!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值