c语言0x00如何不截断_关于读取popen输出结果时未截断字符串导致的命令行注入详解...

本文介绍了C语言中因未正确处理字符串截断导致的命令行注入问题,通过分析一个pwn题目的例子,详细阐述了如何利用未截断的字符串在`popen`和`system`调用中执行任意命令,从而获取shell。文章通过具体的exploit演示了如何构造payload来利用这个漏洞。
摘要由CSDN通过智能技术生成

0x00 前言

这种命令行注入在pwn中出现的比较少,所以记录分享一下。

0x01 命令行注入介绍

熟悉web安全的话就知道,如果对特殊字符过滤不当,会引发sql注入或者xss等安全漏洞。其中,命令行注入较为严重,因为可以直接拿到漏洞程序当前权限的OSshell。

然而,命令行注入不仅在web中会出现,在C语言程序中,也会出现命令行注入的漏洞。比方说这道pwn题,就是调用system时,没有对输入数据进行\0截断以及对特殊字符处理不当而导致的。

命令行注入相对于其他二进制漏洞相比利用比较简单,比方说这道题,举个例子:

sprintf(&s, "du -sh lib/'%s'", v6);

system(&s);

其中设计初衷,v6应当是一个合法的文件名。但是如果攻击者恶意操控v6,比方说,让v6为:'&&/bin/sh'

进行sprintf拼接后,system所执行的命令为:

du -sh lib/''&&/bin/sh''

这里有两个linux命令行的知识:

&&,这是拼接两个命令,如果我们执行 command1&&command2,那么等价于先执行command1在执行command2。其中命令跟&&之间不必加空格。

在命令后不加空格的''(两个单引号)会被忽略,比如ls''等价于ls,/bin/sh'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值