小宁百度了php一句话用菜刀,完全从零开始的CTF之路 2020/11/7

隔了两天继续来搞简单web。

题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?

思路:

bc7f38529865606fb8ecf91203837c4e.png

打开网页,用GET方式传参数。

那就按照要求来 加上url  /?a=1

(/?a=x,  a就是一个要传的值,值为x)

f27102dc8cc7b82ec326ab54f29c886c.png

额,有弹出一句话,要post传参。

post传参不能直接体现在url上了。

这里推荐一个chrome插件,HackBar能post传参。

9a70ac3dc1fb20671cbfe594980a96ee.png

点击运行试试

5ced24d5f791278443fa8090b8d2371d.png

OK,得到flag。

题目描述:X老师告诉小宁其实xff和referer是可以伪造的。

思路:

88f8b9d5467376f62fbeb7b63dbed477.png

看题目,可以伪造头文件。

那用啥改呢?

看网上大佬都是用的burp,试试。

(这个软件使用教程因为篇幅就省略了)

21aabc2387af9688679f1136f7216c31.png

点击发送数据包,看看返回啥。

d7d2bda39086e529bb977401e68e05a6.png

多了一句 必须来自谷歌,那继续改呗。

d35eb8c10c3dae92764f2be3e6f79a58.png

再试试

8afe46fb1368713fbcec1183045a0765.png

ok,flag到手。

题目描述:小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。

思路:

d6b3e551b65ffec53f3227124b0af75d.png

啥叫webshell,百度一下,哦哦这玩意是个后门。

啥意思呢,<?php ?> 就是PHP代码格式不用管。

其实本质上就两句话,一句是post就是传一个叫shell的参数。

而前面@eval就是把传入的shell当做代码执行。知道后门其实就可以随意执行想执行的代码了。

这里推荐一个工具:中国菜刀,知道木马可以快速获得文件目录。

b8db828d93aeb03dc37caf5ea752f778.png

连接成功,密码填后门post传参的名字,这里就是网页给的shell啦。双击

9bf084b522f33b7205c34dc2275ebeff.png

看到个flag.txt的文件,点进去flag到手。

题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。

思路:

一个ping框,输入本地地址127.0.0.1试试

90261eb216c3964f8544e2ab9e7c297d.png

发现其实就是ping了三次。

试试能不能注入,输入1;ls

925166b5d76f2a12ed4c91c9eb5b2ad7.png

发现能执行ls。

那试试查找有没有flag文件

输入1;find / -name "flag*"

查询flag* 就是以flag开头的文件

2cac8a4bd73bf6c1b6b2aba721618bac.png

OK,看到一个,直接cat

输入 1;cat /home/flag.txt

013b6c4693793689148243e87706e9f2.png

提交即可

题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )

思路:

84c69b50175a72eb9c6d533eef87305b.png

上来就叫你输入密码。

随便输入一个1试试。

d7dcba17a01a82da9cdfcb333542af90.png

提示  人造密码哈哈。。。

什么玩意,看题目描述,F12查看前端js代码

54a999d1152984136e4d48510253d5de.png

试着慢慢捋一捋。

function dechiffre(pass_enc){

var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";

var tab = pass_enc.split(',');

var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;

k = j + (l) + (n=0);

n = tab2.length;

先传入一个字符串pass_enc。

然后以pass_enc “,” 为分隔存到数组tab里。

定义一个pass字符串有一堆数字。

然后pass以 “,” 为分隔存到数组tab2里。

注意这两个数组都是字符串数组。

接下来是一大堆变量,

j=tab.length,那就是不定了。

i,k,l,l=0;m,n,o,p="";

k=j+(l)+(n=0);那就是k=j;n=0;

n=tab2.length;那n=18;

接下来看逻辑部分:

for(i = (o=0); i < (k = j = n); i++ )

{o = tab[i-l];p += String.fromCharCode((o = tab2[i])

if(i == 5)break;});

循环从i=0开始;i

每一次执行:o=tab[i-1],这句话其实没用,看后面,o = tab2[i],o被tab2[i]覆盖了。

然后p加上o转为符号的值(String.fromCharCode是ascii转符号)

那其实就是将p=tab2的符号形式;实际就是p=FAUX P(完整应该是 FAUX PASSWORD HAHA)。

继续往下看:

for(i = (o=0); i < (k = j = n); i++ ){

o = tab[i-l];

if(i > 5 && i < k-1)

p += String.fromCharCode((o = tab2[i]));

}

循环从i=0开始;i

每一次执行:和上面一样,前面o=tab[i-1]这句话没用。

如果i>5或者i

那最终P=FAUX PASSWORD HAH 。

继续往下看

p += String.fromCharCode(tab2[17]);

pass = p;return pass;

p再加上tab2[17]对应的符号(A),那P就是FAUX PASSWORD HAHA。

pass=p="FAUX PASSWORD HAHA",返回pass;

OK,函数到此结束。

???

我们传入的值pass_enc呢?

这个函数不管传入啥都是这玩意啊。

那输入密码根本不可能成功。

继续再往下看

给了一个字符串数组

String["fromCharCode"](dechiffre("x35x35x2cx35x36x2cx35x34x2cx37x39x2cx31x31x35x2cx36x39x2cx31x31x34x2cx31x31x36x2cx31x30x37x2cx34x39x2cx35x30"));

会不会是这个数组代替上面的tab2,按照上面流程就能算出答案呢?

转格式

String["fromCharCode"]={55,56,54,79,115,69,114,116,107,49,50}

按照上面运算可知,pass=786OsErtk12.

看题目描述化成格式:Cyberpeace{786OsErtk12}。

输入,OK。

ee54f6a07b5645063d9cb83acdf96c4b.png

内容来源于网络如有侵权请私信删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值