西普学院(实验吧)Web题解

1、你能跨过去吗?

Key Words:XSS

根据提示考察XSS,看给出的链接需要的是编解码

http://www.test.com/NodeMore.jsp?id=672613&page=2&pageCounter=32&undefined&callback=%2b/v%2b%20%2bADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA%2bAC0-&_=1302746925413

推荐链接:http://evilcos.me/lab/xssee/

先unescape解码

xw1

解码后代码使用UTF7解码

xw2

2、进来就给你想要的

这个题目主要是找后台地址,先在URL中尝试常用的后台地址,得到如下提示:

xw3

将admin 改成system,成功

xw4

3、请输入密码

查看源代码,发现是本地JS验证,使用Firefox中firebug查看a的值

xw5

输入得到key的值

xw6

4、猫捉老鼠

catch!catch!catch!嘿嘿,不多说了,再说剧透了

根据提示,需要抓包,在Response中看到content-row内容

xw7

输入后显示key值

xw8

5、forbidden

根据访问提示:

Make sure you are in HongKong

需要抓包修改,修改Accept-Language值,提价返回Key值

xw9

6、头有点大

根据访问提示

Please make sure you have installed .net framework 9.9!

Make sure you are in the region of England and browsing this site with Internet Explorer

需要修改headers,修改的地方有三个,如下图修改完后,返回Key值

xw10

7、仔细点就行了

是个asp的代码审计,查看源代码view the source code

发现程序中存在sql注入点

sql = “select * from bdmin where name='” & name & “‘”

burpsuite抓包后,修改post数据,如下

xw11

返回key值

xw12

具体过程可以参考[漏洞分析] CTF:ASP源码审计认证绕过

8、貌似有点难

根据PHP源代码

<?php
function GetIP(){
if(!empty($_SERVER["HTTP_CLIENT_IP"]))
	$cip = $_SERVER["HTTP_CLIENT_IP"];
else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
	$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if(!empty($_SERVER["REMOTE_ADDR"]))
	$cip = $_SERVER["REMOTE_ADDR"];
else
	$cip = "0.0.0.0";
return $cip;
}

$GetIPs = GetIP();
if ($GetIPs=="1.1.1.1"){
echo "Great! Key is *********";
}
else{
echo "错误!你的IP不在访问列表之内!";
}
?>			

需要修改客户端ip地址,使用BurpSuite抓包修改headers数据

(1)修改client-ip的值,成功

xw13

(2)修改x-forwarded-for的值,成功

xw14

(3)修改remote-addr的值,失败。

xw15

对于client-ip,x-forwarded-for的值都可以通过客户端进行修改,也就是可以挂代理修改,而remote-addr的值 是直接读取的客户端机器值,客户端修改是没用的,服务器获取的值不是headers中的值

9、这个看起来有点简单

根据URL测试,存在sql注入漏洞,使用sqlmap或手工注入都可以,获得Key的值

(1)sqlmap

xw16

(2)手工注入

xw17

10、这新闻不新

搜索功能,测试发现有搜索型注入漏洞,使用sqlmap进行post型注入

sqlmap -u “http://www.shiyanbar.com/ctf/examctfdetail/35″ –data=”title=1”

最后跑出的结果如下

xw18

11、程序员的问题

根据源代码提示,查看index.txt文件,分析是服务端的处理代码

在代码中发现sql注入点

<?php

if($_POST[user] && $_POST[pass]) {
	$conn = mysql_connect("*******", "****", "****");
	mysql_select_db("****") or die("Could not select database");
	if ($conn->connect_error) {
		die("Connection failed: " . mysql_error($conn));
} 
$user = $_POST[user];
$pass = md5($_POST[pass]);

$sql = "select user from php where (user='$user') and (pw='$pass')";
$query = mysql_query($sql);
if (!$query) {
	printf("Error: %s\n", mysql_error($conn));
	exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC);
//echo $row["pw"];
  if($row['user']=="admin") {
    echo "<p>Logged in! Key: *********** </p>";
  }

  if($row['user'] != "admin") {
    echo("<p>You are not admin!</p>");
  }
}

?>

我们可以构造如下username的值

Admin’)#

Admin’)– (注意最后有个空格)

实现突破,返回key值

xw19

12、PHP大法

根据提示,查看index.php.txt文件,是一段php代码

<?php
if(eregi("hackerDJ",$_GET[id])) {
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
  echo "<p>Access granted!</p>";
  echo "<p>flag: *****************} </p>";
}
?>

分析代码发现我们需要构造id这个参数,并让id=hackerDJ

直接赋值是不行的,需要进行URL编码,并且要经过两次URL编码,可以对hackerDJ中全部或部分值进行两次URL编码。

用J这个字母进行两次URL编码,构造

id=hackerD%25%34%61

提交后返回key的值

xw20

13、WTF这是什么鬼东西?

这是JSfuck编码,直接在浏览器console中复制代码运行就可以跑出结果

xw21

14、程序逻辑问题

根据提示来到Index.txt文件,分析代码,找到逻辑设计缺陷处,具体的缺陷逻辑可以参考以下链接

http://blog.csdn.net/cd_xuyue/article/details/48472077

程序逻辑如下:

(1)用户输入登录名、密码

(2)程序将输入的密码进行Md5加密

(3)根据用户输入的用户名查找数据库中的相应密码

(4)输入的密码(md5加密后)跟数据库中查询的密码进行比较,如果相同,则登录成功

缺陷在于用户可以自己控制username的输入,如果在输入username时控制了相应的password的值,然后跟输入的password值比较,只要相同就可以验证登录成功

所以构造如下输入(测试发现md5需要32位,16位会出错)

Username:’and 1=2 union select ‘21232f297a57a5a743894a0e4a801fc3’#

Password:admin

提交后返回key值

xw22

15、NSCTF web200

逆向加密算法的题目,根据给出的加密PHP源代码

xw23

写出逆向算法如下:

<?PHP
	$str = "a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; 
	
	$s3 = base64_decode(strrev(str_rot13($str)));
	function decode($str){
		$su = '';
		for($i=0;$i<strlen($str);$i++){
			$m = substr($str,$i,1);
			$j = ord($m)-1;
			$s1 = chr($j);
			$su = $su.$s1;
		}
		return $su;
	}
	echo strrev(decode($s3));
?>

运行后得到flag的值

xw24

 

您可能还喜欢...