北京西城网站建设公司,网站开发一个人可以完成吗,恋爱ppt模板免费下载网站,游戏开发公司定制游戏1.[ACTF2020 新生赛]BackupFile
#xff08;1#xff09;打开页面后根据提示是备份文件 #xff08;2#xff09;查看源码发现啥都没有
#xff08;3#xff09;这里啊直接用工具扫描#xff0c;可以扫描到一个文件名为#xff1a;/index.php.bak的文件 #xff08;…1.[ACTF2020 新生赛]BackupFile
1打开页面后根据提示是备份文件 2查看源码发现啥都没有
3这里啊直接用工具扫描可以扫描到一个文件名为/index.php.bak的文件 4然后访问这个连接然后把备份文件下载下来然后访问这个连接
5发现是代码审计记事本打开查看它的php文本
6在PHP中 为弱相等即当整数和字符串类型相比较时。会先将字符串转化为整数然后再进行比较。比如a123和b123admin456进行 比较时。则b只会截取前面的整数部分。即b转化成123。 所以这里的a b是返回True。 所以这里我们只需要提供一个参数?key123就可以拿到flag了 2.[RoarCTF 2019]Easy Calc
1打开 环境后显示一个计算的页面2发现有一个calc.php文件并且提示设置了waf 先尝试访问calc.php3打开calc.php文件发现是它之下的另一个源码 它的意思应该是用get方式传参赋值给num并且使用正则表达式进行了过滤只要能绕过过滤就可以通过eval进行任意php语句
4尝试直接?numphpinfo() 禁止访问应该是waf起了作用根据大佬们的wp知道可以通过在num前加一个空格进行绕过 原理php解析规则当php进行解析时如果变量名前面有空格php会自动去掉前面的空格再进行解析假如waf不允许num变量接收字母那么使用 num就可以而php解析时就会自动把空格去掉
5尝试? numphpinfo()
6使用scandir查看目录中的内容找到存有flag的文件 ? numvar_dump(scandir(chr(47)))
var_dump()方法是判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型. 此函数显示关于一个或多个表达式的结构信息包括表达式的类型与值。数组将递归展开值通过缩进显示其结构。
7发现貌似flag文件直接用相同方式访问打开即可得到flag
3.[极客大挑战 2019]BuyFlag
1打开环境后如下2浅看了一眼啥也没有的样子直接看看源代码貌似也不是那么有用
3再次回来发现右上角有菜单点进去看到它简述了flag获取 中文意思就是如果你想要买这个flag你必须是来自CUIT的学生你必须输入正确的密码
4再看看这里的源码 阅读源代码可以得出 变量password使用POST的传参方式进行传参不难看出来只要$password 404为真那么就可以绕过。函数is_numeric()判断其中的参数是数字还是其他如果是数字则判断为真否则为假。这里我选择传入的参数为404a 5这里我直接用hackbar传个参 6然后用BP抓包
7看了一下抓包情况关于用户的提示只有在cookie:user0那我们将其换为1试试
8可以看到提示——说我们的身份及密码正确黑客买flag那我们再根据提示支付money使用post传参password404amoney100000000
9然后他它提示说长度太长了那就换个短点的试试
10然后它又说我们的money不够
查看一下php版本看看有没有啥可以利用的点 11.可以看到PHP的版本为PHP/5.3.3可以利用函数strcmp()使用数组绕过password404amoney[]1000 然后成功拿到flag 4.[BJDCTF2020]Easy MD5
1打开环境后是一个提交页面尝试了各种数据提交发现啥有用的信息都没有2看看源码也没有啥有用信息
3决定抓包看看
4得到有用信息
Hint: select * from admin where passwordmd5($pass,true)
可知数据再存入数据库之前使用了md5加密
我们在输入框中提交ffifdyop,会出现如下页面
5这里使用科学计数法0e绕过绕过思路2的方法绕过
构造payload
http://3b2544a9-a3eb-4b09-87a8-f28609d74d0d.node4.buuoj.cn:81/levels91.php?aQNKCDZOb240610708
6最后是一个需要post提交的强比较使用数组绕过 param1[]2param2[]3
绕过之后即可解出flag
原理
ffifdyop经过md5加密后会变成276f722736c95d99e921722cf9ed621c
再转换为字符串or6乱码 即 or66]!r,b
预想数据库查询语句应为
SELECT * FROM xxx WHERE username admin and password .md5($password,true). 而在mysql中在用作布尔型判断时以数字开头的字符串会被当成整型不过由于是字符串因此后面必须要有单引号括起来的比如‘xxx’or’6xxxxxx’就相当于’xxx’or 6就相当于 xxx’or true所以返回值是true。
所以此时查询语句就会变成
select * from xxx where useramdin and passwordor6xxxx 也就是password or truetrue