打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
完全从零开始的CTF之路 2020/11/7

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

 

题目 get_post

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

思路:

 

 

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

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

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

 

 

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

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

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

 

 

 点击运行试试

 

 

 OK,得到flag。

 

 

 

 

 

题目:xff_referer

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

思路:

 

 

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

那用啥改呢?

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

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

 

 

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

 

 

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

 

 

 再试试

 

 

 ok,flag到手。

 

 

 

 

 

题目:webshell

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

思路:

 

 

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

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

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

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

 

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

 

 

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

 

 

 

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

 

 

 

 

 

题目:command_execution

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

思路:

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

 

 

 

发现其实就是ping了三次。

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

 

 

 

发现能执行ls。

那试试查找有没有flag文件

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

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

 

 

 OK,看到一个,直接cat

输入 1;cat /home/flag.txt

 

 

 提交即可

 

 

 

 

 

 

题目:simple_js

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

思路:

 

 

 上来就叫你输入密码。

随便输入一个1试试。

 

 

 提示  人造密码哈哈。。。

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

 

 

 试着慢慢捋一捋。

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<n结束;(6次,i==5 就break了)

每一次执行: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<n结束;(18次)

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

如果i>5或者i<k-1,p+=tab2[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("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

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

转格式

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

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

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

输入,OK。

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
RSA原理及各种题型总结
某人写的php算法优化
CTF训练之OneWayIn
CTFWEB-RCE篇
javascript常用代码大全
Python 爬虫进阶|某著名人均百万问答社区 header 参数加密逻辑分析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服