WEB学习 任务七 笔记

news/2025/2/21 20:00:02/

任务七:Web学习
内容:
1.查阅资料,掌握PHP类的一句话木马的基本形式与原理,并学会图片木马的简单制作(图片中嵌入一句话;一句话封装成假图片)
2.下载配置蚁剑(https://github.com/AntSwordProject/AntSword/)熟悉应用界面,完成 BUUCTF [极客大挑战 2019 Knife]
3.下载并配置 upload-labs(https://github.com/c0ny1/upload-labs/)
4.可以做一下 极客大挑战 2019 的 [HaveFun] [BuyFlag] [HTTP] 回顾一下前面学过的内容
5.查询SQL注入的基本原理与注入步骤;学习并掌握SQL联合查询注入(union select)的基本原理与方法,可以判断是什么类型的注入,学会fuzz测试,完成sqli-labs的1-4(可以借用hackbar的SQLI模块),做完后看一下各关卡的源码,看一下后台代码是怎样实现查询的,基本语句是什么
6.根据上一个任务的源码,查询万能登陆密码的原理,完成 [极客大挑战 2019 EasySQL]

一句话木马

一句话木马的基本原理即植入并利用PHP语言中所提供的的可以运行PHP语句类型字符串或者shell指令的函数。
常在前面加“@”以隐蔽其运行所带来的报错结果。增加运行的隐蔽性。

常见的也就是之前学习过的几种:eval(),assert(),
preg_replace()[https://blog.csdn.net/qq_33020901/article/details/78951543],call_user_func()[将第一个参数当做回调函数使用,其他参数是提供给第一个callback参数的],shell_.exec(),system(),exec(),passthru()这一类。

一句话木马的绕过
但是,由于WAF(Web Application Firewall)检测的存在,会对代码和传递的参数进行关键词检测,来规避对一句话木马的利用。
因此才实际的操作中,一句话木马会衍生出无数的变形,以绕过WAF的检查。
再说变形之前,先看看如何挂马
挂马即主动将包含PHP一句话的文件上传服务器或者将代码上传至mysql数据库中。
可以SELECT 木马代码 INTO 数据表。

一句话木马的变形
为了绕过WAF对木马的检测。需要对一句话木马进行适当变形以避开关键词检测。
只能说变形确实多种多样。主要是基于各种编码和冷门函数。
先贴上两个大佬的博客
https://www.cnblogs.com/white-album2/p/9851468.html
https://my.oschina.net/programs/blog/1649544
图片木马的简单制作方式
最简单的,可以用copy方式,在同一文件夹中,

copy 图片名/b + 木马文件名/a 目标文件名

的方式来制作。

蚁剑配置
蚁剑配置不算难,但直到我做完下面的题才反应过来蚁剑是SHELL管理工具这句话的意思。(菜鸡发抖)
PS:看到有大佬修改文件来修改user-agent的,之后尝试,暂且留着。

极客大挑战 2019 Knife

刚进入界面看到如下:
在这里插入图片描述
看到这一句话还傻乎乎的以为只要Post Syc=…就可以执行命令了。。。
但现实还是打脸。。。不管我执行什么命令都毫无反应。。。。

查看了大佬的文章,才反应过来是要用蚁剑(菜刀)连接就行emmmmm…这就是强者的世界吗?

连接后看到flag。

这就是“白给”的含义吗?

复习题

这几道题目难度不大。
唯一掉的坑是忘了Hackbar Post数据的用法(呃…)
在BuyFlag那里卡了好久。。。
解决完这个问题后,发现自己不管输入的数据多长都不对。
盲猜一波绕过。但并不清楚具体是什么漏洞。
既然是复习题,那应该是我学过的。
数组传递试了一下。
完成。

做完之后还是对到底是什么漏洞感到好奇,看大佬文章才知道是strcmp漏洞。emmm…
(2020.09.02 19:51 补充
有关strcmp的一个知识点:strcmp(a,b),如果a<b返回负数,如果a>b返回正数,如果a=b返回0。

但是!如果a,b的类型不匹配,它会报错返回0,这就很致命了,明明数据类型不匹配但是判定相等了,所以我们只要把money以数组的形式上传就好了。money[]=a,也能出现flag。(https://www.freesion.com/article/7548535583/)
另外,像这种POST数据的,也可以直接在网上找一个http接入测试模拟网页来运行。
呜呜呜,我真是很久没有正经学过了。 )

SQL注入初步学习

SQL基本原理
简单来说,SQL注入即通过在数据库查询命令中写入恶意查询代码,从而可以从数据库中进行各种查询和操作。

基本流程大概是这样:
①通过检查Web页而上存在的SQL注入漏洞,构建特殊的SQL注入点;

②其次通过这些特殊的注入点利用Web页而动态传递参数的功能,将SQL的语法组合动态传递给数据库;

③然后根据数据库的不同类型,对数据库采取不同的处理;

④最后执行SQL语句,从而达到攻击者想要的目的。

SQL注入注入步骤
1)寻找注入点
2)初步构造语句,判断注入点类型
注入点类型分两种,数字类型和字符类型。
数字类型注入点一般不需要引号括住,直接输入即可,而字符类型输入需要引号括住

数字型注入
当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。
测试步骤:
(1) 加单引号,URL:www.text.com/text.php?id=3’
对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;
(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1
对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差异;
(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2
对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异
如果满足以上三点,则可以判断该URL存在数字型注入。

字符型注入
测试步骤:
(1) 加单引号:select * from table where name=’admin’’
由于加单引号后变成三个单引号,则无法执行,程序会报错;
(2) 加 ’and 1=1 此时sql 语句为:select * from table where name=’admin’ and 1=1’ ,也无法进行注入,还需要通过注释符号将其绕过;
Mysql 有三种常用注释符:
– 注意,这种注释符后边有一个空格
#通过#进行注释
/* */ 注释掉符号内的内容
因此,构造语句为:select * from table where name =’admin’ and 1=1—’ 可成功执行返回结果正确;
(3) 加and 1=2— 此时sql语句为:select * from table where name=’admin’ and 1=2 –’则会报错
如果满足以上三点,可以判断该url为字符型注入。

SQL联合查询注入
联合查询注入利用的前提:页面上有显示位。
联合注入的过程

1、判断注入点

2、判断是整型还是字符型

3、判断查询列数
4、判断显示位
5、获取所有数据库名
6、获取数据库所有表名
7、获取字段名

8、获取字段中的数据

SQL注入常用payload类型

Mysql 5.x 的数据结构中,默认定义了information_schema数据库,用于存储数据库元信息,包括schemata(存储数据库名),tables(存储数据库名和表名)和columns(存储数据库名,表名和列名)三张表。

常用SQL查询语句
查询:SELECT 列名(*)FROM 表名 WHERE 字段1 = ‘条件1’AND 字段2 = ‘条件2’
插入:INSERT INTO table name (列1,列2……)VALUES (值1,值2……)
更改:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名 = 某值
删除:DELETE FROM 表名 WHERE 列名 = 值
常用的查询函数
user() :查看当前mysql登录用户名
database() :查看当前使用的mysql数据库名
version():查看当前mysql版本
limit:limit m n 从m行开始,到m+n行结束

注释
#,–空格,/* */
内联注释/**/只有mysql可以识别,常用于绕过WAF
where id=1/*union*/ /* select*/ 1,2,3,4
空格可以用%20代替以防被浏览器吞掉。

SQLI-LIBS LESS 1–4
总体难度不大,less1是字符型注入,less2是1数值型注入,less3是(’’)闭合的字符型注入,less4是("")闭合的字符型注入。

FUZZ测试
fuzz测试即通过构造发送大量的测试包来对系统安全性进行测试。
可是使用SPIKE fuzz工具。具体使用见
https://blog.csdn.net/yalecaltech/article/details/90575167

万能登录密码
SQL万能登录密码的原理即通过构造payload使SQL语句闭合,将后面的内容注释掉。
一般SQL查询语句结构为:

  select name,pass from tbAdmin where name='id' and pass='passwd'

输入用户名:’ or 1='1

SQL变成下面这个样子:

select name,pass from tbAdmin where name='' or 1='1' and pass='passwd'

1=为真,故验证通过。

BUUCTF [极客大挑战 2019 Knife]
直接在用户名输入框输入’ or 1='1回车即可得到flag。


http://www.ppmy.cn/news/434402.html

相关文章

Quartz任务调度

了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象&#xff0c;提出了调度器、任务和触发器这3个核心的概念&#xff0c;并在org.quartz通过接口和类对重要的这些核心概念进行描述&#xff1a; ●Job&#xff1a;是一个接口&#xff0c;只有一个方法void execute…

Mac Flutter配置在AndroidStudio最新教程(完美避开各种大坑小坑)

Flutter官方介绍&#xff1a; 大致意思这么讲&#xff1a; Flutter是谷歌的移动应用SDK&#xff0c;用于在创纪录的时间内在iOS和Android上制作高质量的原生界面。Flutter与现有代码一起使用&#xff0c;被世界各地的开发人员和组织使用&#xff0c;并且是免费和开源的。 Flu…

Quartz任务调度

了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象&#xff0c;提出了调度器、任务和触发器这3个核心的概念&#xff0c;并在org.quartz通过接口和类对重要的这些核心概念进行描述&#xff1a; ●Job&#xff1a;是一个接口&#xff0c;只有一个方法void execute…

金仓数据库KingbaseES数据库参考手册(服务器配置参数9. 错误报告和日志)

目录 9.1. 在哪里记录日志 9.2. 什么时候记录日志 9.3. 记录什么到日志 9.4. 使用 CSV 格式的日志输出 9.5. 进程标题 9.1. 在哪里记录日志 log_destination 属性 描述 类型 string 默认值 stderr 级别 SIGHUP---会话级 KingbaseES支持多种方法来记录服务…

linux网络配置

linux网路配置 1. 虚拟机网络1.1 桥接模式1.2 NAT模式1.3 SCSI控制器&#xff08;I/O&#xff09; 2. Centos7网络配置3. Ubuntu网络配置3.1 networking&#xff08;老方法&#xff09;3.2 netplan&#xff08;新方法&#xff09; 4. ip命令簇4.1 address4.2 link4.3 route4.3 …

Quartz任务调度机制

&#xfeff;&#xfeff; Quartz任务调度机制 1 概述 1.1 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象&#xff0c;提出了调度器、任务和触发器这3个核心的概念&#xff0c;并在org.quartz通过接口和类对重要的这些核心概念进行描述&#xff1a; ●Jo…

Oracle 11g服务器监听配置

1. Oracle监听器理论基础&#xff08;摘自书本、网络&#xff09; Oracle监听器运行于数据库服务器端一个进程&#xff0c;用于监听所有来自客户端的连接请求&#xff0c;并提供处理数据库服务方面的请求。这个进程负责监听用户的连接请求&#xff0c;每当收到一个用户请求&a…

【Quartz】Quartz任务调度入门

概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象&#xff0c;提出了调度器、任务和触发器这3个核心的概念&#xff0c;并在org.quartz通过接口和类对重要的这些核心概念进行描述&#xff1a; ●Job&#xff1a;是一个接口&#xff0c;只有一个方法void…