Sqli-labs-Less-11
前言:
SQL注入的三个条件:
①参数可控;(从参数输入就知道参数可控)
②参数过滤不彻底导致恶意代码被执行;(需要在测试过程中判断)
③参数带入数据库执行。(从网页功能能大致分析出是否与数据库进行交互)
①参数可控;(从参数输入就知道参数可控)
②参数过滤不彻底导致恶意代码被执行;(需要在测试过程中判断)
③参数带入数据库执行。(从网页功能能大致分析出是否与数据库进行交互)
利用 order by 来测列数
测显位:mysql用1,2,3,4
Mysql获取相关数据:
一、数据库版本-看是否认符合information_schema查询-version()
二、数据库用户-看是否符合root型注入攻击-user()
三、当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_os
四、数据库名字-为后期猜解指定数据库下的表,列做准备-database()
SQL-联合查询注入(UNION query-based)
sqlmap 会在查询参数中添加以
UNION ALL SELECT
开头的合法 SQL 语句。当 Web 应用在for
循环中直接传递SELECT
语句的查询结果,或采用了类似的方法将查询结果在页面中逐行输出时,这项技术会生效。当查询结果不使用for
循环进行全部输出而只输出首个结果,sqlmap 还能够利用偏(单入口)联合查询 SQL 注入漏洞。
sql注入——布尔型盲注(Boolean-based blind)
sqlmap 会替换或添加 SQL 语句到 HTTP 请求的查询参数里面,相关的 SQL 语句可能是合法的 SELECT 子查询,也可以是任意用于获取输出数据的 SQL 语句。针对每个注入检测的 HTTP 响应,sqlmap 通过对比原始请求响应的 headers/body,从而逐个字符地推导出注入语句的输出。或者,用户可以预先提供一个字符串或正则表达式,用于对正确页面结果进行匹配。sqlmap 内部实现了二分算法,使得输出中的每一个字符可在最多 7 个 HTTP 请求内被获取。如果请求响应结果不是简单的明文字符集,sqlmap 会采取更大范围的算法来检测输出。
#手工注入
从第11题开始,请求方式有所变化,前10题get传参,11题开始于post传参了
根据题目看,像一个登录页面,尝试使用布尔型盲注测试能否登录网站
1. Username输入a' 测试是否会有报错,burp抓包
报错:syntax to use near ''a'' and password='' LIMIT 0,1' at line 1
分析可知,username和password 的条件判断在一个where语句中;整条语句使用单引号闭合。
所以,payload分析输入一个username值然后使用单引号'闭合前面的语句,然后为了使where语句条件成立,加上一个or 1=1 ,-- 注释语句使后面的语句直接注释password不用判断。只需填写username。
即payload:
a' or 1=1--
成功登录!!!
尝试漏洞利用,使用order by 测试列数 当值=1时正常回显
当值为3时报错显示,所以列数为2
根据列数使用union联合查询测试显示位:
输入:-admin' union select 1,2--
发现有两个显示为,进行利用,爆出当前用户名及当前数据库名称
成功利用漏洞!!!
#自动化注入-SQLmap工具注入
SQLmap用户手册:用法 - sqlmap 用户手册
由于这题是post请求,所以先使用burp进行抓包,然后将数据包存入txt文件中打包 用-r 选择目标txt文件
python sqlmap.py -r data.txt --current-db --current-user
爆出当前用户名及当前数据库名称