• regexpire-攻防世界-MISC


    用nc链接靶机:

    root@kali:~/Desktop# nc 220.249.52.133 37944

    Can you match these regexes?

    B+v*(clementine|sloth)*Q*eO(clinton|alien)*(cat|elephant)(cat|trump)[a-zA-Z]*(dolphin|clementine)\W*(table|apple)*

    大致上是服务端给出一个正则表达式,要求输入符合该表达式的字符串。这里可以使用Python中的rstr库,该库主要用于根据条件生成随机字符串(参见rstr · PyPI),其中的xeger函数可以从正则表达式生成随机字符串。例如:

    import rstr

    print(rstr.xeger(r'B+v*(clementine|sloth)*Q*eO(clinton|alien)*(cat|elephant)(cat|trump)[a-zA-Z]*(dolphin|clementine)\W*(table|apple)*'))

    输出:

    BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvclementineclementineclementineclementineclementineclementineclementineslothslothclementineslothclementineclementineslothslothslothclementineslothslothclementineslothslothclementineclementineslothclementineslothclementineclementineslothclementineslothQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQeOalienclintonalienalienclintonclintonalienalienalienalienalienclintonalienclintonclintonclintonclintonalienalienalienalienalienalienclintonclintonalienclintonalienelephanttrumpGwSPaPqNKdPpccXBlHYxrhwyMjRdzSzSKELLUekKJVYGpdKxQapzainTuYuWclementine|;appletableappletableappletabletabletabletableappletabletabletableappletableappleappletabletabletabletabletableappletableappleappletableappleappletableappleappletableappleappletableappleappletabletableappleappletableappleappleappleappletableappleappleappleappleappletableappletableappletabletableappleappletableappleappletableappleappletableappleappletableappletabletableappleapple

    注意xeger适用于大多数简单的正则表达式,但并不完整支持Python中所有正则表达式功能

    利用Python的pwntool库来自动完成获取正则表达式和提交答案的过程:

    1. from pwn import *
    2. import rstr
    3. from time import sleep
    4. r = remote('220.249.52.133', 37944)
    5. print(bytes.decode(r.recvline()))
    6. i = 1
    7. while True:
    8. question = bytes.decode(r.recvline()[:-1])
    9. if 'Irregular' in question:
    10. break
    11. if 'flag' in question:
    12. print('flag is:', question)
    13. break
    14. print('No.', i, ':\n', question, '\n')
    15. answer = rstr.xeger(question)
    16. while '\n' in answer[:-1]:
    17. answer = rstr.xeger(question)
    18. print(answer, '\n')
    19. r.sendline(answer)
    20. i += 1
    21. sleep(0.2)

    同时有一个需要特别注意的地方。如果提交的答案中包含有换行符\n,服务端会认为这标识了一段答案提交结束,导致所提交的答案只有\n前的半段,无法通过正则表达式判断。因此,若生成的答案字符串中包含\n,需要通过一个循环来判断并重复生成,直到答案中不包含\n为止再提交。

    运行该脚本,回答正确1000次后服务端返回flag。

    flag:flag{^regularly_express_yourself$}

  • 相关阅读:
    Ubuntu(WSL) 安装最新版本的 GCC
    防孤岛保护装置在光伏行业的应用
    day38:网编day5, IO多路复用
    论文投稿指南——中文核心期刊推荐(计算机技术2)
    20行代码来爬取某某云的榜单音乐
    数据脱敏的风险量化评估介绍
    花 1 万块做付费咨询,值得吗?
    Springboot魅力乡村管理系统srb4s计算机毕业设计-课程设计-期末作业-毕设程序代做
    DEVOPS: 认证与调度
    自己写过比较蠢的代码:从失败中学习的经验
  • 原文地址:https://blog.csdn.net/qq_75023818/article/details/136427191