前言:记入一下学习过程,如有错误望指出,共同进步
命令注入介绍
命令注入漏洞和SQL注入、XSS漏洞很相似,也是由于开发人员考虑不周造成的,在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格导致的,常发生在具有执行系统命令的web应用中,如内容管理系统(CMS)等。
后台代码并未对用户输入的参数ip的值进行过滤就直接与ping命令进行拼接并执行 ,因此我们可以使用常见的命令拼接字符对命令进行拼接,如使用“&”,“|”,“&&”,“||”等,linux系统下还可以使用“;”,“``”。
Windows支持的管道符
1. “|”:直接执行后面的语句。
2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
Linux支持的管道符
1. “;”:执行完前面的语句再执行后面的语句。
2. “|”:显示后面语句的执行结果。
3. “||”:当前面的语句执行出错时,执行后面的语句。
4. “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
5. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执
1.看一下题目
2.题目解读
isset() 函数用于检测变量是否已设置并且非 NULL。
exec()
原型:string exec (string command [, string array [, int return_var]])
exec ()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二 个参数时,才可以用第三个参数,用来取得命令执行的状态码。
结合第二个图片可知该数组被打印出来了可以看见
3.解题
因为没有任何的过滤,那么我们可以直接使用分号(;)闭合前面的语句,执行ls命令
没有flag,找下根目录
还是没有,之前有一个php文件可以查看一下
什么都没显示,考虑字符编码可能显示不出来,base64加密。
- Base64编码是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码的方式
127.0.0.1; cat 31605219412770.php |base64