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

第十一关
这里首先要明确一个概念:GET和POST的数据交流方式
GET是从服务器上获取数据,POST是向服务器传送数据。
从第十一关开始就是POST方式交互数据,也就是向服务器传送数据
表现了向网站服务器发送的请求包中所包含的数据,网站服务器会从请求包中提取额相应必要的数据和服务器数据库比对,从而生成返回包即我们在浏览器上所能见到的web网页信息
 
先分析源代码:
 
这里提取提交数据给变量赋值
这里把被赋值的变量加入预先写好的SQL语句模板中,制作SQL查询语句
通过mysql_query( )函数向数据库发出查询语句
获取结果
只要有结果( 不为空 )即输出
 
这里咱们的注入点就是通过 预先写好的SQL语句模板
闭合为:  '  #
即吧后半段密码匹配语句直接忽略掉即可注入
 
 
 
 
第十二关:
 
双引号出现报错,但是”#无反应,继续尝试
 
爆出全部数据库名,同理如是的进行渗透
 
 
 
 
第十三关:
 
这个闭合有点恶心就不试了直接看源码
通过闭合构造出了一个永远正确的用户名
 
但是这一关貌似只能登陆进去,不能爆出其他的用户名,因为:
没有回显,输出的东西被注释掉了
这一关不用报错语句只能登陆进去,不过现实中渗透的情况用admin登陆进去基本上也是管理员权限的账户了,也蛮好
 
 
 
 
第十四关:
 
闭合“”双引号,用报错语句
获取了数据库名,同理如是的渗透爆破
AND(SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(table_name AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0x7365637572697479 LIMIT 3,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)
表名,修改limit的值 一个个找
 
 
 
 
第十五关:
这里报错信息也被注释掉了,所以报错是不行了,只能上盲注,并且是基于时间的盲注,因为返回结果都是一样的
闭合为单引号 ’
admin' and if(1=1,sleep(5),1)#  用来测试闭合,要是闭合正确就会延时5秒钟
盲注有关于原理详见less-9的攻略,理论都是一样的,实在太麻烦了,就要知道他们的原理就可以了,具体实施还是利用SQLmap比较好一点
 
 
 
 
第十六关:
为此种闭合
 
 
 
 
第十七关:
为修改密码的关卡
 
首先看源码:
这个value值就是 uname提交的值,这个uname应该是没希望搞进去了,太恶心了...
再看几个陌生的函数:
长度限制16位
 
 
 
若不是纯数字,则做出如下循环:if( ... )
 
给value值增加..防止数据库攻击;
 
check_input太恶心了
很明显,在这里使用password字段进行注入是最好的选择
 
报错注入,爆出数据库名:
 
 
 
 
 
第十八关:
 
会返现出我的ip,应该是有个函数,可以尝试从这边注入,看看源码:
同样有个check_input过滤函数
很不幸,这两个都使用了过滤函数
 
那IP地址去哪儿了?
 
发现这里有个函数引用了请求包的头文件数据
原来是这样子,就可以在php里面
 
直接调用请求包数据,  将其视为一个变量;
此处输出ip地址
注意,此处输出的ip与数据库没有半点关系!!!
 
注意,此处有一个INSERT INTO插入信息语句
 
这里的ip使用的是remote_ip也就是路由ip,来自于更底层的协议数据,而user_agent使用的就是包头文件中的数据
 
但是,观察一下源码:
也就是说,只有在数据库查询匹配的情况下,才会想web网页echo我的uagent信息
emmmmmm..........
有点苛刻
就是这样子
 
也就是说,这里涉及到的http包头注入,只有在攻击者了解数据库部分内容,才能进行攻击(现实中碰到这种网站,其实也就是注册一个用户的问题而已),想数据库插入已知数据,便可以进行注入了;
 
观察源码,为单引号和单括号注入
 
这样就成功绕过了后续的语句,sql错误被输出
 
再次构造语句:User-Agent: 1',2,3')#
相当于sql语句为:
(加粗部分相当于被注释掉了)输出如下:
熟悉的报错场景
 
基于插件
extractvalue(1,concat(0x7e,version()))                  //爆出版本
 
AND(SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(DATABASE() AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=DATABASE() LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)               //爆出数据库名称
 
 
 
User-Agent: 1'    报错型注入位置   and '1'   )#
 
这里无非就是把逗号 换成了 and 然后在2回显点进行http包头注入,把原本需要写进数据库里面的插入SQL语句替换成我们需要执行的语句
 
这里需要注意的是,源码中  的部分数据带有单引号被括了起来,我们在sql注入语句使用的时候也要把相应的注入部分给同样的方式括起来,才能达到同样的执行效果
 
 
 
 
 
第十九关
首先输入正确的账号和密码,可以发现回显出的是
 
referer字段,也就是请求包中的:
 
在这儿被调用
此处被插入sql语句和echo出来
在插入处构造注入点:
 
 1'   报错型注入点  )#
这里就是爆了一个数据库名出来就行了,意思一样的
 
 
 
 
 
第二十关:
我们发现只要成功登陆过一回之后,凡是进入less-20就会跳到这个界面
——说明我们的cookie被存储到了数据库之中
 
先删掉我们的cookie,重新登陆一次,把每个包都抓下来:
第一个包是登录验证的请求包,将cookie存储在服务器同时在本地留下session信息
 
 
第二个包直接验证cookie,相互匹配,然后直接返回这个界面:
 
 
直接在第二个请求包下直接添加单引号测试闭合:
这一段直接出现报错
 
添加#闭合后:
 
到order by 4 开始报错,即为三列:
 
进来了:
 
爆了个库名:
自己整的我这关居然没看源码?!
嘻嘻嘻
 
 
疫情期间学习真的需要毅力,
 
但是,真的真的,
 

很适合学习

发布了25 篇原创文章 · 获赞 27 · 访问量 4125

猜你喜欢

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