• 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$}

  • 相关阅读:
    React-18--css in js
    四个action的执行过程
    ISCSI - 磁盘管理
    事件总线及插槽
    P7909 [CSP-J 2021] 分糖果(详细讲解)
    End-to-End Lane Marker Detection via Row-wise Classification
    mysql卸载不干净时,如何干净利索的卸载mysql数据库(完整版)
    jQuery层次选择器
    如何设计一个面向未来的云原生数据库?
    【无标题】
  • 原文地址:https://blog.csdn.net/qq_75023818/article/details/136427191