36-day

 · 2019-9-25 · 次阅读


脚本关
1.key又又找不到了(http://lab1.xseclab.com/xss1_30ac8668cd453e7e387c76b132b140bb/index.php)
  进入页面后有个链接,点进去后,说key不在这里。直接用BP抓包看过程。抓到包后送去repeater点击go后出现了提示:href=”./search_key.php”>_到这里找key_
直接在链接上将Index.php改为search_key.php再发包试试。拿下了key.
  summary:为什么直接点链接进去什么都看不到,但是通过BP转发缺能看到key呢。再仔细重新弄一下过程。首先正常进去网页,然后点入链接,可以看到此时文件名为:no_key_is_here_forever.php,提示很明显了,key不在这个php下面。回到主页面,打开源代码可以看见,这个链接的确是到no_key_is_here_forever.php下的,但链接的名字却是search_key.php,因而看源代码可以清晰看出key应该在这个php下面,所以自己改php路径到这个下面,从而拿到了key.
2.快速口算(http://lab1.xseclab.com/xss2\_0d557e6d2a4ac08b749b61473a075be1/index.php)
  又是一道python题,很明显要在两s内口算出并提交人根本算不出,更何况这是随机数,那么只有试试python了,我还没学过。(连运行别人的都不会)在学会了python的运行以及环境配置之后。借鉴了某大佬的脚本。运行后直接跑出了key.
3.怎么就是弹不出key呢
  进入页面后会看到一个蓝色的疑似跳转链接,但点击后没有反应,ctrl+u查看源代码,发现了提示:
var d=eval(b);
alert(“key is first 14 chars”+d).在这上面还有3个函数,都是返回false。要知道返回false后那么输出key这个函数就被掩盖掉了。因而这里直接删除上面的返回false的三个函数。
然后保存代码到本地,打开后就会弹窗,得到:key is first 14 charsslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflk
这儿,我刚开始就截取了14个char:sslakfjteslkjs,这样上传key不对,因而仔细看会发现这儿14 char,char应该为chars,因而截取14个char应该为:slakfjteslkjsd.然后上传key就OK了。这里直接截取14个chars是很容易的,但如果长度多了人眼看就麻烦了。因而用php的substr这个简单的函数操作一下:payload:substr($str,0,14).
  这道题首先要对script代码有一定了解,以及对于函数的执行结果要清楚的认识,最开始我想直接读取程序弹框的内容,但是人脑在面对大量数据以及正则表达式时的确无能为力,但应懂得利用电脑,人会利用这个工具才能做更多复杂的操作。因而保存到本地里面,运行输出结果。然后就是对截取字符串函数substr的复习吧。
4.逗比验证码第一期(http://lab1.xseclab.com/vcode1_bcfef7eacf7badc64aaf18844cdb1c46/index.php)
  进入页面后是一个登录框,提示登陆密码是4位纯数字数,第一位不为0,先用superdic生成字典,抓包到BP后,验证码输对,直接爆破密码。爆破出来是1238,在Repeator中改密码为1238,再点击转发,就拿下了key.
5.逗比验证码第二期(http://lab1.xseclab.com/vcode2_a6e6bac0b47c8187b09deb20babc0e85/index.php
  进入页面后任然是登陆框,不过有一句提示:程序猿:“该死的黑客,我让你绕!我验证一次就让你的验证码失效,看你怎么绕!”
Tips:密码是4位数字,首位不是0。
也就是说验证码可能会失效,不管先按常爆破一次,很明显没有用了,没有爆破出密码。接下来试试验证码与密码一起爆破。数量太大,不可取。最后试试不输入验证码,输入密码。居然提示的是密码错误,有搞头,直接把验证码清零,然后爆破密码,拿下key.
6.逗比验证码第三期(http://lab1.xseclab.com/vcode3_9d1ea7ad52ad93c04a837e0808b17097/index.php)
  进入页面后,依旧是登陆框。提示如下:Tips:密码是4位数字,首位不是0
Tips2: SESSION
也就是这一次绕过登陆得在session下手了。还是先抓包,按照第二期做法,还是验证码清0然后居然任然是报错pwd error,哎,那么直接爆破密码,拿下key。
7.微笑一下就能过关了(http://lab1.xseclab.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php)
  首先ctrl+u查看源代码,发现href有一个提示,打开这个后缀文件,发现是php代码,接下来进行代码审计。
header(“Content-type: text/html; charset=utf-8”);
if (isset($_GET[‘view-source’])) {
show_source(_FILE_);
exit();
}

include('flag.php'); 

$smile = 1;  

if (!isset ($_GET[‘^^’])) $smile = 0;
if (preg_match (‘/./‘, $_GET[‘^
^’])) $smile = 0;
if (preg_match (‘/%/‘, $_GET[‘^^’])) $smile = 0;
if (preg_match (‘/[0-9]/‘, $_GET[‘^
^’])) $smile = 0;
if (preg_match (‘/http/‘, $_GET[‘^^’]) ) $smile = 0;
if (preg_match (‘/https/‘, $_GET[‘^
^’]) ) $smile = 0;
if (preg_match (‘/ftp/‘, $_GET[‘^^’])) $smile = 0;
if (preg_match (‘/telnet/‘, $_GET[‘^
^’])) $smile = 0;
if (preg_match (‘/_/‘, $_SERVER[‘QUERY_STRING’])) $smile = 0;
if ($smile) {
if (@file_exists ($_GET[‘^^’])) $smile = 0;
}
if ($smile) {
$smile = @file_get_contents ($_GET[‘^
^’]);
if ($smile === “(●’◡’●)”) die($flag);
}
首先可以看到,其包含了flag.php.那么可以用php的协议流直接看一下flag.php中的内容构造payload:file=php://filter/read=convert.base64-encode/recource=flag.php.等一下。这里没有定义file变量,也并不存在文件包含漏洞,因而该方法无效。还是得按代码内容进行构造Url.这里我想错了,重新构造。首先需要设置^^,其次它得内容必须为(●’◡’●),并且有一段很关键得代码$smile = @file_get_contents ($_GET[‘^^’]);
也就是说还得利用file_get_contents得特性才可以,因而构造payload:
^^=(●’◡’●),但是这样的代码在Url中肯定是不能出现的,再查询了一下file_get_contents(),这个函数里面的参数可以是data:,<文本数据>。也就是应该构造:^^=data:,<文本数据>,这里还需要看一下代码。因为正则表达式过滤的内容还没有考虑,首先它的内容不能有a-z,0-9,http(s),,telnet,ftp,%.这里这个笑脸中就包含了_所以应当对_进行编码。%5f,这里为什么%5f不会被过滤呢?问题先留这里
构造payload:^%5f^=data:,(●’◡’●),拿下flag.
  经过对get取参的复习后,我发现了自己的一个错误,这里代码的意思应当是对参数的值进行过滤,而不是对参数本身进行过滤处理。if (preg_match (‘/\
/‘, $_SERVER[‘QUERY_STRING’]))其次这里的这一句中的$SERVER这一个变量才是对get本身的参数进行过滤的。所以才会把_转化为%5f.