第二十一关:
通过抓包分析这里的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
转存失败 重新上传 取消
第二十四关:
简单的点了点,就是一个登录界面,进去以后可以修改密码;
在主界面还可以新建一个用户;
我们的目的是要获取用户的信息,或从而在仅仅已知用户名的情况下进行登录,或者获取到所有用户的信息类似于前面的爆出信息,也就是数据库中的信息;
所以我们需要找到与数据库的交互点:
前台登录就是简单的查找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,先爆出一个数据库名:
http://192.168.43.221/sqli-labs-master/Less-25/?id=%27%20union%20select%201,group_concat(schema_name),3%20from%20infoorrmation_schema.schemata%20--+
总结:
&& 相当于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参数污染)攻击:
注意我这里的参数,有点奇妙
往后就不再演示了,照猫画虎就行了
第三十关:
换了个闭合而已