sqli-labs通关大全(更新至Less60)_sqlilabs通关-CSDN博客https://blog.csdn.net/elephantxiang/article/details/120091507
MYSQL和其他数据库的主要区别是什么?
答:本质上相似
不同数据库的提交方法和数据类型相似吗?
答:不同数据库的提交方法(事务控制)和数据类型在概念上是相似的
不同数据库的提交方法相同吗?比如get,post,select?
答:不同数据库的提交方法(事务控制)和数据操作语言(如 SELECT
、INSERT
、UPDATE
、DELETE
)在概念上是相似的
关系型数据库和非关系型的主要区别在哪?
关系型数据库:
数据模型:基于关系模型,数据以表格形式存储,每个表由行(记录)和列(字段)组成。表 之间通过关系(如主键和外键)连接。
结构化数据:数据结构固定,表的结构(如字段类型和数量)在创建时需要预先定义。
示例:MySQL、PostgreSQL、Oracle、SQL Server。
非关系型数据库:
数据模型:不基于关系模型,数据可以以多种格式存储,如键值对、文档、列族或图形。
灵活的数据结构:数据结构灵活,不需要预先定义表结构,可以动态添加或修改字段。
示例:
键值存储:Redis、Riak。
文档存储:MongoDB、CouchDB。
列存储:Cassandra、HBase。
图形数据库:Neo4j、OrientDB。
数字,字符,搜索,JSON等
案例1:‘$name’ 会默认加上‘ ’
其中SQL语句干扰符号:',",,),} 等,具体需看写法
GET,POST,COOKIE,REQUEST,HTTP头等 这些都是数据提交方法
GET注入方式:
POST注入方式:
就算是post方法,原本使用get传递的参数也可以接收;
REQUEST方式可以接收GET,POST方式所传递的参数;
通过浏览器请求数据库的文件,浏览器会展示出文件的响应,burp的做用主要就是抓包、代理
判断sql注入要让union前的sql语句为flase,肯定用and
or 或者 查询的用户是不存在数据库中的
疑问:那使不使用and又不会影响结果? 可以让sql语句恒为假
思路:post注入 不行的话 可以尝试cookie注入
select注入 insert注入等 --+ 和-- 和#有什么作用
它们的作用是告诉数据库管理系统(DBMS)忽略这些符号后面的所有内容,直到该行的末尾
学习参考网站:漏洞存在数据包中,无法直观看到 即http头部注入
【SQL注入】cookie注入:原理、步骤、示例-CSDN博客https://blog.csdn.net/qq_53079406/article/details/125685994
如关键词屏蔽、内置条件函数
学习参考网站:
【干货】如何判断 Sql 注入点_判断是否存在sql注入-CSDN博客https://blog.csdn.net/qq_44275213/article/details/118892912
GET
、POST
、PUT
、DELETE
是 RESTful(Representational State Transfer,表现层状态转移) 风格的 HTTP 方法。它们是 REST 架构风格中用于定义资源操作的标准方法,每种方法对应不同的语义和用途。以下是它们的详细解释:
用途:用于请求获取资源。
特点:
是一种幂等操作,即多次请求的结果相同。
不会对服务器上的资源进行修改。
请求参数通常通过 URL 的查询字符串传递。
示例:
GET /users/123 HTTP/1.1
Host: example.com
这个请求表示获取用户ID为123的用户信息。
用途:用于向服务器提交数据,通常用于创建新资源。
特点:
是一种非幂等操作,多次请求可能会导致不同的结果(例如多次创建资源)。
数据通常通过请求体(Body)传递。
示例:
POST /users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "John Doe",
"email": "[email protected]"
}
这个请求表示创建一个新用户。
用途:用于更新或替换资源,也可以用于创建资源(如果资源不存在)。
特点:
是一种幂等操作,多次请求的结果相同(最终资源状态一致)。
数据通常通过请求体传递。
示例:
PUT /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "John Doe",
"email": "[email protected]"
}
这个请求表示更新用户ID为123的用户信息。
用途:用于删除资源。
特点:
是一种幂等操作,多次请求的结果相同(资源被删除后,再次删除不会改变结果)。
通常不携带请求体。
示例:
DELETE /users/123 HTTP/1.1
Host: example.com
这个请求表示删除用户ID为123的用户。
无状态:每个请求从客户端到服务器都应包含所有必要的信息来理解和处理请求。
统一接口:通过标准的HTTP方法(如GET、POST、PUT、DELETE)操作资源。
资源导向:将系统中的数据和功能抽象为资源,通过URI(Uniform Resource Identifier,统一资源标识符)来标识资源。
超媒体作为应用状态的引擎(HATEOAS):客户端通过超媒体链接动态发现可用的动作和资源
当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其SQL语句大概写法也能更好的选择对应的注入语句
select * from news where id=$id
insert into news(id,url,text) values(2,'x','$t')
update user set pwd='$p' where id=2 and username='admin'
delete from news where id=$id
盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。我们可以知道盲注分为以下三类:
基于布尔的SQL盲注-逻辑判断
regexp,like,ascii,left,ord,mid
基于时间的SQL盲注-延时判断
if,sleep
select * from member where id=1 and sleep(if(database()='',1,0)) ;
基于报错的SQL盲注-报错回显(共有12类报错注入) floor, updatexml, extractvalue
12种报错注入+万能语句 - 简书12种报错注入+万能语句 - 简书
ps 页面有两种正确或错误的显示就用报错注入。只有一种页面显示就用逻辑或者时间盲注
ps GET/pikachu//vul/sqli/sqli_del.php?id= 58+or+updatexml+concat(0x7e,database()),0) HTTP/1.1 用+ 代替空格 是为了防止HTTP/1.1被视为参数
先解密源数据,加上注入语句之后,再把整个语句加密
?id=MQ==&lname=YW5rdXnJyBhbmQgMT0yLS0n ‘(MQ== 编码方式)
第一步:插入恶意数据,第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
第二步:引用恶意数据,在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入
SET PASSWoRD='$pass' where username='dhakkan' # ’ and password='$curr pass'
原理:把查询到的内容通过load_file访问外部url 把数据带出去显示
用于解决盲注还无法回显的情况
工具地址:
http://ceye.io/
https://github.com/ADOOO/DnslogSqlinj
中转的目的就是为了解决类似于需要提交base64编码参数
词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加;表示语句结束。这样我们就想到了是不是可以多句一起使用
//注入需要管理员帐号密码,密码是加密,无法解密 --案例1
//堆叠注入进行插入数据,用户密码自定义的,可以正常解密登录
安全狗的基本防护规则
安全狗遵循他的拦截规则,放行之后数据库会执行完整的sql语句
大小写、加密解密、编码解码、等价函数、特殊符号、反序列化、注释符混用
/id=-1union select 1,database/**/(),3#
/?id=-1 union%23a%0Aselect 1,2,3# %23 == # %OA == \n
更改提交方式、变异(利用数据)
FUZZ大法
一种暴力破解的思路(模糊,批量测试)
数据库特性、垃圾数据溢出、
HTTP参数污染
参考网站: HTTP参数污染 - 珍惜少年时 - 博客园https://www.cnblogs.com/xishaonian/p/6209441.html 例如--> 127.0.0.1:8080/test.php?y=12&y=3 //获取到3
?id=1/**&id=-1%20union%20select%201,2,3%23*/
安全狗接收的是1/**&id=-1 union select 1,2,3#*/ 或1/**-1 union select 1,2,3#*/ 总之不符合过滤条件
数据库接受的是-1 union select 1,2,3#*/
当前执行语句: SELECT * FROM users WHERE id=-1 union select 1,2,3#*/ 参数污染
方式一:IP白奖单 从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪 造IP绕过的情况。 测试方法:修改http的header来bypasswaf X-forwarded-for X-remote-IP X-originating-IP x-remote-addr X-Real-ip
方式二:静态资源 特定的静态资源后缀请求,常见的静态文件(.j3.jpg.swf.css等等),类似白 名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求。 http://10.9.9.201/sql.php?id=1 http://10.9.9.201/sql.php/1.js?id=1 备注:Aspx/php只识别到前面的.aspx/.php后面基本不识别
方式三:ur1白名单 为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管 理后台。只要ur1中存在白名单的字符串,就作为白名单不进行检测。常见的ur1构造 姿势: http://10.9.9.201/sql.php/admin.ghp?id=1 http://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd http://10.9.9.201/../../../manage/../sql.asp?id=2 waf通过/manage/进行比较,只要uri中存在/manage/就作为白名单不进行检 测,这样我们可以通过/sql.php?a=/manage/&b=../etc/passwd 绕过防御规。
方式四:爬虫白名单 部分waf有提供爬虫白名单的功能,识别爬虫的技术一般有两种: 1、根据UserAgent2、通过行为来判断 UserAgent可以很容易欺骗,我们可以伪装成大企业的爬虫尝试绕过。 User Agent Switcher (Firefox 附加组件),下载地址: https://addons.mozilla.org/en-Us/firefox/addon/user-agent- switcher/
再看如下语句 /!50001 selectfrom test */; 这里的50001表示假如数据库是5.00.01以上版本,该语句才会被推行 因此固然你的mysqldump出来的成立view的语句在解释里,实际上它是会被推行的
20union%20all%23%0a%20select%201,2,3%23
SQLMap的使用:
SQLmap使用教程图文教程(非常详细)从零基础入门到精通,看完这一篇就够了。-CSDN博客https://blog.csdn.net/shanguicsdn111/article/details/142088764
python sqlmap. py -u "http://39. 96. 44. 170/sqlilabs/Less-2/?id=1" --tamper=rdog. py --proxy=http://127.0. 0. 1:8888 --random-agent #自定义注入的脚本 --tamper
python sqlmap. py -u "http://39. 96. 44. 170/sqlilabs/Less-2/?id=1" --tamper=rdog. py --proxy=http://127. 0. 0. 1:8888 --user-agent="Mozilla/5.0 (compatible; Baiduspider/2. 0;+http: //www. baidu. com/search/spider. html) " #方式一 伪装UA 搜索引擎,爬虫白名单
python sqlmap. py -u "http://39. 96. 44.170/sqlilabs/Less-2/?id=1" --tamper=rdog. py --proxy=http://127.0.0. 1:8888 --delay #方式二 伪装正常访问 延时
python sqlmap. py -r 3. txt --tamper=rdog. py --proxy=http://127.0.0.1:8888 --tables #-r 使用自己写的文件代理 例如,请求头 使用中转包
3. txt如下
GET /sqlilabs/Less-2/?id=1 HTTP/1.1|
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0;
+ http://www.baidu.com/search/spider.html)
Accept: */*
Accept-Encoding: gzip, deflate
Connection: close