目录
ctfhub文件上传
无验证
上传一句话木马,打开蚁剑连接
上文件管理,打开html目录即可得到flag。
前端验证
发现该网站不允许上传php文件,将文件后缀改为jpg,然后抓个包,再改一下文件名。
连接蚁剑,找到文件。
.htaccess
通过上传一个.htaccess文件到服务器,那么服务器之后就会将特定格式的文件以php格式解析。
先写一个.htaccess文件,上传,然后再上传一个jpg文件。
下面这条语句是将所有的文件解析为php文件
也可以使用 AddType application/x-httpd-php .png //将png文件解析为php文件
MIME绕过
是指服务器会对我们上传的文件类型进行检查,只有上传文件类型在白名单中,才能上传成功,我们上传一个php文件,然后抓包,将content-type改成image/jpeg
然后上传,连接蚁剑,找到flag文件
这题也可以使用前端验证那道题的方法。
00截断
上传jpg文件,进行00截断,连接蚁剑。
双写后缀
上传了一个文件2.php,发现php不见了,这题应该是过滤了php。
试试会不会过滤第二次,上传的文件名为2.pphphp。
连接蚁剑
文件头检测
用画图工具画一个简单的png图片(复杂的可能报错)上传,抓包,文件名后缀改为.php,文件内容加上一句话木马。
用蚁剑连接。
ctfshow web入门文件包含
web 78
web 79
sql 注入相关知识
相关数据库语句
打开navicat,连接数据库。
创建表格和插入数据
CREATE TABLE 表名(
元素1 数据类型,
元素2 数据类型,
.....
);
INSERT INTO 表名 VALUES
(....),
(....);
基本查询操作
-- SQL 语句基本的查询操作 查
SELECT * FROM
表名;
SELECT 元素1,元素2,.... FROM 表名 WHERE 条件;
SELECT username FROM 表名 LIMIT 2;
SELECT username FROM 表名 LIMIT 2 OFFSET 2;
-- ORDER BY 表示根据第几列进行排序(常用来判断列数)
SELECT username FROM 表名 ORDER BY ID DESC;
-- 降序
SELECT username FROM 表名 ORDER BY ID ASC;
--升序
SELECT username FROM 表名 WHERE username REGEXP "a";
SELECT CONCAT(Id,username) FROM 表名;
-- 将查询结果用,连接, 然后给查询结果命名为test
SELECT GROUP_CONCAT(username SEPARATOR ',') AS test FROM 表名;
-- 联合查询
SELECT username, password FROM 表名 union select un,pw FROM 表名;
更新操作
UPDATE 表名 SET username='121qqqq' WHERE ID=3;
删除操作
DROP TABLES 表名;
ALTER TABLE 表名 DROP COLUMN username;
DELETE FROM 表名 WHERE username='b';
常用查库查表操作
-- 常用的查库,表,列,字段操作
SELECT SCHEMA_NAME FROM information_schema.SCHEMATA;
SELECT TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_SCHEMA='0707sql';
SELECT COLUMN_NAME FROM information_schema.`COLUMNS` WHERE TABLE_NAME='hello';
SELECT username,password FROM 0707sql.Hello;
sqli-labs靶场 less-1
试试手工注入
出现了语法错误,因为sql中引号是成对出现的,单个引号出现语法错误
上面上传的参数本来应该返回id = ‘1’的用户信息,但是什么也没返回,说明上面2=3为假,整个式子为假,查询条件为假。
我们知道mysql自带的虚拟数据库information_schema,里面保存了许多数据库的信息
SCHEMA_NAME:列出 MySQL 实例中的所有数据库名称。
TABLE_NAME:列出指定数据库中的所有表名称。
COLUMN_NAME:列出指定表中的所有列名称。
TABLE_SCHEMA:列出指定表所属的数据库名称。
里面有许多表:
schemata表:提供有关数据库的信息。其中一个字段为schema_name,记录了数据库名
tables表:存储数据库中表的信息,table_name列,table_schema列
columns表:存储表中的列信息,有和tables表相同的table_schema、table_name,column_name列记录了列名
下一步我们可以通过访问这个虚拟数据库获取信息。
我们首先需要知道用户信息有多少字段
发现有3个字段
id设为0是为了不让第一个数据库里查询到的东西覆盖到第二个。
然后获取security数据库下的表名
然后获得users表的列名
然后可以获取用户信息。