web题目实操 5(备份文件和关于MD5($pass,true)注入的学习)

1.[ACTF2020 新生赛]BackupFile

(1)打开页面后根据提示是备份文件

(2)查看源码发现啥都没有

(3)这里啊直接用工具扫描,可以扫描到一个文件名为:/index.php.bak的文件

(4)然后访问这个连接,然后把备份文件下载下来然后访问这个连接

(5)发现是代码审计,记事本打开查看它的php文本

(6)在PHP中:

= = 为弱相等,即当整数和字符串类型相比较时。会先将字符串转化为整数然后再进行比较。比如a=123和b=123admin456进行= =比较时。则b只会截取前面的整数部分。即b转化成123。

所以,这里的a = = b是返回True。

所以这里我们只需要提供一个参数?key=123就可以拿到flag了

2.[RoarCTF 2019]Easy Calc

(1)打开 环境后显示一个计算的页面(2)发现有一个calc.php文件,并且提示设置了waf

先尝试访问calc.php(3)打开calc.php文件,发现是它之下的另一个源码 它的意思应该是用get方式传参赋值给num,并且使用正则表达式进行了过滤,只要能绕过过滤,就可以通过eval进行任意php语句

(4)尝试直接?num=phpinfo()

禁止访问,应该是waf起了作用,根据大佬们的wp知道可以通过在num前加一个空格进行绕过

原理:php解析规则:当php进行解析时,如果变量名前面有空格,php会自动去掉前面的空格再进行解析,假如waf不允许num变量接收字母,那么使用 num就可以,而php解析时就会自动把空格去掉

(5)尝试**? num=phpinfo()**

(6)使用scandir查看目录中的内容,找到存有flag的文件

? num=var_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:user=0,那我们将其换为1试试

(8)可以看到提示------说我们的身份及密码正确,黑客,买flag,那我们再根据提示,支付money,使用post传参password=404a&money=100000000

(9)然后他它提示说长度太长了,那就换个短点的试试

(10)然后它又说我们的money不够

查看一下php版本,看看有没有啥可以利用的点

(11).可以看到PHP的版本为:PHP/5.3.3,可以利用函数strcmp(),使用数组绕过password=404a&money[]=1000 然后成功拿到flag

4.[BJDCTF2020]Easy MD5

(1)打开环境后是一个提交页面,尝试了各种数据提交,发现啥有用的信息都没有,(2)看看源码也没有啥有用信息

(3)决定抓包看看

(4)得到有用信息

Hint: select * from 'admin' where password=md5($pass,true)

可知,数据再存入数据库之前使用了md5加密

我们在输入框中提交**ffifdyop,**会出现如下页面:

(5)这里使用:**科学计数法(0e绕过)(绕过思路2)**的方法绕过

构造payload:

http://3b2544a9-a3eb-4b09-87a8-f28609d74d0d.node4.buuoj.cn:81/levels91.php?a=QNKCDZO&&b=240610708

(6)最后是一个需要post提交的强比较,使用数组绕过 param1[]=2&param2[]=3

绕过之后即可解出flag

原理:

ffifdyop经过md5加密后会变成276f722736c95d99e921722cf9ed621c

再转换为字符串:'or'6(乱码) 即 'or'66�]��!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 user='amdin' and password=''or'6xxxx'

也就是,password=' ' or true=true

相关推荐
坐望云起8 小时前
什么是WebAssembly?怎么使用?
html·web·wasm·js
青年有志17 小时前
JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介
java·web
Z3r4y20 小时前
【Web】2024“国城杯”网络安全挑战大赛决赛题解(全)
web·ctf·wp·国城杯·国城杯决赛
sg_knight2 天前
VSCode如何修改默认扩展路径和用户文件夹目录到D盘
前端·ide·vscode·编辑器·web
亿.62 天前
2024楚慧杯-Web
web·ctf·writeup
王ASC2 天前
SpringMVC的URL组成,以及URI中对/斜杠的处理,解决IllegalStateException: Ambiguous mapping
java·mvc·springboot·web
非凡的世界4 天前
5个用于构建Web应用程序的Go Web框架
golang·go·框架·web
每天进步一大步4 天前
webSokect安卓和web适配的Bug 适用实时语音场景
android·前端·bug·web
cheungxiongwei.com5 天前
使用 acme.sh 申请域名 SSL/TLS 证书完整指南
网络·nginx·https·ssl·web·acme
Anna_Tong5 天前
ASP.NET Core 与 Blazor:现代 Web 开发技术的全新视角
前端·后端·微软·asp.net·web·技术