sqli-labs-master前二十一到三十关过关总结

第二十一关:
通过抓包分析这里的cookie:
 
被base64加码算法加密了,懒得找闭合了直接看源码:
 
通过源码构造闭合,在某在线网站进行base64加密:
JykgdW5pb24gc2VsZWN0IDEsMiwzICM=
 
直接爆出来显示位
 
') union select 1,group_concat(schema_name),3 from information_schema.schemata #
加密后  
JykgdW5pb24gc2VsZWN0IDEsZ3JvdXBfY29uY2F0KHNjaGVtYV9uYW1lKSwzIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnNjaGVtYXRhICM=
 
这里需要注意的是网站后台的php算法直接用一个函数将uname值base64加密后
结尾都会有一个等于号 =
这个符号会被网页url加密,成为%3D
 
一样的操作,加了个密而已
 
 
 
 
 
第二十二关:
同样也是基于cookie的http报文头部注入,这里的源码如下:
 
所以要换一下闭合试试:
(o゜▽゜)o☆[BINGO!]
 
往下就不在阐述
 
 
 
 
第二十三关:
 
又回到了GET交互部分,我们开始的地方
 
观察源码;存在某陌生php函数:
原来是做了一个id的字符串过滤;
那我们该如何判断被过滤的是哪个字符呢?
 
先拿less-1作演示:
正常情况
 
非正常情况:
 
下面我们来试试less-23:
正常出现了,有问题,#被过滤掉了
如何判断被过滤字符?:
GET中?id=   (在这里键入测试字符串)  1  
那我们这里就是用and来构造一个可以查与语句的区间吧:
?id=-1' union select 1,2,3 and '1
 
?id=- 1 ' union select 1,(select group_concat(schema_name) from information_schema.schemata ),3 and ' 1 ' = ' 1
uploading.4e448015.gif转存失败 重新上传 取消
 
 
 
 
 
第二十四关:
简单的点了点,就是一个登录界面,进去以后可以修改密码;
在主界面还可以新建一个用户;
 
我们的目的是要获取用户的信息,或从而在仅仅已知用户名的情况下进行登录,或者获取到所有用户的信息类似于前面的爆出信息,也就是数据库中的信息;
 
所以我们需要找到与数据库的交互点:
 
前台登录就是简单的查找select匹配语句
 
新建用户,在后台肯定是一个insert的sql语句,在某一个表中新插入一条用户信息;这个应该是突破点
 
这个网页的所有文件,页面蛮多的:
 
首先看创建新用户的new_user.php页面:
这个块包含了一个新的界面:login_creat.php
 
这里的两个php界面应该是附属关系,在new-user中submit后,输入框中的数据会提交到login-creat.php中的函数执行(为什么不写一个php就行了呢非要写两个)
 
先排除预知错误后,开始想sql插入数据:
这里就是一个与数据库的交互点:
这里就是简单的insert语句,直接在数据库中插入数据,没有报错没有回显位,表面上看好戏并没有什么...可以有机可乘的地方...
 
继续探索其他的页面:
 
当我们成功登录之后,可以修改我们的密码,这里调用了 pass-change.php文件:
 
pass-change.php中的与数据库交互部分:
 
在这里,要是我们能够绕过某些sql语句,就可以在未知当前密码的情况下修改密码!
$sql = "UPDATE users SET PASSWORD='$pass' where username= '$username' and password='$curr_pass' ";
高亮部分是绕过部分,就可以绕过current-password
我们从username下手
 
攻击思路:
 
比如:当前账户admin密码123
我们想修改的它的密码,可以先创建新用户  admin'#    对这就是他的全名,包括了后面的字符
这样语句中后半部分就被绕过了,可以直接修改当前用户的密码
 
试试就试试:密码是111
 
成功
 
然后用这个奇葩的用户名登陆:
 
当前密码直接留空,新密码是admin
 
好了?
 
然后我门登出用户用damin试试看看密码是不是被修改了:
 
进来了:
 
大功告成
 
貌似这个手法只能修改密码,但是不能爆出所有用户的数据,
但是我们可以改变他们的数据,从而获得管理员权限
 
这里学习了一个新的概念: 一阶注入和二阶注入
    一阶注入原理 
      (1)一阶SQL注入发生在一个HTTP请求和响应中,对系统的攻击是立即执行的; 
      (2)攻击者在http请求中提交非法输入;
      (3)应用程序处理非法输入,使用非法输入构造SQL语句; 
      (4)在攻击过程中向攻击者返回结果。 
     二阶注入原理: 
      (1)攻击者在http请求中提交恶意输入; 
      (2)恶意输入保存在数据库中; 
      (3)攻击者提交第二次http请求;
        (4)为处理第二次http请求,程序在检索存储在数据库中的恶意输入,构造SQL语句; 
      (5)如果攻击成功,在第二次请求响应中返回结果。
 
我们这边是用的就是二阶注入。
 
 
 
 
 
第二十五关:
 
是不是要开始绕字符了,如此简洁大方的警告: and和or都没了
 
这样就制造了闭合
 
但是是用不了语句啊,没有and和or,先爆出一个数据库名:
 
 
 
总结:
&&  相当于and
Aandnd  双写
AND  大小写不区分
AnD  大小写混搭
...
 
第二十五关A  
 
略...
 
 
 
 
 
第二十六关:
简洁明了的警示
 
黑名单:
 
然而双写是可以绕过and
 
这样就可以用 ?id=1' and '1  的方法制造人工闭合,and前面就是插入语句的地方,往后的绕过就不在意义阐述注入方法了,只要能够把关键词打出来就算通关了
 
 
 
 
 
第二十六关A:
 
双写绕过
 
 
 
 
 
 
第二十七关:
 
 
 
 
 
 
 
 
第二十七关A:
妈的双写不管用了:
 
看看源码是怎么说的:
 
看来大小写不敏感还是可以插入成功
 
 
 
 
 
第二十八关:
同理可以
 
 
 
 
 
 
第二十八关A:
 
 
 
 
 
 
 
首先介绍一下29,30,31这三关的基本情况:
服务器端有两个部分:第一部分为tomcat为引擎的jsp型服务器,第二部分为apache为引擎的php服务器,真正提供web服务的是php服务器。工作流程为:client访问服务器,能直接访问到tomcat服务器,然后tomcat服务器再向apache服务器请求数据。数据返回路径则相反。
此处简单介绍一下相关环境的搭建。环境为ubuntu14.04。此处以我搭建的环境为例,我们需要下载三个东西:tomcat服务器、jdk、mysql-connector-java.分别安装,此处要注意jdk安装后要export环境变量,mysql-connector-java需要将jar文件复制到jdk的相关目录中。接下来将tomcat-files.zip解压到tomcat服务器webapp/ROOT目录下,此处需要说明的是需要修改源代码中正确的路径和mysql用户名密码。到这里我们就可以正常访问29-32关了。
 
有个问题:
index.php?id=1&id=2,你猜猜到底是显示id=1的数据还是显示id=2的?
 
Explain:apache(php)解析最后一个参数,即显示id=2的内容。Tomcat(jsp)解析第一个参数,即显示id=1的内容。
 
以上图片为大多数服务器对于参数解析的介绍。
此处我们想一个问题:index.jsp?id=1&id=2请求,针对第一张图中的服务器配置情况,客户端请求首先过tomcat,tomcat解析第一个参数,接下来tomcat去请求apache(php)服务器,apache解析最后一个参数。那最终返回客户端的应该是哪个参数?
Answer:此处应该是id=2的内容,应为时间上提供服务的是apache(php)服务器,返回的数据也应该是apache处理的数据。而在我们实际应用中,也是有两层服务器的情况,那为什么要这么做?是因为我们往往在tomcat服务器处做数据过滤和处理,功能类似为一个WAF。而正因为解析参数的不同,我们此处可以利用该原理绕过WAF的检测。该用法就是HPP(HTTP Parameter Pollution),http参数污染攻击的一个应用。HPP可对服务器和客户端都能够造成一定的威胁。
 
 
 
 
 
 
 
第二十九关:
 
开始进入防火墙关卡了
 
 
要是直接加闭合猜测的话:
 
额贼尼玛
 
试试上面那一节所示的HHP(http parameter pollution http参数污染)攻击:
注意我这里的参数,有点奇妙
 
往后就不再演示了,照猫画虎就行了 
 
 
 
 
 
 
第三十关:
 
 
换了个闭合而已
 
 
 
 
发布了25 篇原创文章 · 获赞 27 · 访问量 4124

猜你喜欢

转载自blog.csdn.net/Alexz__/article/details/104289042