安全矩阵

 找回密码
 立即注册
搜索
楼主: Pluto

李佳瑞学习日记

[复制链接]

7

主题

134

帖子

562

积分

高级会员

Rank: 4

积分
562
 楼主| 发表于 2020-10-21 22:21:12 | 显示全部楼层
本帖最后由 Pluto 于 2020-10-21 22:24 编辑

SQL注入-堆叠注入(堆查询注入)

原文地址;http://www.sqlinjection.net/stacked-queries/   
Stacked injection 汉语翻译过来后,国内有的称为堆查询注入,也有称之为堆叠注入。个人认为称之为堆叠注入更为准确。堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据和调用存储过程的目的。这种技术在SQL注入中还是比较频繁的。
原理
在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
堆叠注入的局限性

堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。


虽然我们前面提到了堆叠查询可以执行任意的sql语句,但是这种注入方式并不是十分的完美的。在我们的web系统中,因为代码通常只返回一个查询结果,因此,堆叠注入第二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果的。因此,在读取数据时,我们建议使用union(联合)注入。同时在使用堆叠注入之前,我们也是需要知道一些数据库相关信息的,例如表名,列名等信息。

网上的教程


从常用数据库角度出发,介绍几个类型的数据库的相关用法。数据库的基本操作,增删查改。以下列出数据库相关堆叠注入的基本操作。

  • 一. Mysql

(1)新建一个表 select * from users where id=1;create table test like users;


执行成功,我们再去看一下是否新建成功表。


  • 2. 删除上面新建的test表select * from users where id=1;drop table test;
  • 3. 查询数据select * from users where id=1;select 1,2,3;加载文件  select * from users where id=1;select load_file('c:/tmpupbbn.php');
  • 4. 修改数据select * from users where id=1;insert into users(id,username,password)

values('100','new','new');


  • 二. Sql server
  • 1. 增加数据表select * from test;create table sc3(ss CHAR(8));

  • 2. 删除数据表select * from test;drop table sc3;

(3)查询数据select 1,2,3;select * from test;[backcolor=rgba(255, 255, 255, 0.9)]
  • 4. 修改数据select * from test;update test set name='test' where id=3;

  • 5. sqlserver中最为重要的存储过程的执行select * from test where id=1;exec master..xp_cmdshell 'ipconfig'
  • 三. Oracle
  • 上面的介绍中我们已经提及,oracle不能使用堆叠注入,可以从图中看到,当有两条语句在同一行时,直接报错。无效字符。后面的就不往下继续尝试了。

  • 四. Postgresql
  • 1. 新建一个表    select * from user_test;create table user_data(id DATE);

可以看到user_data表已经建好。

  • 2. 删除上面新建的user_data表select * from user_test;delete from user_data;

  • 3. 查询数据select * from user_test;select 1,2,3;

  • 4. 修改数据 select * from user_test;update user_test set name='modify' where name='张三';


【注】本文转自:https://www.bbsmax.com/A/kvJ3Eq9Xdg/



回复

使用道具 举报

7

主题

134

帖子

562

积分

高级会员

Rank: 4

积分
562
 楼主| 发表于 2020-10-30 00:08:55 | 显示全部楼层
sql注入绕过注释符号绕过

常用的注释符有

  1. -- 注释内容
  2. # 注释内容
  3. /*注释内容*/
  4. ;
复制代码

实例

  1. mysql> select * from users -- where id = 1;
  2.     -> ;
  3. +----+----------+----------+
  4. | id | username | password |
  5. +----+----------+----------+
  6. |  1 | test1    | pass     |
  7. |  2 | user2    | pass1    |
复制代码
  1. mysql> select * from users # where id = 2;
  2.     -> ;
  3. +----+----------+----------+
  4. | id | username | password |
  5. +----+----------+----------+
  6. |  1 | test1    | pass     |
  7. |  2 | user2    | pass1    |
复制代码
  1. mysql> select * from users where id = 3 /*+1*/
  2.     -> ;
  3. +----+----------+----------+
  4. | id | username | password |
  5. +----+----------+----------+
  6. |  3 | test3    | pass1    |
  7. +----+----------+----------+
  8. 1 row in set (0.00 sec)
复制代码
大小写绕过

常用于 waf的正则对大小写不敏感的情况,一般都是题目自己故意这样设计。
例如:waf过滤了关键字select,可以尝试使用Select等绕过。

  1. mysql> select * from users where id = -1 union select 1,2,3
  2.     -> ;
  3. +----+----------+----------+
  4. | id | username | password |
  5. +----+----------+----------+
  6. |  1 | 2        | 3        |
  7. +----+----------+----------+
  8. 1 row in set (0.00 sec)

  9. #大小写绕过
  10. mysql> select * from users where id = -1 union Select 1,2,3;
  11. +----+----------+----------+
  12. | id | username | password |
  13. +----+----------+----------+
  14. |  1 | 2        | 3        |
  15. +----+----------+----------+
复制代码
内联注释绕过

内联注释就是把一些特有的仅在MYSQL上的语句放在 /*!...*/ 中,这样这些语句如果在其它数据库中是不会被执行,但在MYSQL中会执行。

  1. mysql> select * from users where id = -1 union /*!select*/ 1,2,3;
  2. +----+----------+----------+
  3. | id | username | password |
  4. +----+----------+----------+
  5. |  1 | 2        | 3        |
  6. +----+----------+----------+
复制代码
双写关键字绕过

在某一些简单的waf中,将关键字select等只使用replace()函数置换为空,这时候可以使用双写关键字绕过。例如select变成seleselectct,在经过waf的处理之后又变成select,达到绕过的要求。

特殊编码绕过
  • 十六进制绕过
    1. mysql> select * from users where username = 0x7465737431;
    2. +----+----------+----------+
    3. | id | username | password |
    4. +----+----------+----------+
    5. |  1 | test1    | pass     |
    6. +----+----------+----------+
    复制代码

  • ascii编码绕过
    Test 等价于
    CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)
    tip:好像新版mysql不能用了
  • 空格过滤绕过

    一般绕过空格过滤的方法有以下几种方法来取代空格

    1. /**/
    2. ()
    3. 回车(url编码中的%0a)
    4. `(tap键上面的按钮)
    5. tap
    6. 两个空格
    复制代码
    实例
    1. mysql> select/**/*/**/from/**/users;
    2. +----+----------+----------+
    3. | id | username | password |
    4. +----+----------+----------+
    5. |  1 | test1    | pass     |
    6. |  2 | user2    | pass1    |
    7. |  3 | test3    | pass1    |
    8. +----+----------+----------+
    复制代码
    1. #注意括号中不能含有*
    2. mysql> select(id)from(users);
    3. +----+
    4. | id |
    5. +----+
    6. |  1 |
    7. |  3 |
    复制代码
    1. mysql> select
    2.     -> *
    3.     -> from
    4.     -> users
    5.     -> where
    6.     -> id = 1;
    7. +----+----------+----------+
    8. | id | username | password |
    9. +----+----------+----------+
    10. |  1 | test1    | pass     |
    复制代码
    1. mysql> select`id`from`users`where`id`=1;
    2. +----+
    3. | id |
    4. +----+
    5. |  1 |
    复制代码
    过滤or and xor not 绕过
    1. and = &&
    2. or = ||
    3. xor = | # 异或
    4. not = !
    复制代码
    过滤等号=绕过
    • 不加通配符的like执行的效果和=一致,所以可以用来绕过。

    正常加上通配符的like:

    1. mysql> select * from users where username like "test%";
    2. +----+----------+----------+
    3. | id | username | password |
    4. +----+----------+----------+
    5. |  1 | test1    | pass     |
    6. |  3 | test3    | pass1    |
    复制代码
    不加上通配符的like可以用来取代=
    1. mysql> select * from users where id like 1;
    2. +----+----------+----------+
    3. | id | username | password |
    4. +----+----------+----------+
    5. |  1 | test1    | pass     |
    6. +----+----------+----------+
    复制代码



回复

使用道具 举报

7

主题

134

帖子

562

积分

高级会员

Rank: 4

积分
562
 楼主| 发表于 2020-11-6 23:33:05 | 显示全部楼层
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。xss是一种发生在web前端的漏洞,所以其危害的对象也主要是前端用户
XSS攻击的主要途径
XSS攻击方法只是利用HTML的属性,作各种的尝试,找出注入的方法。现在对三种主要方式进行分析。
1.第一种:对普通的用户输入,页面原样输出,用户通过对JSCODE的伪装,经过一些操作就会跳出一个木马界面,取得登录用户的Cookie.
2.第二种:在代码区里有用户输入的内容
原则就是,代码区中,绝对不应含有用户输入的东西。
3.第三种:允许用户输入HTML标签的页面。
用户可以提交一些自定义的HTML代码,这种情况是最危险的。因为,IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,又可以使用”/”连接16进制字符串来写,使得过滤变得异常复杂,如下面的四个例子,都可以在IE中运行。
三.跨站脚本漏洞常见类型
1.反射型XSS:
<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
2.存储型XSS:
<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
3.DOM型XSS:
基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
四.跨站脚本漏洞测试流程
1.在目标站点上找到输入点,比如查询接口,留言板等
2.输入一组"特殊字符+唯一识别字符",点击提交后,查看返回源码,是否有做对应的处理。
3.通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合)
4.提交构造的脚本代码以及各种绕过姿势,看是否可以成功执行,如果成功执行则说明存在xss漏洞
Tips:
1.一般查询接口容易出现反射型xss,留言板容易出现存储型xss
2.由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效或者环境限制了执行。
3.通过变化不同的script,尝试绕过后台过滤机制。


回复

使用道具 举报

7

主题

134

帖子

562

积分

高级会员

Rank: 4

积分
562
 楼主| 发表于 2020-11-10 00:38:02 | 显示全部楼层
XSS 以及相关学习内容(JavaScript 和php)
XSS攻击需要具备两个条件:需要向web页面注入恶意代码;这些恶意代码能够被浏览器成功的执行。
XSS的实质其实是HTML代码与Javscript代码的注入。但由于XSS的攻击对象是与客户对等的Browser端
DOM简介
文档对象模型(Document Object Model),即大名鼎鼎的DOM。
DOM可以被认为是一种通过将页面元素以对象的树形方式表现,以便由Javascript组织处理的实现方法。
DOM 节点

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

  • 整个文档是一个文档节点
  • 每个 HTML 元素是元素节点
  • HTML 元素内的文本是文本节点
  • 每个 HTML 属性是属性节点
  • 注释是注释节点
HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:
常用的DOM方法
用户可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性。
四个重要的DOM属性
nodeName 属性:规定节点的名称。
  • nodeName 是只读的
  • 元素节点的 nodeName 与标签名相同
  • 属性节点的 nodeName 与属性名相同
  • 文本节点的 nodeName 始终是 #text
  • 文档节点的 nodeName 始终是 #document
nodeValue 属性:规定节点的值。
  • 元素节点的 nodeValue 是 undefined 或 null
  • 文本节点的 nodeValue 是文本本身
  • 属性节点的 nodeValue 是属性值
nodeType 属性:返回节点的类型。
  • nodeType 是只读的。
innerHTML 属性:获取元素内容,如:
即text的值为Hello World!
innerHTML可以被赋值,也可读,因此是被引用次数最多的对象属性,同时也是最容易产生安全问题的对象属性。
输入一般在哪里
Location 对象属性
JS通常会通过调用DOM内置对象location来获得用户输入,如引用参数切分可使用location.search,引用完整URL可使用location.href等。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

7

主题

134

帖子

562

积分

高级会员

Rank: 4

积分
562
 楼主| 发表于 2020-11-11 23:23:54 | 显示全部楼层
PHP - 数组排序函数
  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列
  • PHP 超级全局变量
  • PHP 超级全局变量列表:
    • $GLOBALS
    • $_SERVER
    • $_REQUEST
    • $_POST
    • $_GET
    • $_FILES
    • $_ENV
    • $_COOKIE
    • $_SESSION





回复

使用道具 举报

7

主题

134

帖子

562

积分

高级会员

Rank: 4

积分
562
 楼主| 发表于 2020-11-15 16:53:06 | 显示全部楼层
今天总结一下这两天所学的内容,有关awd的相关知识
一、 AWD模式简介

AWD:Attack With Defence,比赛中每个队伍维护多台服务器,服务器中存在多个漏洞,利用漏洞攻击其他队伍可以进行得分,修复漏洞可以避免被其他队伍攻击失分。

  • 一般分配Web服务器,服务器(多数为Linux)某处存在flag(一般在根目录下);
  • 可能会提供一台流量分析虚拟机,可以下载流量文件进行数据分析;
  • flag在主办方的设定下每隔一定时间刷新一轮;
  • 各队一般都有自己的初始分数;
  • flag一旦被其他队伍拿走,该队扣除一定积分;
  • 扣除的积分由获取flag的队伍均分;
  • 主办方会对每个队伍的服务进行check,服务宕机扣除本轮flag分数,扣除的分值由服务check正常的队伍均分;
  • 一般每个队伍会给一个低权限用户,非root权限;

二、 得分方式

比赛中获取flag一般有两种模式:

(1)flag在根目录下,读取flag内容,提交即可得分

(2)拿到其他队伍shell后,执行指定命令(curl 10.0.0.2),即可从上图中flag机获取flag内容;

比赛可能会告诉你其他队伍的IP,也可能不会告诉你,一般在同一个C段或者B段,因此首先可以利用nmap等扫描工具发现其他队伍的IP:

  1. nmap –sn 192.168.71.0/24
复制代码


三、 比赛分工

线下赛一般3人左右,2人防御,1人攻击,因为发现的漏洞可以攻击其他队伍,也要进行修复,所以攻防相辅相成,以攻为守。

比赛中每个队伍可能会维护多个靶机,web、二进制等,也可以每人负责一台,各自负责攻击和防御。


四、 一些“套路”备份!(首先要进行备份并且把服务器中的木马删掉)

比赛开始后第一时间备份服务器中web目录下的文件(/var/www/html),这是自我审计的基础,也是防止服务器在比赛中出现异常的情况下可以立即恢复到初始状态的先决条件。有的比赛可以提供3次左右的恢复初始设置的机会,有的比赛不提供,所以备份十分重要。(老师说这样文件被删掉之后直接覆盖就好,避免了一直扣分)

可以用scp命令,也可用一些图形化的工具:Winscp,FileZilla,操作起来比较方便

  • 口令问题

弱口令的问题几乎是必考,比赛开始后,如果发现每个队伍的SSH账号密码都是一样的(某次比赛中都是phpcms、wordpress),需要立即修改口令,如果被其他队伍改了那就gg了。

Web后台很有可能存在弱口令,一般都是admin/admin,admin/123456,test/test等等,同样需要立即修改,也可以修改其他队伍的后台口令,为本队所用,说不定可以利用后台getshell,比如十分常见的wordpress。

不过有的比赛不允许修改后台口令,如果修改视为服务宕机,这样还是不要动口令的心思了。

  • 预留后门

在维护的服务器上,很有可能已经预留了一个或多个后门,比如一句话木马,这个是送分题,可以利用这个漏洞迅速打一波,还可以视情况“搅屎”,利用这个漏洞一直维持权限,每轮都得分(后面细说)

将服务器中web目录下载到本地,利用D盾扫描,一般就可以发现预留后门:

发现后门后,第一时间删除,同时利用这个漏洞发起第一波攻击,如果利用菜刀连,显然不够优雅,还没连完,人家估计都删的差不多了,因此这个漏洞虽然是送分,但拼的是手速,因此得提前准备好脚本:

配置一下其他队伍地址、shell路径和密码,就可以进行攻击,flag记录在firstround_flag.txt中

  • 常见漏洞

常见的漏洞包括SQL注入、文件包含、文件上传等等。对于SQL注入类的漏洞,一般不会有过滤,可以用sqlmap跑出来,再利用—sql-shell执行select load_file(‘/flag’);即可得到flag,也可以利用into outfile写木马维持权限,但要根据实际情况,可能会遇到权限问题。用sqlmap跑比较耗时,可以利用payload写一个python,自动化进行攻击:

对于文件包含漏洞,直接可以通过../../../../../../flag的方式获取:

上传漏洞一般也是比较简单的黑名单过滤、服务器解析漏洞等等,可以直接上传木马;

五、 权限维持

这里说的方法就比较“搅屎”了,上面说到利用预留后门可以维持权限,主要有两种,一种是“不死马”,另一种是反弹shell

  • “不死马”

利用预留后门,上传上面的“不死马”并访问,就会一直生成.config.php的一句话木马,木马内容可以自行修改,只要别被其他队伍看懂就行。

这个不死马比较猥琐,解决的方法需要重启apache,或者写一个程序不停kill这个不死马进程。(主要内容来源:https://www.cnblogs.com/nul1/p/9595899.html

下面是今天训练的过程

首先 用mopaxterm来连接我们自己的主机

连接

这里要解释一下什么是ssh

SH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

主要是为了可以不断更新flag

进去世之后需要输入用户名和密码  用户名:root  密码 windows2000

这个靶场里 木马所在的位置是var->www->html   找到木马的位置之后把他们删掉

然后其他人的木马在相同的位置 我们要做的是通过蚁剑来连接其他人的木马 并且不断的上传新的木马以保证后面还可以通过蚁剑进行连接

上传木马的时候一定要注意上传的木马不能让其他人看到密码 否则会被其他人利用




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

7

主题

134

帖子

562

积分

高级会员

Rank: 4

积分
562
 楼主| 发表于 5 天前 | 显示全部楼层
SQL注入进阶
1.时间注入攻击
2.堆叠查询注入攻击
3.二次注入攻击
4.宽字节注入攻击
5.cookie注入攻击
6.base64注入攻击
7.XFF注入攻击
SQL绕过技术
1.大小写绕过注入
当web正则过滤的时候对大小写不敏感的情况下使用,一般很少会有这种漏洞
比如当过滤了select的时候我们可以采用SEleCT来查询

2.双写绕过注入
有的waf只会对关键词过滤一次,这时候采用双写的方式可以绕过。
selselectect * from user; 过滤select后变成 select * from user;

3.编码绕过注入
 十六进制:
    select * from users where username = 0x7a68616e677961;

4.内联注释绕过注入
把要使用的查询语句放在/*。。。*/中,这样在一般的数据库是不会执行的,但是在mysql中内联注释中的语句会被执行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2020-12-2 23:35 , Processed in 0.025208 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表