隔了两天继续来搞简单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到手。
题目描述:小宁写了个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。
联系客服